aboutsummaryrefslogtreecommitdiff
path: root/src/share/tools
diff options
context:
space:
mode:
authornever <none@none>2008-10-30 17:08:48 -0700
committernever <none@none>2008-10-30 17:08:48 -0700
commitda745c8106e3e41e5d5362ea0fef62f04bdf524c (patch)
treebdc27665ccc3aa2bbd583af19f856ff4f415eca1 /src/share/tools
parent3305bd9586e1b03fc17c19ce0c9ffbd7f2d92740 (diff)
downloadjdk8u_hotspot-da745c8106e3e41e5d5362ea0fef62f04bdf524c.tar.gz
6764622: IdealGraphVisualizer fixes
Reviewed-by: rasbold, jrose
Diffstat (limited to 'src/share/tools')
-rw-r--r--src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/BytecodeViewTopComponent.java7
-rw-r--r--src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowScene.java7
-rw-r--r--src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.java7
-rw-r--r--src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/FolderNode.java18
-rw-r--r--src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/GraphDocument.java2
-rw-r--r--src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Group.java2
-rw-r--r--src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputGraph.java27
-rw-r--r--src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputMethod.java2
-rw-r--r--src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputNode.java2
-rw-r--r--src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Properties.java148
-rw-r--r--src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Property.java24
-rw-r--r--src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Parser.java39
-rw-r--r--src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Printer.java2
-rw-r--r--src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLParser.java8
-rw-r--r--src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLWriter.java8
-rw-r--r--src/share/tools/IdealGraphVisualizer/Difference/src/com/sun/hotspot/igv/difference/Difference.java27
-rw-r--r--src/share/tools/IdealGraphVisualizer/Filter/manifest.mf12
-rw-r--r--src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/CustomFilter.java3
-rw-r--r--src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/SplitFilter.java4
-rw-r--r--src/share/tools/IdealGraphVisualizer/Graph/src/com/sun/hotspot/igv/graph/Diagram.java4
-rw-r--r--src/share/tools/IdealGraphVisualizer/Graph/src/com/sun/hotspot/igv/graph/Figure.java2
-rw-r--r--src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/Graph.java10
-rw-r--r--src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/HierarchicalClusterLayoutManager.java26
-rw-r--r--src/share/tools/IdealGraphVisualizer/Layout/src/com/sun/hotspot/igv/layout/LayoutGraph.java14
-rw-r--r--src/share/tools/IdealGraphVisualizer/README19
-rw-r--r--src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/PropertiesSheet.java6
-rw-r--r--src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/RangeSliderModel.java8
-rw-r--r--src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramScene.java18
-rw-r--r--src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewModel.java39
-rw-r--r--src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/FindPanel.java2
-rw-r--r--src/share/tools/IdealGraphVisualizer/nbproject/platform.properties12
-rw-r--r--src/share/tools/IdealGraphVisualizer/nbproject/project.properties5
32 files changed, 319 insertions, 195 deletions
diff --git a/src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/BytecodeViewTopComponent.java b/src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/BytecodeViewTopComponent.java
index 6fbbe90e9..d5b2a2ecd 100644
--- a/src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/BytecodeViewTopComponent.java
+++ b/src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/BytecodeViewTopComponent.java
@@ -28,6 +28,7 @@ import com.sun.hotspot.igv.data.InputGraph;
import com.sun.hotspot.igv.data.services.InputGraphProvider;
import java.awt.BorderLayout;
import java.io.Serializable;
+import javax.swing.SwingUtilities;
import org.openide.ErrorManager;
import org.openide.explorer.ExplorerManager;
import org.openide.explorer.ExplorerUtils;
@@ -151,14 +152,18 @@ final class BytecodeViewTopComponent extends TopComponent implements ExplorerMan
}
public void resultChanged(LookupEvent lookupEvent) {
- InputGraphProvider p = Lookup.getDefault().lookup(InputGraphProvider.class);
+ final InputGraphProvider p = Lookup.getDefault().lookup(InputGraphProvider.class);
if (p != null) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
InputGraph graph = p.getGraph();
if (graph != null) {
Group g = graph.getGroup();
rootNode.update(graph, g.getMethod());
}
}
+ });
+ }
}
final static class ResolvableHelper implements Serializable {
diff --git a/src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowScene.java b/src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowScene.java
index 8b794b11a..e497b349f 100644
--- a/src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowScene.java
+++ b/src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowScene.java
@@ -33,7 +33,7 @@ import java.awt.Point;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.HashSet;
-import java.util.Hashtable;
+import java.util.HashMap;
import java.util.Set;
import javax.swing.BorderFactory;
import org.netbeans.api.visual.action.ActionFactory;
@@ -44,7 +44,6 @@ import org.netbeans.api.visual.action.SelectProvider;
import org.netbeans.api.visual.action.WidgetAction;
import org.netbeans.api.visual.anchor.AnchorFactory;
import org.netbeans.api.visual.anchor.AnchorShape;
-import com.sun.hotspot.igv.controlflow.HierarchicalGraphLayout;
import org.netbeans.api.visual.layout.LayoutFactory;
import org.netbeans.api.visual.router.RouterFactory;
import org.netbeans.api.visual.widget.LayerWidget;
@@ -61,8 +60,8 @@ import org.openide.util.Lookup;
*/
public class ControlFlowScene extends GraphScene<InputBlock, InputBlockEdge> implements SelectProvider, MoveProvider, RectangularSelectDecorator, RectangularSelectProvider {
- private Set<BlockWidget> selection;
- private Hashtable<InputBlock, BlockWidget> blockMap;
+ private HashSet<BlockWidget> selection;
+ private HashMap<InputBlock, BlockWidget> blockMap;
private InputGraph oldGraph;
private LayerWidget edgeLayer;
private LayerWidget mainLayer;
diff --git a/src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.java b/src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.java
index 968cdd531..8cb6405f6 100644
--- a/src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.java
+++ b/src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.java
@@ -28,6 +28,7 @@ import com.sun.hotspot.igv.data.services.InputGraphProvider;
import java.awt.BorderLayout;
import java.io.Serializable;
import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
import org.openide.ErrorManager;
import org.openide.util.Lookup;
import org.openide.util.LookupEvent;
@@ -143,13 +144,17 @@ final class ControlFlowTopComponent extends TopComponent implements LookupListen
public void resultChanged(LookupEvent lookupEvent) {
- InputGraphProvider p = Lookup.getDefault().lookup(InputGraphProvider.class);
+ final InputGraphProvider p = Lookup.getDefault().lookup(InputGraphProvider.class);
if (p != null) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
InputGraph g = p.getGraph();
if (g != null) {
scene.setGraph(g);
}
}
+ });
+ }
}
@Override
diff --git a/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/FolderNode.java b/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/FolderNode.java
index b5398edae..2805d749d 100644
--- a/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/FolderNode.java
+++ b/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/FolderNode.java
@@ -24,6 +24,7 @@
package com.sun.hotspot.igv.coordinator;
import com.sun.hotspot.igv.coordinator.actions.RemoveCookie;
+import com.sun.hotspot.igv.data.ChangedListener;
import com.sun.hotspot.igv.data.Group;
import com.sun.hotspot.igv.data.services.GroupOrganizer;
import com.sun.hotspot.igv.data.InputGraph;
@@ -50,17 +51,24 @@ public class FolderNode extends AbstractNode {
private List<String> subFolders;
private FolderChildren children;
- private static class FolderChildren extends Children.Keys {
+ private static class FolderChildren extends Children.Keys implements ChangedListener<Group> {
private FolderNode parent;
+ private List<Group> registeredGroups;
public void setParent(FolderNode parent) {
this.parent = parent;
+ this.registeredGroups = new ArrayList<Group>();
}
@Override
protected Node[] createNodes(Object arg0) {
+ for(Group g : registeredGroups) {
+ g.getChangedEvent().removeListener(this);
+ }
+ registeredGroups.clear();
+
Pair<String, List<Group>> p = (Pair<String, List<Group>>) arg0;
if (p.getLeft().length() == 0) {
@@ -69,6 +77,8 @@ public class FolderNode extends AbstractNode {
for (InputGraph graph : g.getGraphs()) {
curNodes.add(new GraphNode(graph));
}
+ g.getChangedEvent().addListener(this);
+ registeredGroups.add(g);
}
Node[] result = new Node[curNodes.size()];
@@ -85,7 +95,13 @@ public class FolderNode extends AbstractNode {
@Override
public void addNotify() {
this.setKeys(parent.structure);
+ }
+ public void changed(Group source) {
+ List<Pair<String, List<Group>>> newStructure = new ArrayList<Pair<String, List<Group>>>();
+ for(Pair<String, List<Group>> p : parent.structure) {
+ refreshKey(p);
+ }
}
}
diff --git a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/GraphDocument.java b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/GraphDocument.java
index 27d09c38f..53f90f242 100644
--- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/GraphDocument.java
+++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/GraphDocument.java
@@ -31,7 +31,7 @@ import java.util.List;
*
* @author Thomas Wuerthinger
*/
-public class GraphDocument extends Properties.Object implements ChangedEventProvider<GraphDocument> {
+public class GraphDocument extends Properties.Entity implements ChangedEventProvider<GraphDocument> {
private List<Group> groups;
private ChangedEvent<GraphDocument> changedEvent;
diff --git a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Group.java b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Group.java
index 8f0aa15e9..a54cd19bc 100644
--- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Group.java
+++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Group.java
@@ -37,7 +37,7 @@ import java.util.Set;
*
* @author Thomas Wuerthinger
*/
-public class Group extends Properties.Object implements ChangedEventProvider<Group> {
+public class Group extends Properties.Entity implements ChangedEventProvider<Group> {
private List<InputGraph> graphs;
private transient ChangedEvent<Group> changedEvent;
diff --git a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputGraph.java b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputGraph.java
index b929fd627..9e1834423 100644
--- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputGraph.java
+++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputGraph.java
@@ -23,26 +23,25 @@
*/
package com.sun.hotspot.igv.data;
-import com.sun.hotspot.igv.data.Properties;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
-import java.util.Hashtable;
+import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import java.util.Set;
/**
*
* @author Thomas Wuerthinger
*/
-public class InputGraph extends Properties.Object {
+public class InputGraph extends Properties.Entity {
- private Map<Integer, InputNode> nodes;
- private Set<InputEdge> edges;
+ private HashMap<Integer, InputNode> nodes;
+ private ArrayList<InputEdge> edges;
private Group parent;
- private Map<String, InputBlock> blocks;
- private Map<Integer, InputBlock> nodeToBlock;
+ private HashMap<String, InputBlock> blocks;
+ private HashMap<Integer, InputBlock> nodeToBlock;
private boolean isDifferenceGraph;
public InputGraph(Group parent) {
@@ -61,10 +60,10 @@ public class InputGraph extends Properties.Object {
public InputGraph(Group parent, InputGraph last, String name) {
this.parent = parent;
setName(name);
- nodes = new Hashtable<Integer, InputNode>();
- edges = new HashSet<InputEdge>();
- blocks = new Hashtable<String, InputBlock>();
- nodeToBlock = new Hashtable<Integer, InputBlock>();
+ nodes = new HashMap<Integer, InputNode>();
+ edges = new ArrayList<InputEdge>();
+ blocks = new HashMap<String, InputBlock>();
+ nodeToBlock = new HashMap<Integer, InputBlock>();
if (last != null) {
for (InputNode n : last.getNodes()) {
@@ -182,8 +181,8 @@ public class InputGraph extends Properties.Object {
return nodes.remove(index);
}
- public Set<InputEdge> getEdges() {
- return Collections.unmodifiableSet(edges);
+ public Collection<InputEdge> getEdges() {
+ return Collections.unmodifiableList(edges);
}
public void removeEdge(InputEdge c) {
diff --git a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputMethod.java b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputMethod.java
index eac6b1a03..586efdc97 100644
--- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputMethod.java
+++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputMethod.java
@@ -32,7 +32,7 @@ import java.util.List;
*
* @author Thomas Wuerthinger
*/
-public class InputMethod extends Properties.Object {
+public class InputMethod extends Properties.Entity {
private String name;
private int bci;
diff --git a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputNode.java b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputNode.java
index ad15d141a..27dd3a52a 100644
--- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputNode.java
+++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputNode.java
@@ -27,7 +27,7 @@ package com.sun.hotspot.igv.data;
*
* @author Thomas Wuerthinger
*/
-public class InputNode extends Properties.Object {
+public class InputNode extends Properties.Entity {
private int id;
diff --git a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Properties.java b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Properties.java
index 07a29962f..75c62611d 100644
--- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Properties.java
+++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Properties.java
@@ -26,24 +26,22 @@ package com.sun.hotspot.igv.data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
-import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+
/**
*
* @author Thomas Wuerthinger
*/
-public class Properties implements Serializable {
+public class Properties implements Serializable, Iterable<Property> {
public static final long serialVersionUID = 1L;
- private Map<String, Property> map;
+ private String[] map = new String[4];
public Properties() {
- map = new HashMap<String, Property>(5);
}
@Override
@@ -54,10 +52,7 @@ public class Properties implements Serializable {
Properties p = (Properties) o;
- if (getProperties().size() != p.getProperties().size()) {
- return false;
- }
- for (Property prop : getProperties()) {
+ for (Property prop : this) {
String value = p.get(prop.getName());
if (value == null || !value.equals(prop.getValue())) {
return false;
@@ -75,32 +70,33 @@ public class Properties implements Serializable {
public Properties(String name, String value) {
this();
- this.add(new Property(name, value));
+ this.setProperty(name, value);
}
public Properties(String name, String value, String name1, String value1) {
this(name, value);
- this.add(new Property(name1, value1));
+ this.setProperty(name1, value1);
}
public Properties(String name, String value, String name1, String value1, String name2, String value2) {
this(name, value, name1, value1);
- this.add(new Property(name2, value2));
+ this.setProperty(name2, value2);
}
public Properties(Properties p) {
- map = new HashMap<String, Property>(p.map);
+ map = new String[p.map.length];
+ System.arraycopy(map, 0, p.map, 0, p.map.length);
}
- public static class Object implements Provider {
+ public static class Entity implements Provider {
private Properties properties;
- public Object() {
+ public Entity() {
properties = new Properties();
}
- public Object(Properties.Object object) {
+ public Entity(Properties.Entity object) {
properties = new Properties(object.getProperties());
}
@@ -109,6 +105,14 @@ public class Properties implements Serializable {
}
}
+ private String getProperty(String key) {
+ for (int i = 0; i < map.length; i += 2)
+ if (map[i] != null && map[i].equals(key)) {
+ return map[i + 1];
+ }
+ return null;
+ }
+
public interface PropertyMatcher {
String getName();
@@ -173,13 +177,15 @@ public class Properties implements Serializable {
}
public Property selectSingle(PropertyMatcher matcher) {
-
- Property p = this.map.get(matcher.getName());
- if (p == null) {
- return null;
+ String value = null;
+ for (int i = 0; i < map.length; i += 2) {
+ if (map[i] != null && matcher.getName().equals(map[i])) {
+ value = map[i + 1];
+ break;
+ }
}
- if (matcher.match(p.getValue())) {
- return p;
+ if (value != null && matcher.match(value)) {
+ return new Property(matcher.getName(), value);
} else {
return null;
}
@@ -194,8 +200,11 @@ public class Properties implements Serializable {
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
- for (Property p : map.values()) {
- sb.append(p.toString());
+ for (int i = 0; i < map.length; i += 2) {
+ if (map[i + 1] != null) {
+ String p = map[i + 1];
+ sb.append(map[i] + " = " + map[i + 1] + "; ");
+ }
}
return sb.append("]").toString();
}
@@ -241,41 +250,51 @@ public class Properties implements Serializable {
}
public String get(String key) {
- Property p = map.get(key);
- if (p == null) {
- return null;
- } else {
- return p.getValue();
+ for (int i = 0; i < map.length; i += 2) {
+ if (map[i] != null && map[i].equals(key)) {
+ return map[i + 1];
+ }
}
+ return null;
}
- public String getProperty(String string) {
- return get(string);
- }
-
- public Property setProperty(String name, String value) {
-
+ public void setProperty(String name, String value) {
+ for (int i = 0; i < map.length; i += 2) {
+ if (map[i] != null && map[i].equals(name)) {
+ String p = map[i + 1];
+ if (value == null) {
+ // remove this property
+ map[i] = null;
+ map[i + 1] = null;
+ } else {
+ map[i + 1] = value;
+ }
+ return;
+ }
+ }
if (value == null) {
- // remove this property
- return map.remove(name);
- } else {
- Property p = map.get(name);
- if (p == null) {
- p = new Property(name, value);
- map.put(name, p);
- } else {
- p.setValue(value);
+ return;
+ }
+ for (int i = 0; i < map.length; i += 2) {
+ if (map[i] == null) {
+ map[i] = name;
+ map[i + 1] = value;
+ return;
}
- return p;
}
+ String[] newMap = new String[map.length + 4];
+ System.arraycopy(map, 0, newMap, 0, map.length);
+ newMap[map.length] = name;
+ newMap[map.length + 1] = value;
+ map = newMap;
}
- public Collection<Property> getProperties() {
- return Collections.unmodifiableCollection(map.values());
+ public Iterator<Property> getProperties() {
+ return iterator();
}
public void add(Properties properties) {
- for (Property p : properties.getProperties()) {
+ for (Property p : properties) {
add(p);
}
}
@@ -283,6 +302,35 @@ public class Properties implements Serializable {
public void add(Property property) {
assert property.getName() != null;
assert property.getValue() != null;
- map.put(property.getName(), property);
+ setProperty(property.getName(), property.getValue());
+ }
+ class PropertiesIterator implements Iterator<Property>, Iterable<Property> {
+ public Iterator<Property> iterator() {
+ return this;
+ }
+
+ int index;
+
+ public boolean hasNext() {
+ while (index < map.length && map[index + 1] == null)
+ index += 2;
+ return index < map.length;
+ }
+
+ public Property next() {
+ if (index < map.length) {
+ index += 2;
+ return new Property(map[index - 2], map[index - 1]);
+ }
+ return null;
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ }
+ public Iterator<Property> iterator() {
+ return new PropertiesIterator();
}
}
diff --git a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Property.java b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Property.java
index 6694153d3..d18990805 100644
--- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Property.java
+++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Property.java
@@ -32,18 +32,19 @@ import java.io.Serializable;
public class Property implements Serializable {
public static final long serialVersionUID = 1L;
+
private String name;
private String value;
- public Property() {
+ private Property() {
this(null, null);
}
- public Property(Property p) {
+ private Property(Property p) {
this(p.getName(), p.getValue());
}
- public Property(String name) {
+ private Property(String name) {
this(name, null);
}
@@ -60,16 +61,19 @@ public class Property implements Serializable {
return value;
}
- public void setName(String s) {
- this.name = s;
+ @Override
+ public String toString() {
+ return name + " = " + value + "; ";
}
- public void setValue(String s) {
- this.value = s;
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof Property)) return false;
+ Property p2 = (Property)o;
+ return name.equals(p2.name) && value.equals(p2.value);
}
-
@Override
- public String toString() {
- return name + " = " + value + "; ";
+ public int hashCode() {
+ return name.hashCode() + value == null ? 0 : value.hashCode();
}
}
diff --git a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Parser.java b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Parser.java
index 410ee7c41..3d3c9e608 100644
--- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Parser.java
+++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Parser.java
@@ -38,6 +38,7 @@ import com.sun.hotspot.igv.data.serialization.XMLParser.HandoverElementHandler;
import com.sun.hotspot.igv.data.serialization.XMLParser.ParseMonitor;
import com.sun.hotspot.igv.data.serialization.XMLParser.TopElementHandler;
import java.io.IOException;
+import java.util.HashMap;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
@@ -88,6 +89,18 @@ public class Parser {
private TopElementHandler xmlDocument = new TopElementHandler();
private boolean difference;
private GroupCallback groupCallback;
+ private HashMap<String, Integer> idCache = new HashMap<String, Integer>();
+ private int maxId = 0;
+
+ private int lookupID(String i) {
+ Integer id = idCache.get(i);
+ if (id == null) {
+ id = maxId++;
+ idCache.put(i, id);
+ }
+ return id.intValue();
+ }
+
// <graphDocument>
private ElementHandler<GraphDocument, Object> topHandler = new ElementHandler<GraphDocument, Object>(TOP_ELEMENT) {
@@ -187,13 +200,13 @@ public class Parser {
previous = null;
}
InputGraph curGraph = new InputGraph(getParentObject(), previous, name);
- getParentObject().addGraph(curGraph);
this.graph = curGraph;
return curGraph;
}
@Override
protected void end(String text) throws SAXException {
+ getParentObject().addGraph(graph);
graph.resolveBlockLinks();
}
};
@@ -207,7 +220,7 @@ public class Parser {
@Override
protected InputBlock start() throws SAXException {
InputGraph graph = getParentObject();
- String name = readRequiredAttribute(BLOCK_NAME_PROPERTY);
+ String name = readRequiredAttribute(BLOCK_NAME_PROPERTY).intern();
InputBlock b = new InputBlock(getParentObject(), name);
graph.addBlock(b);
return b;
@@ -224,7 +237,7 @@ public class Parser {
int id = 0;
try {
- id = Integer.parseInt(s);
+ id = lookupID(s);
} catch (NumberFormatException e) {
throw new SAXException(e);
}
@@ -252,7 +265,7 @@ public class Parser {
String s = readRequiredAttribute(NODE_ID_PROPERTY);
int id = 0;
try {
- id = Integer.parseInt(s);
+ id = lookupID(s);
} catch (NumberFormatException e) {
throw new SAXException(e);
}
@@ -269,7 +282,7 @@ public class Parser {
String s = readRequiredAttribute(NODE_ID_PROPERTY);
int id = 0;
try {
- id = Integer.parseInt(s);
+ id = lookupID(s);
} catch (NumberFormatException e) {
throw new SAXException(e);
}
@@ -280,7 +293,7 @@ public class Parser {
private HandoverElementHandler<InputGraph> edgesHandler = new HandoverElementHandler<InputGraph>(EDGES_ELEMENT);
// Local class for edge elements
- private static class EdgeElementHandler extends ElementHandler<InputEdge, InputGraph> {
+ private class EdgeElementHandler extends ElementHandler<InputEdge, InputGraph> {
public EdgeElementHandler(String name) {
super(name);
@@ -298,8 +311,8 @@ public class Parser {
toIndex = Integer.parseInt(toIndexString);
}
- from = Integer.parseInt(readRequiredAttribute(FROM_PROPERTY));
- to = Integer.parseInt(readRequiredAttribute(TO_PROPERTY));
+ from = lookupID(readRequiredAttribute(FROM_PROPERTY));
+ to = lookupID(readRequiredAttribute(TO_PROPERTY));
} catch (NumberFormatException e) {
throw new SAXException(e);
}
@@ -344,18 +357,16 @@ public class Parser {
}
};
// <property>
- private ElementHandler<Property, Properties.Provider> propertyHandler = new XMLParser.ElementHandler<Property, Properties.Provider>(PROPERTY_ELEMENT, true) {
+ private ElementHandler<String, Properties.Provider> propertyHandler = new XMLParser.ElementHandler<String, Properties.Provider>(PROPERTY_ELEMENT, true) {
@Override
- public Property start() throws SAXException {
- String value = "";
- String name = readRequiredAttribute(PROPERTY_NAME_PROPERTY).intern();
- return getParentObject().getProperties().setProperty(name, value);
+ public String start() throws SAXException {
+ return readRequiredAttribute(PROPERTY_NAME_PROPERTY).intern();
}
@Override
public void end(String text) {
- getObject().setValue(text.trim().intern());
+ getParentObject().getProperties().setProperty(getObject(), text.trim().intern());
}
};
diff --git a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Printer.java b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Printer.java
index c5b794fce..b9053ec30 100644
--- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Printer.java
+++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Printer.java
@@ -67,7 +67,7 @@ public class Printer {
private void export(XMLWriter writer, Group g) throws IOException {
Properties attributes = new Properties();
- attributes.add(new Property("difference", Boolean.toString(true)));
+ attributes.setProperty("difference", Boolean.toString(true));
writer.startTag(Parser.GROUP_ELEMENT, attributes);
writer.writeProperties(g.getProperties());
diff --git a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLParser.java b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLParser.java
index 1efcd06de..24cd0f7d3 100644
--- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLParser.java
+++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLParser.java
@@ -25,7 +25,7 @@ package com.sun.hotspot.igv.data.serialization;
import com.sun.hotspot.igv.data.Property;
import com.sun.hotspot.igv.data.Properties;
-import java.util.Hashtable;
+import java.util.HashMap;
import java.util.Stack;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
@@ -89,7 +89,7 @@ public class XMLParser implements ContentHandler {
private Attributes attr;
private StringBuilder currentText;
private ParseMonitor monitor;
- private Hashtable<String, ElementHandler<?, ? super T>> hashtable;
+ private HashMap<String, ElementHandler<?, ? super T>> hashtable;
private boolean needsText;
private ElementHandler<P, ?> parentElement;
@@ -110,7 +110,7 @@ public class XMLParser implements ContentHandler {
}
public ElementHandler(String name, boolean needsText) {
- this.hashtable = new Hashtable<String, ElementHandler<?, ? super T>>();
+ this.hashtable = new HashMap<String, ElementHandler<?, ? super T>>();
this.name = name;
this.needsText = needsText;
}
@@ -153,7 +153,7 @@ public class XMLParser implements ContentHandler {
for (int i = 0; i < length; i++) {
String val = attr.getValue(i).intern();
String localName = attr.getLocalName(i).intern();
- p.add(new Property(val, localName));
+ p.setProperty(val, localName);
}
}
diff --git a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLWriter.java b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLWriter.java
index e112dbf4f..8ff54f75d 100644
--- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLWriter.java
+++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLWriter.java
@@ -89,7 +89,7 @@ public class XMLWriter extends Writer {
inner.write("<" + name);
elementStack.push(name);
- for (Property p : attributes.getProperties()) {
+ for (Property p : attributes) {
inner.write(" " + p.getName() + "=\"");
write(p.getValue().toCharArray());
inner.write("\"");
@@ -101,7 +101,7 @@ public class XMLWriter extends Writer {
public void simpleTag(String name, Properties attributes) throws IOException {
inner.write("<" + name);
- for (Property p : attributes.getProperties()) {
+ for (Property p : attributes) {
inner.write(" " + p.getName() + "=\"");
write(p.getValue().toCharArray());
inner.write("\"");
@@ -111,13 +111,13 @@ public class XMLWriter extends Writer {
}
public void writeProperties(Properties props) throws IOException {
- if (props.getProperties().size() == 0) {
+ if (props.getProperties().hasNext() == false) {
return;
}
startTag(Parser.PROPERTIES_ELEMENT);
- for (Property p : props.getProperties()) {
+ for (Property p : props) {
startTag(Parser.PROPERTY_ELEMENT, new Properties(Parser.PROPERTY_NAME_PROPERTY, p.getName()));
this.write(p.getValue().toCharArray());
endTag();
diff --git a/src/share/tools/IdealGraphVisualizer/Difference/src/com/sun/hotspot/igv/difference/Difference.java b/src/share/tools/IdealGraphVisualizer/Difference/src/com/sun/hotspot/igv/difference/Difference.java
index 335344eb7..650ee5f63 100644
--- a/src/share/tools/IdealGraphVisualizer/Difference/src/com/sun/hotspot/igv/difference/Difference.java
+++ b/src/share/tools/IdealGraphVisualizer/Difference/src/com/sun/hotspot/igv/difference/Difference.java
@@ -29,6 +29,7 @@ import com.sun.hotspot.igv.data.InputEdge;
import com.sun.hotspot.igv.data.InputGraph;
import com.sun.hotspot.igv.data.InputNode;
import com.sun.hotspot.igv.data.Property;
+import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@@ -124,8 +125,8 @@ public class Difference {
inputNodeMap.put(n, n2);
}
- Set<InputEdge> edgesA = a.getEdges();
- Set<InputEdge> edgesB = b.getEdges();
+ Collection<InputEdge> edgesA = a.getEdges();
+ Collection<InputEdge> edgesB = b.getEdges();
Set<InputEdge> newEdges = new HashSet<InputEdge>();
@@ -182,7 +183,7 @@ public class Difference {
public double getValue() {
double result = 0.0;
- for (Property p : n1.getProperties().getProperties()) {
+ for (Property p : n1.getProperties()) {
double faktor = 1.0;
for (String forbidden : IGNORE_PROPERTIES) {
if (p.getName().equals(forbidden)) {
@@ -287,34 +288,34 @@ public class Difference {
private static void markAsChanged(InputNode n, InputNode firstNode, InputNode otherNode) {
boolean difference = false;
- for (Property p : otherNode.getProperties().getProperties()) {
- String s = firstNode.getProperties().getProperty(p.getName());
+ for (Property p : otherNode.getProperties()) {
+ String s = firstNode.getProperties().get(p.getName());
if (!p.getValue().equals(s)) {
difference = true;
- n.getProperties().add(new Property(OLD_PREFIX + p.getName(), p.getValue()));
+ n.getProperties().setProperty(OLD_PREFIX + p.getName(), p.getValue());
}
}
- for (Property p : firstNode.getProperties().getProperties()) {
- String s = otherNode.getProperties().getProperty(p.getName());
+ for (Property p : firstNode.getProperties()) {
+ String s = otherNode.getProperties().get(p.getName());
if (s == null && p.getValue().length() > 0) {
difference = true;
- n.getProperties().add(new Property(OLD_PREFIX + p.getName(), ""));
+ n.getProperties().setProperty(OLD_PREFIX + p.getName(), "");
}
}
if (difference) {
- n.getProperties().add(new Property(PROPERTY_STATE, VALUE_CHANGED));
+ n.getProperties().setProperty(PROPERTY_STATE, VALUE_CHANGED);
} else {
- n.getProperties().add(new Property(PROPERTY_STATE, VALUE_SAME));
+ n.getProperties().setProperty(PROPERTY_STATE, VALUE_SAME);
}
}
private static void markAsDeleted(InputNode n) {
- n.getProperties().add(new Property(PROPERTY_STATE, VALUE_DELETED));
+ n.getProperties().setProperty(PROPERTY_STATE, VALUE_DELETED);
}
private static void markAsNew(InputNode n) {
- n.getProperties().add(new Property(PROPERTY_STATE, VALUE_NEW));
+ n.getProperties().setProperty(PROPERTY_STATE, VALUE_NEW);
}
}
diff --git a/src/share/tools/IdealGraphVisualizer/Filter/manifest.mf b/src/share/tools/IdealGraphVisualizer/Filter/manifest.mf
index 185ff3605..da8d443b4 100644
--- a/src/share/tools/IdealGraphVisualizer/Filter/manifest.mf
+++ b/src/share/tools/IdealGraphVisualizer/Filter/manifest.mf
@@ -1,6 +1,6 @@
-Manifest-Version: 1.0
-OpenIDE-Module: com.sun.hotspot.igv.filter
-OpenIDE-Module-Layer: com/sun/hotspot/igv/filter/layer.xml
-OpenIDE-Module-Localizing-Bundle: com/sun/hotspot/igv/filter/Bundle.properties
-OpenIDE-Module-Specification-Version: 1.0
-
+Manifest-Version: 1.0
+OpenIDE-Module: com.sun.hotspot.igv.filter
+OpenIDE-Module-Layer: com/sun/hotspot/igv/filter/layer.xml
+OpenIDE-Module-Localizing-Bundle: com/sun/hotspot/igv/filter/Bundle.properties
+OpenIDE-Module-Specification-Version: 1.0
+
diff --git a/src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/CustomFilter.java b/src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/CustomFilter.java
index 762d8d2a2..18a8841f6 100644
--- a/src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/CustomFilter.java
+++ b/src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/CustomFilter.java
@@ -25,7 +25,6 @@
package com.sun.hotspot.igv.filter;
import com.sun.hotspot.igv.graph.Diagram;
-import com.sun.hotspot.igv.data.Property;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
@@ -56,7 +55,7 @@ public class CustomFilter extends AbstractFilter {
public CustomFilter(String name, String code) {
this.name = name;
this.code = code;
- getProperties().add(new Property("name", name));
+ getProperties().setProperty("name", name);
}
public String getName() {
diff --git a/src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/SplitFilter.java b/src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/SplitFilter.java
index e4c2554bd..baf1ca8c7 100644
--- a/src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/SplitFilter.java
+++ b/src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/SplitFilter.java
@@ -56,8 +56,8 @@ public class SplitFilter extends AbstractFilter {
for (OutputSlot os : f.getOutputSlots()) {
for (Connection c : os.getConnections()) {
InputSlot is = c.getInputSlot();
- is.setName(f.getProperties().getProperty("dump_spec"));
- String s = f.getProperties().getProperty("short_name");
+ is.setName(f.getProperties().get("dump_spec"));
+ String s = f.getProperties().get("short_name");
if (s != null) {
is.setShortName(s);
}
diff --git a/src/share/tools/IdealGraphVisualizer/Graph/src/com/sun/hotspot/igv/graph/Diagram.java b/src/share/tools/IdealGraphVisualizer/Graph/src/com/sun/hotspot/igv/graph/Diagram.java
index 00d48f6e9..2584b44fd 100644
--- a/src/share/tools/IdealGraphVisualizer/Graph/src/com/sun/hotspot/igv/graph/Diagram.java
+++ b/src/share/tools/IdealGraphVisualizer/Graph/src/com/sun/hotspot/igv/graph/Diagram.java
@@ -35,7 +35,7 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Hashtable;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -126,7 +126,7 @@ public class Diagram {
d.updateBlocks();
Collection<InputNode> nodes = graph.getNodes();
- Hashtable<Integer, Figure> figureHash = new Hashtable<Integer, Figure>();
+ HashMap<Integer, Figure> figureHash = new HashMap<Integer, Figure>();
for (InputNode n : nodes) {
Figure f = d.createFigure();
f.getSource().addSourceNode(n);
diff --git a/src/share/tools/IdealGraphVisualizer/Graph/src/com/sun/hotspot/igv/graph/Figure.java b/src/share/tools/IdealGraphVisualizer/Graph/src/com/sun/hotspot/igv/graph/Figure.java
index cfb913ca3..d61bb286d 100644
--- a/src/share/tools/IdealGraphVisualizer/Graph/src/com/sun/hotspot/igv/graph/Figure.java
+++ b/src/share/tools/IdealGraphVisualizer/Graph/src/com/sun/hotspot/igv/graph/Figure.java
@@ -42,7 +42,7 @@ import java.util.Set;
*
* @author Thomas Wuerthinger
*/
-public class Figure extends Properties.Object implements Source.Provider, Vertex {
+public class Figure extends Properties.Entity implements Source.Provider, Vertex {
public static final int INSET = 6;
public static final int SLOT_WIDTH = 10;
diff --git a/src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/Graph.java b/src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/Graph.java
index 98dbe392c..ada9d6786 100644
--- a/src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/Graph.java
+++ b/src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/Graph.java
@@ -26,7 +26,7 @@ package com.sun.hotspot.igv.hierarchicallayout;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.Hashtable;
+import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
@@ -37,13 +37,13 @@ import java.util.Queue;
*/
public class Graph<N, E> {
- private Hashtable<Object, Node<N, E>> nodes;
- private Hashtable<Object, Edge<N, E>> edges;
+ private HashMap<Object, Node<N, E>> nodes;
+ private HashMap<Object, Edge<N, E>> edges;
private List<Node<N, E>> nodeList;
public Graph() {
- nodes = new Hashtable<Object, Node<N, E>>();
- edges = new Hashtable<Object, Edge<N, E>>();
+ nodes = new HashMap<Object, Node<N, E>>();
+ edges = new HashMap<Object, Edge<N, E>>();
nodeList = new ArrayList<Node<N, E>>();
}
diff --git a/src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/HierarchicalClusterLayoutManager.java b/src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/HierarchicalClusterLayoutManager.java
index 1dc1b3691..37b05d245 100644
--- a/src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/HierarchicalClusterLayoutManager.java
+++ b/src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/HierarchicalClusterLayoutManager.java
@@ -25,7 +25,7 @@ package com.sun.hotspot.igv.hierarchicallayout;
import java.awt.Point;
import java.awt.Rectangle;
-import java.util.Hashtable;
+import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.ArrayList;
@@ -69,19 +69,19 @@ public class HierarchicalClusterLayoutManager implements LayoutManager {
assert graph.verify();
- Hashtable<Cluster, List<Vertex>> lists = new Hashtable<Cluster, List<Vertex>>();
- Hashtable<Cluster, List<Link>> listsConnection = new Hashtable<Cluster, List<Link>>();
- Hashtable<Cluster, Hashtable<Port, ClusterInputSlotNode>> clusterInputSlotHash = new Hashtable<Cluster, Hashtable<Port, ClusterInputSlotNode>>();
- Hashtable<Cluster, Hashtable<Port, ClusterOutputSlotNode>> clusterOutputSlotHash = new Hashtable<Cluster, Hashtable<Port, ClusterOutputSlotNode>>();
+ HashMap<Cluster, List<Vertex>> lists = new HashMap<Cluster, List<Vertex>>();
+ HashMap<Cluster, List<Link>> listsConnection = new HashMap<Cluster, List<Link>>();
+ HashMap<Cluster, HashMap<Port, ClusterInputSlotNode>> clusterInputSlotHash = new HashMap<Cluster, HashMap<Port, ClusterInputSlotNode>>();
+ HashMap<Cluster, HashMap<Port, ClusterOutputSlotNode>> clusterOutputSlotHash = new HashMap<Cluster, HashMap<Port, ClusterOutputSlotNode>>();
- Hashtable<Cluster, ClusterNode> clusterNodes = new Hashtable<Cluster, ClusterNode>();
- Hashtable<Cluster, Set<ClusterInputSlotNode>> clusterInputSlotSet = new Hashtable<Cluster, Set<ClusterInputSlotNode>>();
- Hashtable<Cluster, Set<ClusterOutputSlotNode>> clusterOutputSlotSet = new Hashtable<Cluster, Set<ClusterOutputSlotNode>>();
+ HashMap<Cluster, ClusterNode> clusterNodes = new HashMap<Cluster, ClusterNode>();
+ HashMap<Cluster, Set<ClusterInputSlotNode>> clusterInputSlotSet = new HashMap<Cluster, Set<ClusterInputSlotNode>>();
+ HashMap<Cluster, Set<ClusterOutputSlotNode>> clusterOutputSlotSet = new HashMap<Cluster, Set<ClusterOutputSlotNode>>();
Set<Link> clusterEdges = new HashSet<Link>();
Set<Link> interClusterEdges = new HashSet<Link>();
- Hashtable<Link, ClusterOutgoingConnection> linkClusterOutgoingConnection = new Hashtable<Link, ClusterOutgoingConnection>();
- Hashtable<Link, InterClusterConnection> linkInterClusterConnection = new Hashtable<Link, InterClusterConnection>();
- Hashtable<Link, ClusterIngoingConnection> linkClusterIngoingConnection = new Hashtable<Link, ClusterIngoingConnection>();
+ HashMap<Link, ClusterOutgoingConnection> linkClusterOutgoingConnection = new HashMap<Link, ClusterOutgoingConnection>();
+ HashMap<Link, InterClusterConnection> linkInterClusterConnection = new HashMap<Link, InterClusterConnection>();
+ HashMap<Link, ClusterIngoingConnection> linkClusterIngoingConnection = new HashMap<Link, ClusterIngoingConnection>();
Set<ClusterNode> clusterNodeSet = new HashSet<ClusterNode>();
Set<Cluster> cluster = graph.getClusters();
@@ -89,8 +89,8 @@ public class HierarchicalClusterLayoutManager implements LayoutManager {
for (Cluster c : cluster) {
lists.put(c, new ArrayList<Vertex>());
listsConnection.put(c, new ArrayList<Link>());
- clusterInputSlotHash.put(c, new Hashtable<Port, ClusterInputSlotNode>());
- clusterOutputSlotHash.put(c, new Hashtable<Port, ClusterOutputSlotNode>());
+ clusterInputSlotHash.put(c, new HashMap<Port, ClusterInputSlotNode>());
+ clusterOutputSlotHash.put(c, new HashMap<Port, ClusterOutputSlotNode>());
clusterOutputSlotSet.put(c, new TreeSet<ClusterOutputSlotNode>());
clusterInputSlotSet.put(c, new TreeSet<ClusterInputSlotNode>());
ClusterNode cn = new ClusterNode(c, "" + z);
diff --git a/src/share/tools/IdealGraphVisualizer/Layout/src/com/sun/hotspot/igv/layout/LayoutGraph.java b/src/share/tools/IdealGraphVisualizer/Layout/src/com/sun/hotspot/igv/layout/LayoutGraph.java
index ac262c95e..50edc14a8 100644
--- a/src/share/tools/IdealGraphVisualizer/Layout/src/com/sun/hotspot/igv/layout/LayoutGraph.java
+++ b/src/share/tools/IdealGraphVisualizer/Layout/src/com/sun/hotspot/igv/layout/LayoutGraph.java
@@ -24,7 +24,7 @@
package com.sun.hotspot.igv.layout;
import java.util.HashSet;
-import java.util.Hashtable;
+import java.util.HashMap;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
@@ -37,9 +37,9 @@ public class LayoutGraph {
private Set<? extends Link> links;
private SortedSet<Vertex> vertices;
- private Hashtable<Vertex, Set<Port>> inputPorts;
- private Hashtable<Vertex, Set<Port>> outputPorts;
- private Hashtable<Port, Set<Link>> portLinks;
+ private HashMap<Vertex, Set<Port>> inputPorts;
+ private HashMap<Vertex, Set<Port>> outputPorts;
+ private HashMap<Port, Set<Link>> portLinks;
public LayoutGraph(Set<? extends Link> links) {
this(links, new HashSet<Vertex>());
@@ -50,9 +50,9 @@ public class LayoutGraph {
assert verify();
vertices = new TreeSet<Vertex>();
- portLinks = new Hashtable<Port, Set<Link>>();
- inputPorts = new Hashtable<Vertex, Set<Port>>();
- outputPorts = new Hashtable<Vertex, Set<Port>>();
+ portLinks = new HashMap<Port, Set<Link>>();
+ inputPorts = new HashMap<Vertex, Set<Port>>();
+ outputPorts = new HashMap<Vertex, Set<Port>>();
for (Link l : links) {
Port p = l.getFrom();
diff --git a/src/share/tools/IdealGraphVisualizer/README b/src/share/tools/IdealGraphVisualizer/README
index 80e163295..5c9a16601 100644
--- a/src/share/tools/IdealGraphVisualizer/README
+++ b/src/share/tools/IdealGraphVisualizer/README
@@ -5,21 +5,16 @@ of Linz in Austria and has been included as part of hotspot since that
was the primary target of the tool. The tool itself is fairly general
with only a few modules that contain C2 specific elements.
-The tool is built on top of the NetBeans 6.0 rich client
+The tool is built on top of the NetBeans 6.1 rich client
infrastructure and so requires NetBeans to build. It currently
requires Java 6 to run as it needs support for JavaScript for its
filtering mechanism and assumes it's built into the platform. It
-should build out of the box whit NetBeans 6 and Java 6 or later. It's
-possible to run it on 1.5 by including Rhino on the classpath though
-that currently isn't working correctly. Support for exporting graphs
-as SVG can be enabled by adding batik to the classpath which isn't
-included by default.
-
-It can be built on top of NetBeans 6.1 if you change the required
-modules to be platform8 instead of platform7. The tool could run on
-JDK 1.5 with some reworking of the how the JavaScript support is
-enabled but currently it requires some tweaking of the setup. This
-will be fixed in a later setup.
+should build out of the box with NetBeans 6.1 and Java 6 or later.
+It's possible to run it on 1.5 by including Rhino on the classpath
+though that currently isn't working correctly. Support for exporting
+graphs as SVG can be enabled by adding batik to the classpath which
+isn't included by default. It can be built on top of NetBeans 6.0 if
+you change the required modules to be platform7 instead of platform8.
The JVM support is controlled by the flag -XX:PrintIdealGraphLevel=#
where # is:
diff --git a/src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/PropertiesSheet.java b/src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/PropertiesSheet.java
index f058edda6..ab7da78f2 100644
--- a/src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/PropertiesSheet.java
+++ b/src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/PropertiesSheet.java
@@ -36,11 +36,11 @@ import org.openide.nodes.Sheet;
*/
public class PropertiesSheet {
- public static void initializeSheet(Properties properties, Sheet s) {
+ public static void initializeSheet(final Properties properties, Sheet s) {
Sheet.Set set1 = Sheet.createPropertiesSet();
set1.setDisplayName("Properties");
- for (final Property p : properties.getProperties()) {
+ for (final Property p : properties) {
Node.Property<String> prop = new Node.Property<String>(String.class) {
@Override
@@ -60,7 +60,7 @@ public class PropertiesSheet {
@Override
public void setValue(String arg0) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
- p.setValue(arg0);
+ properties.setProperty(p.getName(), arg0);
}
};
prop.setName(p.getName());
diff --git a/src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/RangeSliderModel.java b/src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/RangeSliderModel.java
index 71766ec3b..a179d1ee0 100644
--- a/src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/RangeSliderModel.java
+++ b/src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/RangeSliderModel.java
@@ -65,13 +65,19 @@ public class RangeSliderModel implements ChangedEventProvider<RangeSliderModel>
public RangeSliderModel(List<String> positions) {
assert positions.size() > 0;
- this.positions = positions;
this.changedEvent = new ChangedEvent<RangeSliderModel>(this);
this.colorChangedEvent = new ChangedEvent<RangeSliderModel>(this);
+ setPositions(positions);
+ }
+
+ protected void setPositions(List<String> positions) {
+ this.positions = positions;
colors = new ArrayList<Color>();
for (int i = 0; i < positions.size(); i++) {
colors.add(Color.black);
}
+ changedEvent.fire();
+ colorChangedEvent.fire();
}
public void setColors(List<Color> colors) {
diff --git a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramScene.java b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramScene.java
index 2ee3067ac..7ebfbbe86 100644
--- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramScene.java
+++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramScene.java
@@ -63,7 +63,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Hashtable;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -104,10 +104,10 @@ import org.openide.util.lookup.InstanceContent;
*/
public class DiagramScene extends Scene implements ChangedListener<DiagramViewModel> {
- private Hashtable<Figure, FigureWidget> figureWidgets;
- private Hashtable<Slot, SlotWidget> slotWidgets;
- private Hashtable<Connection, ConnectionWidget> connectionWidgets;
- private Hashtable<InputBlock, BlockWidget> blockWidgets;
+ private HashMap<Figure, FigureWidget> figureWidgets;
+ private HashMap<Slot, SlotWidget> slotWidgets;
+ private HashMap<Connection, ConnectionWidget> connectionWidgets;
+ private HashMap<InputBlock, BlockWidget> blockWidgets;
private Widget hoverWidget;
private WidgetAction hoverAction;
private List<FigureWidget> selectedWidgets;
@@ -414,7 +414,7 @@ public class DiagramScene extends Scene implements ChangedListener<DiagramViewMo
this.addChild(selectLayer);
this.getActions().addAction(ActionFactory.createRectangularSelectAction(rectangularSelectDecorator, selectLayer, rectangularSelectProvider));
- blockWidgets = new Hashtable<InputBlock, BlockWidget>();
+ blockWidgets = new HashMap<InputBlock, BlockWidget>();
boolean b = this.getUndoRedoEnabled();
this.setUndoRedoEnabled(false);
@@ -543,9 +543,9 @@ public class DiagramScene extends Scene implements ChangedListener<DiagramViewMo
blockLayer.removeChildren();
blockWidgets.clear();
- figureWidgets = new Hashtable<Figure, FigureWidget>();
- slotWidgets = new Hashtable<Slot, SlotWidget>();
- connectionWidgets = new Hashtable<Connection, ConnectionWidget>();
+ figureWidgets = new HashMap<Figure, FigureWidget>();
+ slotWidgets = new HashMap<Slot, SlotWidget>();
+ connectionWidgets = new HashMap<Connection, ConnectionWidget>();
WidgetAction selectAction = new ExtendedSelectAction(selectProvider);
Diagram d = getModel().getDiagramToView();
diff --git a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewModel.java b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewModel.java
index e374873b5..5d1da8cea 100644
--- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewModel.java
+++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewModel.java
@@ -55,6 +55,7 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
private FilterChain filterChain;
private FilterChain sequenceFilterChain;
private Diagram diagram;
+ private ChangedEvent<DiagramViewModel> groupChangedEvent;
private ChangedEvent<DiagramViewModel> diagramChangedEvent;
private ChangedEvent<DiagramViewModel> viewChangedEvent;
private ChangedEvent<DiagramViewModel> viewPropertiesChangedEvent;
@@ -67,6 +68,7 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
}
};
+ @Override
public DiagramViewModel copy() {
DiagramViewModel result = new DiagramViewModel(group, filterChain, sequenceFilterChain);
result.setData(this);
@@ -79,6 +81,7 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
boolean viewChanged = false;
boolean viewPropertiesChanged = false;
+ boolean groupChanged = (group == newModel.group);
this.group = newModel.group;
diagramChanged |= (filterChain != newModel.filterChain);
this.filterChain = newModel.filterChain;
@@ -97,6 +100,10 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
viewPropertiesChanged |= (showNodeHull != newModel.showNodeHull);
this.showNodeHull = newModel.showNodeHull;
+ if(groupChanged) {
+ groupChangedEvent.fire();
+ }
+
if (diagramChanged) {
diagramChangedEvent.fire();
}
@@ -143,11 +150,38 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
diagramChangedEvent = new ChangedEvent<DiagramViewModel>(this);
viewChangedEvent = new ChangedEvent<DiagramViewModel>(this);
viewPropertiesChangedEvent = new ChangedEvent<DiagramViewModel>(this);
+ groupChangedEvent = new ChangedEvent<DiagramViewModel>(this);
+ groupChangedEvent.addListener(groupChangedListener);
+ groupChangedEvent.fire();
filterChain.getChangedEvent().addListener(filterChainChangedListener);
sequenceFilterChain.getChangedEvent().addListener(filterChainChangedListener);
}
+ private final ChangedListener<DiagramViewModel> groupChangedListener = new ChangedListener<DiagramViewModel>() {
+
+ private Group oldGroup;
+
+ public void changed(DiagramViewModel source) {
+ if(oldGroup != null) {
+ oldGroup.getChangedEvent().removeListener(groupContentChangedListener);
+ }
+ group.getChangedEvent().addListener(groupContentChangedListener);
+ oldGroup = group;
+ }
+ };
+
+
+ private final ChangedListener<Group> groupContentChangedListener = new ChangedListener<Group>() {
+
+ public void changed(Group source) {
+ assert source == group;
+ setPositions(calculateStringList(source));
+ setSelectedNodes(selectedNodes);
+ }
+
+ };
+
public ChangedEvent<DiagramViewModel> getDiagramChangedEvent() {
return diagramChangedEvent;
}
@@ -268,7 +302,10 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
}
public InputGraph getSecondGraph() {
- return group.getGraphs().get(getSecondPosition());
+ List<InputGraph> graphs = group.getGraphs();
+ if (graphs.size() >= getSecondPosition())
+ return group.getGraphs().get(getSecondPosition());
+ return getFirstGraph();
}
public void selectGraph(InputGraph g) {
diff --git a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/FindPanel.java b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/FindPanel.java
index 7d45f1b35..961dc54d8 100644
--- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/FindPanel.java
+++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/FindPanel.java
@@ -67,7 +67,7 @@ class FindPanel extends JPanel implements KeyListener {
for (Figure f : figures) {
Properties prop = f.getProperties();
- for (Property p : prop.getProperties()) {
+ for (Property p : prop) {
if (!propertyNames.contains(p.getName())) {
propertyNames.add(p.getName());
}
diff --git a/src/share/tools/IdealGraphVisualizer/nbproject/platform.properties b/src/share/tools/IdealGraphVisualizer/nbproject/platform.properties
index 4768730f1..881365d0e 100644
--- a/src/share/tools/IdealGraphVisualizer/nbproject/platform.properties
+++ b/src/share/tools/IdealGraphVisualizer/nbproject/platform.properties
@@ -1,16 +1,16 @@
# Deprecated since 5.0u1; for compatibility with 5.0:
disabled.clusters=\
apisupport1,\
+ gsf1,\
harness,\
- ide8,\
- java1,\
- nb6.0,\
- profiler2
+ ide9,\
+ java2,\
+ nb6.1,\
+ profiler3
disabled.modules=\
org.netbeans.core.execution,\
org.netbeans.core.multiview,\
org.netbeans.core.output2,\
- org.netbeans.modules.applemenu,\
org.netbeans.modules.autoupdate.services,\
org.netbeans.modules.autoupdate.ui,\
org.netbeans.modules.core.kit,\
@@ -24,6 +24,6 @@ disabled.modules=\
org.openide.execution,\
org.openide.util.enumerations
enabled.clusters=\
- platform7
+ platform8
nbjdk.active=default
nbplatform.active=default
diff --git a/src/share/tools/IdealGraphVisualizer/nbproject/project.properties b/src/share/tools/IdealGraphVisualizer/nbproject/project.properties
index 1b524d231..b00f22d78 100644
--- a/src/share/tools/IdealGraphVisualizer/nbproject/project.properties
+++ b/src/share/tools/IdealGraphVisualizer/nbproject/project.properties
@@ -15,7 +15,6 @@ modules=\
${project.com.sun.hotspot.igv.difference}:\
${project.com.sun.hotspot.igv.settings}:\
${project.com.sun.hotspot.igv.util}:\
- ${project.com.sun.hotspot.igv.rhino}:\
${project.com.sun.hotspot.igv.svg}:\
${project.com.sun.hotspot.connection}:\
${project.com.sun.hotspot.igv.servercompilerscheduler}:\
@@ -31,10 +30,10 @@ project.com.sun.hotspot.igv.filterwindow=FilterWindow
project.com.sun.hotspot.igv.graph=Graph
project.com.sun.hotspot.igv.hierarchicallayout=HierarchicalLayout
project.com.sun.hotspot.igv.layout=Layout
-project.com.sun.hotspot.igv.rhino=RhinoScriptEngineProxy
project.com.sun.hotspot.igv.servercompilerscheduler=ServerCompiler
project.com.sun.hotspot.igv.settings=Settings
project.com.sun.hotspot.igv.svg=BatikSVGProxy
project.com.sun.hotspot.igv.view=View
project.com.sun.hotspot.igv.util=Util
-run.args = -server -J-Xms64m -J-Xmx512m -J-da
+run.args = -J-server -J-Xms64m -J-Xmx1g -J-da
+run.args.extra = -J-server -J-Xms64m -J-Xmx1g -J-da