Skip to content

Commit 2c38e67

Browse files
8302644: IGV: Apply filters per graph tab and not globally
Reviewed-by: rcastanedalo, chagedorn, thartmann
1 parent f0dba21 commit 2c38e67

File tree

17 files changed

+528
-544
lines changed

17 files changed

+528
-544
lines changed

src/utils/IdealGraphVisualizer/Filter/src/main/java/com/sun/hotspot/igv/filter/CustomFilter.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class CustomFilter extends AbstractFilter {
4040

4141
private String code;
4242
private String name;
43-
private ScriptEngine engine;
43+
private final ScriptEngine engine;
4444

4545
public CustomFilter(String name, String code, ScriptEngine engine) {
4646
this.name = name;
@@ -60,31 +60,25 @@ public String getCode() {
6060

6161
public void setName(String s) {
6262
name = s;
63-
fireChangedEvent();
6463
}
6564

6665
public void setCode(String s) {
6766
code = s;
68-
fireChangedEvent();
6967
}
7068

7169
@Override
7270
public OpenCookie getEditor() {
73-
return new OpenCookie() {
74-
75-
@Override
76-
public void open() {
77-
openInEditor();
78-
}
79-
};
71+
return this::openInEditor;
8072
}
8173

8274
public boolean openInEditor() {
8375
EditFilterDialog dialog = new EditFilterDialog(CustomFilter.this);
8476
dialog.setVisible(true);
85-
boolean result = dialog.wasAccepted();
86-
this.getChangedEvent().fire();
87-
return result;
77+
boolean accepted = dialog.wasAccepted();
78+
if (accepted) {
79+
getChangedEvent().fire();
80+
}
81+
return accepted;
8882
}
8983

9084
@Override

src/utils/IdealGraphVisualizer/Filter/src/main/java/com/sun/hotspot/igv/filter/FilterChain.java

Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,7 @@
2929
import com.sun.hotspot.igv.graph.Diagram;
3030
import java.util.ArrayList;
3131
import java.util.Collections;
32+
import java.util.Comparator;
3233
import java.util.List;
3334

3435
/**
@@ -37,60 +38,44 @@
3738
*/
3839
public class FilterChain implements ChangedEventProvider<FilterChain> {
3940

40-
private List<Filter> filters;
41-
private transient ChangedEvent<FilterChain> changedEvent;
41+
private final List<Filter> filters;
42+
private final transient ChangedEvent<FilterChain> changedEvent;
43+
private final String name;
4244

43-
private ChangedListener<Filter> changedListener = new ChangedListener<Filter>() {
45+
private final ChangedListener<Filter> changedListener = new ChangedListener<Filter>() {
4446
@Override
4547
public void changed(Filter source) {
4648
changedEvent.fire();
4749
}
4850
};
4951

50-
public FilterChain() {
52+
public FilterChain(String name) {
53+
this.name = name;
5154
filters = new ArrayList<>();
5255
changedEvent = new ChangedEvent<>(this);
5356
}
5457

55-
public FilterChain(FilterChain f) {
56-
this.filters = new ArrayList<>(f.filters);
57-
changedEvent = new ChangedEvent<>(this);
58+
public FilterChain() {
59+
this("");
60+
}
61+
62+
public void sortBy(List<String> order) {
63+
filters.sort(Comparator.comparingInt(f -> order.indexOf(f.getName())));
5864
}
5965

6066
@Override
6167
public ChangedEvent<FilterChain> getChangedEvent() {
6268
return changedEvent;
6369
}
6470

65-
public Filter getFilterAt(int index) {
66-
assert index >= 0 && index < filters.size();
67-
return filters.get(index);
68-
}
69-
70-
public void apply(Diagram d) {
71-
for (Filter f : filters) {
72-
f.apply(d);
73-
}
74-
}
75-
76-
public void apply(Diagram d, FilterChain sequence) {
77-
List<Filter> applied = new ArrayList<>();
78-
for (Filter f : sequence.getFilters()) {
79-
if (filters.contains(f)) {
80-
f.apply(d);
81-
applied.add(f);
82-
}
83-
}
84-
85-
86-
for (Filter f : filters) {
87-
if (!applied.contains(f)) {
88-
f.apply(d);
71+
public void applyInOrder(Diagram diagram, FilterChain filterOrder) {
72+
for (Filter filter : filterOrder.getFilters()) {
73+
if (filters.contains(filter)) {
74+
filter.apply(diagram);
8975
}
9076
}
9177
}
9278

93-
9479
public void addFilter(Filter filter) {
9580
assert filter != null;
9681
filters.add(filter);
@@ -102,6 +87,14 @@ public boolean containsFilter(Filter filter) {
10287
return filters.contains(filter);
10388
}
10489

90+
public void clearFilters() {
91+
for (Filter filter : filters) {
92+
filter.getChangedEvent().removeListener(changedListener);
93+
}
94+
filters.clear();
95+
changedEvent.fire();
96+
}
97+
10598
public void removeFilter(Filter filter) {
10699
assert filters.contains(filter);
107100
filters.remove(filter);
@@ -129,7 +122,22 @@ public void moveFilterDown(Filter filter) {
129122
changedEvent.fire();
130123
}
131124

125+
public void addFilters(List<Filter> filtersToAdd) {
126+
for (Filter filter : filtersToAdd) {
127+
addFilter(filter);
128+
}
129+
}
130+
132131
public List<Filter> getFilters() {
133132
return Collections.unmodifiableList(filters);
134133
}
134+
135+
public String getName() {
136+
return name;
137+
}
138+
139+
@Override
140+
public String toString() {
141+
return getName();
142+
}
135143
}

src/utils/IdealGraphVisualizer/Filter/src/main/java/com/sun/hotspot/igv/filter/FilterChainProvider.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -23,13 +23,23 @@
2323
*/
2424
package com.sun.hotspot.igv.filter;
2525

26+
import com.sun.hotspot.igv.data.ChangedListener;
27+
import javax.swing.JComboBox;
28+
2629
/**
2730
*
2831
* @author Thomas Wuerthinger
2932
*/
3033
public interface FilterChainProvider {
3134

32-
public FilterChain getFilterChain();
35+
FilterChain getFilterChain();
36+
FilterChain getAllFiltersOrdered();
37+
38+
FilterChain createNewCustomFilterChain();
39+
40+
void setCustomFilterChain(FilterChain filterChain);
41+
42+
void selectFilterChain(FilterChain filterChain);
3343

34-
public FilterChain getSequence();
44+
void setFilterChainSelectionChangedListener(ChangedListener<JComboBox<FilterChain>> listener);
3545
}

src/utils/IdealGraphVisualizer/Filter/src/main/java/com/sun/hotspot/igv/filter/FilterSetting.java

Lines changed: 0 additions & 82 deletions
This file was deleted.

src/utils/IdealGraphVisualizer/FilterWindow/src/main/java/com/sun/hotspot/igv/filterwindow/FilterChainProviderImplementation.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2008, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,10 @@
2323
*/
2424
package com.sun.hotspot.igv.filterwindow;
2525

26+
import com.sun.hotspot.igv.data.ChangedListener;
2627
import com.sun.hotspot.igv.filter.FilterChain;
2728
import com.sun.hotspot.igv.filter.FilterChainProvider;
29+
import javax.swing.JComboBox;
2830
import org.openide.util.lookup.ServiceProvider;
2931

3032
/**
@@ -36,11 +38,31 @@ public class FilterChainProviderImplementation implements FilterChainProvider {
3638

3739
@Override
3840
public FilterChain getFilterChain() {
39-
return FilterTopComponent.findInstance().getFilterChain();
41+
return FilterTopComponent.findInstance().getCurrentChain();
4042
}
4143

4244
@Override
43-
public FilterChain getSequence() {
44-
return FilterTopComponent.findInstance().getSequence();
45+
public FilterChain getAllFiltersOrdered() {
46+
return FilterTopComponent.findInstance().getAllFiltersOrdered();
47+
}
48+
49+
@Override
50+
public FilterChain createNewCustomFilterChain() {
51+
return FilterTopComponent.findInstance().createNewCustomFilterChain();
52+
}
53+
54+
@Override
55+
public void selectFilterChain(FilterChain filterChain) {
56+
FilterTopComponent.findInstance().selectFilterChain(filterChain);
57+
}
58+
59+
@Override
60+
public void setCustomFilterChain(FilterChain filterChain) {
61+
FilterTopComponent.findInstance().setCustomFilterChain(filterChain);
62+
}
63+
64+
@Override
65+
public void setFilterChainSelectionChangedListener(ChangedListener<JComboBox<FilterChain>> listener) {
66+
FilterTopComponent.findInstance().setFilterChainSelectionChangedListener(listener);
4567
}
4668
}

src/utils/IdealGraphVisualizer/FilterWindow/src/main/java/com/sun/hotspot/igv/filterwindow/FilterNode.java

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -45,10 +45,9 @@
4545
*
4646
* @author Thomas Wuerthinger
4747
*/
48-
public class FilterNode extends CheckNode implements LookupListener, ChangedListener<FilterTopComponent> {
48+
public class FilterNode extends CheckNode implements ChangedListener<FilterTopComponent> {
4949

50-
private Filter filter;
51-
private Lookup.Result<FilterChain> result;
50+
private final Filter filter;
5251

5352
public FilterNode(Filter filter) {
5453
this(filter, new InstanceContent());
@@ -64,12 +63,8 @@ private FilterNode(Filter filter, InstanceContent content) {
6463

6564
update();
6665

67-
Lookup.Template<FilterChain> tpl = new Lookup.Template<>(FilterChain.class);
68-
result = Utilities.actionsGlobalContext().lookup(tpl);
69-
result.addLookupListener(this);
70-
7166
FilterTopComponent.findInstance().getFilterSettingsChangedEvent().addListener(this);
72-
resultChanged(null);
67+
changed(FilterTopComponent.findInstance());
7368

7469
setShortDescription("Double-click to open filter");
7570
}
@@ -99,13 +94,8 @@ public Action getPreferredAction() {
9994
return OpenAction.get(OpenAction.class).createContextAwareInstance(Utilities.actionsGlobalContext());
10095
}
10196

102-
@Override
103-
public void resultChanged(LookupEvent lookupEvent) {
104-
changed(FilterTopComponent.findInstance());
105-
}
106-
10797
@Override
10898
public void changed(FilterTopComponent source) {
109-
setSelected(source.getFilterChain().containsFilter(filter));
99+
setSelected(source.getCurrentChain().containsFilter(filter));
110100
}
111101
}

0 commit comments

Comments
 (0)