提交 fa4624c4 编写于 作者: N never

6764622: IdealGraphVisualizer fixes

Reviewed-by: rasbold, jrose
上级 26028ad1
...@@ -28,6 +28,7 @@ import com.sun.hotspot.igv.data.InputGraph; ...@@ -28,6 +28,7 @@ import com.sun.hotspot.igv.data.InputGraph;
import com.sun.hotspot.igv.data.services.InputGraphProvider; import com.sun.hotspot.igv.data.services.InputGraphProvider;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.io.Serializable; import java.io.Serializable;
import javax.swing.SwingUtilities;
import org.openide.ErrorManager; import org.openide.ErrorManager;
import org.openide.explorer.ExplorerManager; import org.openide.explorer.ExplorerManager;
import org.openide.explorer.ExplorerUtils; import org.openide.explorer.ExplorerUtils;
...@@ -151,14 +152,18 @@ final class BytecodeViewTopComponent extends TopComponent implements ExplorerMan ...@@ -151,14 +152,18 @@ final class BytecodeViewTopComponent extends TopComponent implements ExplorerMan
} }
public void resultChanged(LookupEvent lookupEvent) { public void resultChanged(LookupEvent lookupEvent) {
InputGraphProvider p = Lookup.getDefault().lookup(InputGraphProvider.class); final InputGraphProvider p = Lookup.getDefault().lookup(InputGraphProvider.class);
if (p != null) { if (p != null) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
InputGraph graph = p.getGraph(); InputGraph graph = p.getGraph();
if (graph != null) { if (graph != null) {
Group g = graph.getGroup(); Group g = graph.getGroup();
rootNode.update(graph, g.getMethod()); rootNode.update(graph, g.getMethod());
} }
} }
});
}
} }
final static class ResolvableHelper implements Serializable { final static class ResolvableHelper implements Serializable {
......
...@@ -33,7 +33,7 @@ import java.awt.Point; ...@@ -33,7 +33,7 @@ import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.Hashtable; import java.util.HashMap;
import java.util.Set; import java.util.Set;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import org.netbeans.api.visual.action.ActionFactory; import org.netbeans.api.visual.action.ActionFactory;
...@@ -44,7 +44,6 @@ import org.netbeans.api.visual.action.SelectProvider; ...@@ -44,7 +44,6 @@ import org.netbeans.api.visual.action.SelectProvider;
import org.netbeans.api.visual.action.WidgetAction; import org.netbeans.api.visual.action.WidgetAction;
import org.netbeans.api.visual.anchor.AnchorFactory; import org.netbeans.api.visual.anchor.AnchorFactory;
import org.netbeans.api.visual.anchor.AnchorShape; 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.layout.LayoutFactory;
import org.netbeans.api.visual.router.RouterFactory; import org.netbeans.api.visual.router.RouterFactory;
import org.netbeans.api.visual.widget.LayerWidget; import org.netbeans.api.visual.widget.LayerWidget;
...@@ -61,8 +60,8 @@ import org.openide.util.Lookup; ...@@ -61,8 +60,8 @@ import org.openide.util.Lookup;
*/ */
public class ControlFlowScene extends GraphScene<InputBlock, InputBlockEdge> implements SelectProvider, MoveProvider, RectangularSelectDecorator, RectangularSelectProvider { public class ControlFlowScene extends GraphScene<InputBlock, InputBlockEdge> implements SelectProvider, MoveProvider, RectangularSelectDecorator, RectangularSelectProvider {
private Set<BlockWidget> selection; private HashSet<BlockWidget> selection;
private Hashtable<InputBlock, BlockWidget> blockMap; private HashMap<InputBlock, BlockWidget> blockMap;
private InputGraph oldGraph; private InputGraph oldGraph;
private LayerWidget edgeLayer; private LayerWidget edgeLayer;
private LayerWidget mainLayer; private LayerWidget mainLayer;
......
...@@ -28,6 +28,7 @@ import com.sun.hotspot.igv.data.services.InputGraphProvider; ...@@ -28,6 +28,7 @@ import com.sun.hotspot.igv.data.services.InputGraphProvider;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.io.Serializable; import java.io.Serializable;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import org.openide.ErrorManager; import org.openide.ErrorManager;
import org.openide.util.Lookup; import org.openide.util.Lookup;
import org.openide.util.LookupEvent; import org.openide.util.LookupEvent;
...@@ -143,13 +144,17 @@ final class ControlFlowTopComponent extends TopComponent implements LookupListen ...@@ -143,13 +144,17 @@ final class ControlFlowTopComponent extends TopComponent implements LookupListen
public void resultChanged(LookupEvent lookupEvent) { public void resultChanged(LookupEvent lookupEvent) {
InputGraphProvider p = Lookup.getDefault().lookup(InputGraphProvider.class); final InputGraphProvider p = Lookup.getDefault().lookup(InputGraphProvider.class);
if (p != null) { if (p != null) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
InputGraph g = p.getGraph(); InputGraph g = p.getGraph();
if (g != null) { if (g != null) {
scene.setGraph(g); scene.setGraph(g);
} }
} }
});
}
} }
@Override @Override
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
package com.sun.hotspot.igv.coordinator; package com.sun.hotspot.igv.coordinator;
import com.sun.hotspot.igv.coordinator.actions.RemoveCookie; 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.Group;
import com.sun.hotspot.igv.data.services.GroupOrganizer; import com.sun.hotspot.igv.data.services.GroupOrganizer;
import com.sun.hotspot.igv.data.InputGraph; import com.sun.hotspot.igv.data.InputGraph;
...@@ -50,17 +51,24 @@ public class FolderNode extends AbstractNode { ...@@ -50,17 +51,24 @@ public class FolderNode extends AbstractNode {
private List<String> subFolders; private List<String> subFolders;
private FolderChildren children; private FolderChildren children;
private static class FolderChildren extends Children.Keys { private static class FolderChildren extends Children.Keys implements ChangedListener<Group> {
private FolderNode parent; private FolderNode parent;
private List<Group> registeredGroups;
public void setParent(FolderNode parent) { public void setParent(FolderNode parent) {
this.parent = parent; this.parent = parent;
this.registeredGroups = new ArrayList<Group>();
} }
@Override @Override
protected Node[] createNodes(Object arg0) { 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; Pair<String, List<Group>> p = (Pair<String, List<Group>>) arg0;
if (p.getLeft().length() == 0) { if (p.getLeft().length() == 0) {
...@@ -69,6 +77,8 @@ public class FolderNode extends AbstractNode { ...@@ -69,6 +77,8 @@ public class FolderNode extends AbstractNode {
for (InputGraph graph : g.getGraphs()) { for (InputGraph graph : g.getGraphs()) {
curNodes.add(new GraphNode(graph)); curNodes.add(new GraphNode(graph));
} }
g.getChangedEvent().addListener(this);
registeredGroups.add(g);
} }
Node[] result = new Node[curNodes.size()]; Node[] result = new Node[curNodes.size()];
...@@ -85,7 +95,13 @@ public class FolderNode extends AbstractNode { ...@@ -85,7 +95,13 @@ public class FolderNode extends AbstractNode {
@Override @Override
public void addNotify() { public void addNotify() {
this.setKeys(parent.structure); 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);
}
} }
} }
......
...@@ -31,7 +31,7 @@ import java.util.List; ...@@ -31,7 +31,7 @@ import java.util.List;
* *
* @author Thomas Wuerthinger * @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 List<Group> groups;
private ChangedEvent<GraphDocument> changedEvent; private ChangedEvent<GraphDocument> changedEvent;
......
...@@ -37,7 +37,7 @@ import java.util.Set; ...@@ -37,7 +37,7 @@ import java.util.Set;
* *
* @author Thomas Wuerthinger * @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 List<InputGraph> graphs;
private transient ChangedEvent<Group> changedEvent; private transient ChangedEvent<Group> changedEvent;
......
...@@ -23,26 +23,25 @@ ...@@ -23,26 +23,25 @@
*/ */
package com.sun.hotspot.igv.data; package com.sun.hotspot.igv.data;
import com.sun.hotspot.igv.data.Properties; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Hashtable; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
/** /**
* *
* @author Thomas Wuerthinger * @author Thomas Wuerthinger
*/ */
public class InputGraph extends Properties.Object { public class InputGraph extends Properties.Entity {
private Map<Integer, InputNode> nodes; private HashMap<Integer, InputNode> nodes;
private Set<InputEdge> edges; private ArrayList<InputEdge> edges;
private Group parent; private Group parent;
private Map<String, InputBlock> blocks; private HashMap<String, InputBlock> blocks;
private Map<Integer, InputBlock> nodeToBlock; private HashMap<Integer, InputBlock> nodeToBlock;
private boolean isDifferenceGraph; private boolean isDifferenceGraph;
public InputGraph(Group parent) { public InputGraph(Group parent) {
...@@ -61,10 +60,10 @@ public class InputGraph extends Properties.Object { ...@@ -61,10 +60,10 @@ public class InputGraph extends Properties.Object {
public InputGraph(Group parent, InputGraph last, String name) { public InputGraph(Group parent, InputGraph last, String name) {
this.parent = parent; this.parent = parent;
setName(name); setName(name);
nodes = new Hashtable<Integer, InputNode>(); nodes = new HashMap<Integer, InputNode>();
edges = new HashSet<InputEdge>(); edges = new ArrayList<InputEdge>();
blocks = new Hashtable<String, InputBlock>(); blocks = new HashMap<String, InputBlock>();
nodeToBlock = new Hashtable<Integer, InputBlock>(); nodeToBlock = new HashMap<Integer, InputBlock>();
if (last != null) { if (last != null) {
for (InputNode n : last.getNodes()) { for (InputNode n : last.getNodes()) {
...@@ -182,8 +181,8 @@ public class InputGraph extends Properties.Object { ...@@ -182,8 +181,8 @@ public class InputGraph extends Properties.Object {
return nodes.remove(index); return nodes.remove(index);
} }
public Set<InputEdge> getEdges() { public Collection<InputEdge> getEdges() {
return Collections.unmodifiableSet(edges); return Collections.unmodifiableList(edges);
} }
public void removeEdge(InputEdge c) { public void removeEdge(InputEdge c) {
......
...@@ -32,7 +32,7 @@ import java.util.List; ...@@ -32,7 +32,7 @@ import java.util.List;
* *
* @author Thomas Wuerthinger * @author Thomas Wuerthinger
*/ */
public class InputMethod extends Properties.Object { public class InputMethod extends Properties.Entity {
private String name; private String name;
private int bci; private int bci;
......
...@@ -27,7 +27,7 @@ package com.sun.hotspot.igv.data; ...@@ -27,7 +27,7 @@ package com.sun.hotspot.igv.data;
* *
* @author Thomas Wuerthinger * @author Thomas Wuerthinger
*/ */
public class InputNode extends Properties.Object { public class InputNode extends Properties.Entity {
private int id; private int id;
......
...@@ -26,24 +26,22 @@ package com.sun.hotspot.igv.data; ...@@ -26,24 +26,22 @@ package com.sun.hotspot.igv.data;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Iterator;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
/** /**
* *
* @author Thomas Wuerthinger * @author Thomas Wuerthinger
*/ */
public class Properties implements Serializable { public class Properties implements Serializable, Iterable<Property> {
public static final long serialVersionUID = 1L; public static final long serialVersionUID = 1L;
private Map<String, Property> map; private String[] map = new String[4];
public Properties() { public Properties() {
map = new HashMap<String, Property>(5);
} }
@Override @Override
...@@ -54,10 +52,7 @@ public class Properties implements Serializable { ...@@ -54,10 +52,7 @@ public class Properties implements Serializable {
Properties p = (Properties) o; Properties p = (Properties) o;
if (getProperties().size() != p.getProperties().size()) { for (Property prop : this) {
return false;
}
for (Property prop : getProperties()) {
String value = p.get(prop.getName()); String value = p.get(prop.getName());
if (value == null || !value.equals(prop.getValue())) { if (value == null || !value.equals(prop.getValue())) {
return false; return false;
...@@ -75,32 +70,33 @@ public class Properties implements Serializable { ...@@ -75,32 +70,33 @@ public class Properties implements Serializable {
public Properties(String name, String value) { public Properties(String name, String value) {
this(); this();
this.add(new Property(name, value)); this.setProperty(name, value);
} }
public Properties(String name, String value, String name1, String value1) { public Properties(String name, String value, String name1, String value1) {
this(name, value); 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) { public Properties(String name, String value, String name1, String value1, String name2, String value2) {
this(name, value, name1, value1); this(name, value, name1, value1);
this.add(new Property(name2, value2)); this.setProperty(name2, value2);
} }
public Properties(Properties p) { 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; private Properties properties;
public Object() { public Entity() {
properties = new Properties(); properties = new Properties();
} }
public Object(Properties.Object object) { public Entity(Properties.Entity object) {
properties = new Properties(object.getProperties()); properties = new Properties(object.getProperties());
} }
...@@ -109,6 +105,14 @@ public class Properties implements Serializable { ...@@ -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 { public interface PropertyMatcher {
String getName(); String getName();
...@@ -173,13 +177,15 @@ public class Properties implements Serializable { ...@@ -173,13 +177,15 @@ public class Properties implements Serializable {
} }
public Property selectSingle(PropertyMatcher matcher) { public Property selectSingle(PropertyMatcher matcher) {
String value = null;
Property p = this.map.get(matcher.getName()); for (int i = 0; i < map.length; i += 2) {
if (p == null) { if (map[i] != null && matcher.getName().equals(map[i])) {
return null; value = map[i + 1];
break;
}
} }
if (matcher.match(p.getValue())) { if (value != null && matcher.match(value)) {
return p; return new Property(matcher.getName(), value);
} else { } else {
return null; return null;
} }
...@@ -194,8 +200,11 @@ public class Properties implements Serializable { ...@@ -194,8 +200,11 @@ public class Properties implements Serializable {
public String toString() { public String toString() {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("["); sb.append("[");
for (Property p : map.values()) { for (int i = 0; i < map.length; i += 2) {
sb.append(p.toString()); if (map[i + 1] != null) {
String p = map[i + 1];
sb.append(map[i] + " = " + map[i + 1] + "; ");
}
} }
return sb.append("]").toString(); return sb.append("]").toString();
} }
...@@ -241,41 +250,51 @@ public class Properties implements Serializable { ...@@ -241,41 +250,51 @@ public class Properties implements Serializable {
} }
public String get(String key) { public String get(String key) {
Property p = map.get(key); for (int i = 0; i < map.length; i += 2) {
if (p == null) { if (map[i] != null && map[i].equals(key)) {
return null; return map[i + 1];
} else { }
return p.getValue();
} }
return null;
} }
public String getProperty(String string) { public void setProperty(String name, String value) {
return get(string); for (int i = 0; i < map.length; i += 2) {
} if (map[i] != null && map[i].equals(name)) {
String p = map[i + 1];
public Property setProperty(String name, String value) { if (value == null) {
// remove this property
map[i] = null;
map[i + 1] = null;
} else {
map[i + 1] = value;
}
return;
}
}
if (value == null) { if (value == null) {
// remove this property return;
return map.remove(name); }
} else { for (int i = 0; i < map.length; i += 2) {
Property p = map.get(name); if (map[i] == null) {
if (p == null) { map[i] = name;
p = new Property(name, value); map[i + 1] = value;
map.put(name, p); return;
} else {
p.setValue(value);
} }
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() { public Iterator<Property> getProperties() {
return Collections.unmodifiableCollection(map.values()); return iterator();
} }
public void add(Properties properties) { public void add(Properties properties) {
for (Property p : properties.getProperties()) { for (Property p : properties) {
add(p); add(p);
} }
} }
...@@ -283,6 +302,35 @@ public class Properties implements Serializable { ...@@ -283,6 +302,35 @@ public class Properties implements Serializable {
public void add(Property property) { public void add(Property property) {
assert property.getName() != null; assert property.getName() != null;
assert property.getValue() != 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();
} }
} }
...@@ -32,18 +32,19 @@ import java.io.Serializable; ...@@ -32,18 +32,19 @@ import java.io.Serializable;
public class Property implements Serializable { public class Property implements Serializable {
public static final long serialVersionUID = 1L; public static final long serialVersionUID = 1L;
private String name; private String name;
private String value; private String value;
public Property() { private Property() {
this(null, null); this(null, null);
} }
public Property(Property p) { private Property(Property p) {
this(p.getName(), p.getValue()); this(p.getName(), p.getValue());
} }
public Property(String name) { private Property(String name) {
this(name, null); this(name, null);
} }
...@@ -60,16 +61,19 @@ public class Property implements Serializable { ...@@ -60,16 +61,19 @@ public class Property implements Serializable {
return value; return value;
} }
public void setName(String s) { @Override
this.name = s; public String toString() {
return name + " = " + value + "; ";
} }
public void setValue(String s) { @Override
this.value = s; 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 @Override
public String toString() { public int hashCode() {
return name + " = " + value + "; "; return name.hashCode() + value == null ? 0 : value.hashCode();
} }
} }
...@@ -38,6 +38,7 @@ import com.sun.hotspot.igv.data.serialization.XMLParser.HandoverElementHandler; ...@@ -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.ParseMonitor;
import com.sun.hotspot.igv.data.serialization.XMLParser.TopElementHandler; import com.sun.hotspot.igv.data.serialization.XMLParser.TopElementHandler;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap;
import org.xml.sax.InputSource; import org.xml.sax.InputSource;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import org.xml.sax.XMLReader; import org.xml.sax.XMLReader;
...@@ -88,6 +89,18 @@ public class Parser { ...@@ -88,6 +89,18 @@ public class Parser {
private TopElementHandler xmlDocument = new TopElementHandler(); private TopElementHandler xmlDocument = new TopElementHandler();
private boolean difference; private boolean difference;
private GroupCallback groupCallback; 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> // <graphDocument>
private ElementHandler<GraphDocument, Object> topHandler = new ElementHandler<GraphDocument, Object>(TOP_ELEMENT) { private ElementHandler<GraphDocument, Object> topHandler = new ElementHandler<GraphDocument, Object>(TOP_ELEMENT) {
...@@ -187,13 +200,13 @@ public class Parser { ...@@ -187,13 +200,13 @@ public class Parser {
previous = null; previous = null;
} }
InputGraph curGraph = new InputGraph(getParentObject(), previous, name); InputGraph curGraph = new InputGraph(getParentObject(), previous, name);
getParentObject().addGraph(curGraph);
this.graph = curGraph; this.graph = curGraph;
return curGraph; return curGraph;
} }
@Override @Override
protected void end(String text) throws SAXException { protected void end(String text) throws SAXException {
getParentObject().addGraph(graph);
graph.resolveBlockLinks(); graph.resolveBlockLinks();
} }
}; };
...@@ -207,7 +220,7 @@ public class Parser { ...@@ -207,7 +220,7 @@ public class Parser {
@Override @Override
protected InputBlock start() throws SAXException { protected InputBlock start() throws SAXException {
InputGraph graph = getParentObject(); InputGraph graph = getParentObject();
String name = readRequiredAttribute(BLOCK_NAME_PROPERTY); String name = readRequiredAttribute(BLOCK_NAME_PROPERTY).intern();
InputBlock b = new InputBlock(getParentObject(), name); InputBlock b = new InputBlock(getParentObject(), name);
graph.addBlock(b); graph.addBlock(b);
return b; return b;
...@@ -224,7 +237,7 @@ public class Parser { ...@@ -224,7 +237,7 @@ public class Parser {
int id = 0; int id = 0;
try { try {
id = Integer.parseInt(s); id = lookupID(s);
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
throw new SAXException(e); throw new SAXException(e);
} }
...@@ -252,7 +265,7 @@ public class Parser { ...@@ -252,7 +265,7 @@ public class Parser {
String s = readRequiredAttribute(NODE_ID_PROPERTY); String s = readRequiredAttribute(NODE_ID_PROPERTY);
int id = 0; int id = 0;
try { try {
id = Integer.parseInt(s); id = lookupID(s);
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
throw new SAXException(e); throw new SAXException(e);
} }
...@@ -269,7 +282,7 @@ public class Parser { ...@@ -269,7 +282,7 @@ public class Parser {
String s = readRequiredAttribute(NODE_ID_PROPERTY); String s = readRequiredAttribute(NODE_ID_PROPERTY);
int id = 0; int id = 0;
try { try {
id = Integer.parseInt(s); id = lookupID(s);
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
throw new SAXException(e); throw new SAXException(e);
} }
...@@ -280,7 +293,7 @@ public class Parser { ...@@ -280,7 +293,7 @@ public class Parser {
private HandoverElementHandler<InputGraph> edgesHandler = new HandoverElementHandler<InputGraph>(EDGES_ELEMENT); private HandoverElementHandler<InputGraph> edgesHandler = new HandoverElementHandler<InputGraph>(EDGES_ELEMENT);
// Local class for edge elements // Local class for edge elements
private static class EdgeElementHandler extends ElementHandler<InputEdge, InputGraph> { private class EdgeElementHandler extends ElementHandler<InputEdge, InputGraph> {
public EdgeElementHandler(String name) { public EdgeElementHandler(String name) {
super(name); super(name);
...@@ -298,8 +311,8 @@ public class Parser { ...@@ -298,8 +311,8 @@ public class Parser {
toIndex = Integer.parseInt(toIndexString); toIndex = Integer.parseInt(toIndexString);
} }
from = Integer.parseInt(readRequiredAttribute(FROM_PROPERTY)); from = lookupID(readRequiredAttribute(FROM_PROPERTY));
to = Integer.parseInt(readRequiredAttribute(TO_PROPERTY)); to = lookupID(readRequiredAttribute(TO_PROPERTY));
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
throw new SAXException(e); throw new SAXException(e);
} }
...@@ -344,18 +357,16 @@ public class Parser { ...@@ -344,18 +357,16 @@ public class Parser {
} }
}; };
// <property> // <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 @Override
public Property start() throws SAXException { public String start() throws SAXException {
String value = ""; return readRequiredAttribute(PROPERTY_NAME_PROPERTY).intern();
String name = readRequiredAttribute(PROPERTY_NAME_PROPERTY).intern();
return getParentObject().getProperties().setProperty(name, value);
} }
@Override @Override
public void end(String text) { public void end(String text) {
getObject().setValue(text.trim().intern()); getParentObject().getProperties().setProperty(getObject(), text.trim().intern());
} }
}; };
......
...@@ -67,7 +67,7 @@ public class Printer { ...@@ -67,7 +67,7 @@ public class Printer {
private void export(XMLWriter writer, Group g) throws IOException { private void export(XMLWriter writer, Group g) throws IOException {
Properties attributes = new Properties(); 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.startTag(Parser.GROUP_ELEMENT, attributes);
writer.writeProperties(g.getProperties()); writer.writeProperties(g.getProperties());
......
...@@ -25,7 +25,7 @@ package com.sun.hotspot.igv.data.serialization; ...@@ -25,7 +25,7 @@ package com.sun.hotspot.igv.data.serialization;
import com.sun.hotspot.igv.data.Property; import com.sun.hotspot.igv.data.Property;
import com.sun.hotspot.igv.data.Properties; import com.sun.hotspot.igv.data.Properties;
import java.util.Hashtable; import java.util.HashMap;
import java.util.Stack; import java.util.Stack;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler; import org.xml.sax.ContentHandler;
...@@ -89,7 +89,7 @@ public class XMLParser implements ContentHandler { ...@@ -89,7 +89,7 @@ public class XMLParser implements ContentHandler {
private Attributes attr; private Attributes attr;
private StringBuilder currentText; private StringBuilder currentText;
private ParseMonitor monitor; private ParseMonitor monitor;
private Hashtable<String, ElementHandler<?, ? super T>> hashtable; private HashMap<String, ElementHandler<?, ? super T>> hashtable;
private boolean needsText; private boolean needsText;
private ElementHandler<P, ?> parentElement; private ElementHandler<P, ?> parentElement;
...@@ -110,7 +110,7 @@ public class XMLParser implements ContentHandler { ...@@ -110,7 +110,7 @@ public class XMLParser implements ContentHandler {
} }
public ElementHandler(String name, boolean needsText) { 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.name = name;
this.needsText = needsText; this.needsText = needsText;
} }
...@@ -153,7 +153,7 @@ public class XMLParser implements ContentHandler { ...@@ -153,7 +153,7 @@ public class XMLParser implements ContentHandler {
for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) {
String val = attr.getValue(i).intern(); String val = attr.getValue(i).intern();
String localName = attr.getLocalName(i).intern(); String localName = attr.getLocalName(i).intern();
p.add(new Property(val, localName)); p.setProperty(val, localName);
} }
} }
......
...@@ -89,7 +89,7 @@ public class XMLWriter extends Writer { ...@@ -89,7 +89,7 @@ public class XMLWriter extends Writer {
inner.write("<" + name); inner.write("<" + name);
elementStack.push(name); elementStack.push(name);
for (Property p : attributes.getProperties()) { for (Property p : attributes) {
inner.write(" " + p.getName() + "=\""); inner.write(" " + p.getName() + "=\"");
write(p.getValue().toCharArray()); write(p.getValue().toCharArray());
inner.write("\""); inner.write("\"");
...@@ -101,7 +101,7 @@ public class XMLWriter extends Writer { ...@@ -101,7 +101,7 @@ public class XMLWriter extends Writer {
public void simpleTag(String name, Properties attributes) throws IOException { public void simpleTag(String name, Properties attributes) throws IOException {
inner.write("<" + name); inner.write("<" + name);
for (Property p : attributes.getProperties()) { for (Property p : attributes) {
inner.write(" " + p.getName() + "=\""); inner.write(" " + p.getName() + "=\"");
write(p.getValue().toCharArray()); write(p.getValue().toCharArray());
inner.write("\""); inner.write("\"");
...@@ -111,13 +111,13 @@ public class XMLWriter extends Writer { ...@@ -111,13 +111,13 @@ public class XMLWriter extends Writer {
} }
public void writeProperties(Properties props) throws IOException { public void writeProperties(Properties props) throws IOException {
if (props.getProperties().size() == 0) { if (props.getProperties().hasNext() == false) {
return; return;
} }
startTag(Parser.PROPERTIES_ELEMENT); 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())); startTag(Parser.PROPERTY_ELEMENT, new Properties(Parser.PROPERTY_NAME_PROPERTY, p.getName()));
this.write(p.getValue().toCharArray()); this.write(p.getValue().toCharArray());
endTag(); endTag();
......
...@@ -29,6 +29,7 @@ import com.sun.hotspot.igv.data.InputEdge; ...@@ -29,6 +29,7 @@ import com.sun.hotspot.igv.data.InputEdge;
import com.sun.hotspot.igv.data.InputGraph; import com.sun.hotspot.igv.data.InputGraph;
import com.sun.hotspot.igv.data.InputNode; import com.sun.hotspot.igv.data.InputNode;
import com.sun.hotspot.igv.data.Property; import com.sun.hotspot.igv.data.Property;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
...@@ -124,8 +125,8 @@ public class Difference { ...@@ -124,8 +125,8 @@ public class Difference {
inputNodeMap.put(n, n2); inputNodeMap.put(n, n2);
} }
Set<InputEdge> edgesA = a.getEdges(); Collection<InputEdge> edgesA = a.getEdges();
Set<InputEdge> edgesB = b.getEdges(); Collection<InputEdge> edgesB = b.getEdges();
Set<InputEdge> newEdges = new HashSet<InputEdge>(); Set<InputEdge> newEdges = new HashSet<InputEdge>();
...@@ -182,7 +183,7 @@ public class Difference { ...@@ -182,7 +183,7 @@ public class Difference {
public double getValue() { public double getValue() {
double result = 0.0; double result = 0.0;
for (Property p : n1.getProperties().getProperties()) { for (Property p : n1.getProperties()) {
double faktor = 1.0; double faktor = 1.0;
for (String forbidden : IGNORE_PROPERTIES) { for (String forbidden : IGNORE_PROPERTIES) {
if (p.getName().equals(forbidden)) { if (p.getName().equals(forbidden)) {
...@@ -287,34 +288,34 @@ public class Difference { ...@@ -287,34 +288,34 @@ public class Difference {
private static void markAsChanged(InputNode n, InputNode firstNode, InputNode otherNode) { private static void markAsChanged(InputNode n, InputNode firstNode, InputNode otherNode) {
boolean difference = false; boolean difference = false;
for (Property p : otherNode.getProperties().getProperties()) { for (Property p : otherNode.getProperties()) {
String s = firstNode.getProperties().getProperty(p.getName()); String s = firstNode.getProperties().get(p.getName());
if (!p.getValue().equals(s)) { if (!p.getValue().equals(s)) {
difference = true; 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()) { for (Property p : firstNode.getProperties()) {
String s = otherNode.getProperties().getProperty(p.getName()); String s = otherNode.getProperties().get(p.getName());
if (s == null && p.getValue().length() > 0) { if (s == null && p.getValue().length() > 0) {
difference = true; difference = true;
n.getProperties().add(new Property(OLD_PREFIX + p.getName(), "")); n.getProperties().setProperty(OLD_PREFIX + p.getName(), "");
} }
} }
if (difference) { if (difference) {
n.getProperties().add(new Property(PROPERTY_STATE, VALUE_CHANGED)); n.getProperties().setProperty(PROPERTY_STATE, VALUE_CHANGED);
} else { } else {
n.getProperties().add(new Property(PROPERTY_STATE, VALUE_SAME)); n.getProperties().setProperty(PROPERTY_STATE, VALUE_SAME);
} }
} }
private static void markAsDeleted(InputNode n) { 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) { private static void markAsNew(InputNode n) {
n.getProperties().add(new Property(PROPERTY_STATE, VALUE_NEW)); n.getProperties().setProperty(PROPERTY_STATE, VALUE_NEW);
} }
} }
Manifest-Version: 1.0 Manifest-Version: 1.0
OpenIDE-Module: com.sun.hotspot.igv.filter OpenIDE-Module: com.sun.hotspot.igv.filter
OpenIDE-Module-Layer: com/sun/hotspot/igv/filter/layer.xml OpenIDE-Module-Layer: com/sun/hotspot/igv/filter/layer.xml
OpenIDE-Module-Localizing-Bundle: com/sun/hotspot/igv/filter/Bundle.properties OpenIDE-Module-Localizing-Bundle: com/sun/hotspot/igv/filter/Bundle.properties
OpenIDE-Module-Specification-Version: 1.0 OpenIDE-Module-Specification-Version: 1.0
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
package com.sun.hotspot.igv.filter; package com.sun.hotspot.igv.filter;
import com.sun.hotspot.igv.graph.Diagram; import com.sun.hotspot.igv.graph.Diagram;
import com.sun.hotspot.igv.data.Property;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
...@@ -56,7 +55,7 @@ public class CustomFilter extends AbstractFilter { ...@@ -56,7 +55,7 @@ public class CustomFilter extends AbstractFilter {
public CustomFilter(String name, String code) { public CustomFilter(String name, String code) {
this.name = name; this.name = name;
this.code = code; this.code = code;
getProperties().add(new Property("name", name)); getProperties().setProperty("name", name);
} }
public String getName() { public String getName() {
......
...@@ -56,8 +56,8 @@ public class SplitFilter extends AbstractFilter { ...@@ -56,8 +56,8 @@ public class SplitFilter extends AbstractFilter {
for (OutputSlot os : f.getOutputSlots()) { for (OutputSlot os : f.getOutputSlots()) {
for (Connection c : os.getConnections()) { for (Connection c : os.getConnections()) {
InputSlot is = c.getInputSlot(); InputSlot is = c.getInputSlot();
is.setName(f.getProperties().getProperty("dump_spec")); is.setName(f.getProperties().get("dump_spec"));
String s = f.getProperties().getProperty("short_name"); String s = f.getProperties().get("short_name");
if (s != null) { if (s != null) {
is.setShortName(s); is.setShortName(s);
} }
......
...@@ -35,7 +35,7 @@ import java.util.Collections; ...@@ -35,7 +35,7 @@ import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Hashtable; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
...@@ -126,7 +126,7 @@ public class Diagram { ...@@ -126,7 +126,7 @@ public class Diagram {
d.updateBlocks(); d.updateBlocks();
Collection<InputNode> nodes = graph.getNodes(); 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) { for (InputNode n : nodes) {
Figure f = d.createFigure(); Figure f = d.createFigure();
f.getSource().addSourceNode(n); f.getSource().addSourceNode(n);
......
...@@ -42,7 +42,7 @@ import java.util.Set; ...@@ -42,7 +42,7 @@ import java.util.Set;
* *
* @author Thomas Wuerthinger * @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 INSET = 6;
public static final int SLOT_WIDTH = 10; public static final int SLOT_WIDTH = 10;
......
...@@ -26,7 +26,7 @@ package com.sun.hotspot.igv.hierarchicallayout; ...@@ -26,7 +26,7 @@ package com.sun.hotspot.igv.hierarchicallayout;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Hashtable; import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Queue; import java.util.Queue;
...@@ -37,13 +37,13 @@ import java.util.Queue; ...@@ -37,13 +37,13 @@ import java.util.Queue;
*/ */
public class Graph<N, E> { public class Graph<N, E> {
private Hashtable<Object, Node<N, E>> nodes; private HashMap<Object, Node<N, E>> nodes;
private Hashtable<Object, Edge<N, E>> edges; private HashMap<Object, Edge<N, E>> edges;
private List<Node<N, E>> nodeList; private List<Node<N, E>> nodeList;
public Graph() { public Graph() {
nodes = new Hashtable<Object, Node<N, E>>(); nodes = new HashMap<Object, Node<N, E>>();
edges = new Hashtable<Object, Edge<N, E>>(); edges = new HashMap<Object, Edge<N, E>>();
nodeList = new ArrayList<Node<N, E>>(); nodeList = new ArrayList<Node<N, E>>();
} }
......
...@@ -25,7 +25,7 @@ package com.sun.hotspot.igv.hierarchicallayout; ...@@ -25,7 +25,7 @@ package com.sun.hotspot.igv.hierarchicallayout;
import java.awt.Point; import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.util.Hashtable; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -69,19 +69,19 @@ public class HierarchicalClusterLayoutManager implements LayoutManager { ...@@ -69,19 +69,19 @@ public class HierarchicalClusterLayoutManager implements LayoutManager {
assert graph.verify(); assert graph.verify();
Hashtable<Cluster, List<Vertex>> lists = new Hashtable<Cluster, List<Vertex>>(); HashMap<Cluster, List<Vertex>> lists = new HashMap<Cluster, List<Vertex>>();
Hashtable<Cluster, List<Link>> listsConnection = new Hashtable<Cluster, List<Link>>(); HashMap<Cluster, List<Link>> listsConnection = new HashMap<Cluster, List<Link>>();
Hashtable<Cluster, Hashtable<Port, ClusterInputSlotNode>> clusterInputSlotHash = new Hashtable<Cluster, Hashtable<Port, ClusterInputSlotNode>>(); HashMap<Cluster, HashMap<Port, ClusterInputSlotNode>> clusterInputSlotHash = new HashMap<Cluster, HashMap<Port, ClusterInputSlotNode>>();
Hashtable<Cluster, Hashtable<Port, ClusterOutputSlotNode>> clusterOutputSlotHash = new Hashtable<Cluster, Hashtable<Port, ClusterOutputSlotNode>>(); HashMap<Cluster, HashMap<Port, ClusterOutputSlotNode>> clusterOutputSlotHash = new HashMap<Cluster, HashMap<Port, ClusterOutputSlotNode>>();
Hashtable<Cluster, ClusterNode> clusterNodes = new Hashtable<Cluster, ClusterNode>(); HashMap<Cluster, ClusterNode> clusterNodes = new HashMap<Cluster, ClusterNode>();
Hashtable<Cluster, Set<ClusterInputSlotNode>> clusterInputSlotSet = new Hashtable<Cluster, Set<ClusterInputSlotNode>>(); HashMap<Cluster, Set<ClusterInputSlotNode>> clusterInputSlotSet = new HashMap<Cluster, Set<ClusterInputSlotNode>>();
Hashtable<Cluster, Set<ClusterOutputSlotNode>> clusterOutputSlotSet = new Hashtable<Cluster, Set<ClusterOutputSlotNode>>(); HashMap<Cluster, Set<ClusterOutputSlotNode>> clusterOutputSlotSet = new HashMap<Cluster, Set<ClusterOutputSlotNode>>();
Set<Link> clusterEdges = new HashSet<Link>(); Set<Link> clusterEdges = new HashSet<Link>();
Set<Link> interClusterEdges = new HashSet<Link>(); Set<Link> interClusterEdges = new HashSet<Link>();
Hashtable<Link, ClusterOutgoingConnection> linkClusterOutgoingConnection = new Hashtable<Link, ClusterOutgoingConnection>(); HashMap<Link, ClusterOutgoingConnection> linkClusterOutgoingConnection = new HashMap<Link, ClusterOutgoingConnection>();
Hashtable<Link, InterClusterConnection> linkInterClusterConnection = new Hashtable<Link, InterClusterConnection>(); HashMap<Link, InterClusterConnection> linkInterClusterConnection = new HashMap<Link, InterClusterConnection>();
Hashtable<Link, ClusterIngoingConnection> linkClusterIngoingConnection = new Hashtable<Link, ClusterIngoingConnection>(); HashMap<Link, ClusterIngoingConnection> linkClusterIngoingConnection = new HashMap<Link, ClusterIngoingConnection>();
Set<ClusterNode> clusterNodeSet = new HashSet<ClusterNode>(); Set<ClusterNode> clusterNodeSet = new HashSet<ClusterNode>();
Set<Cluster> cluster = graph.getClusters(); Set<Cluster> cluster = graph.getClusters();
...@@ -89,8 +89,8 @@ public class HierarchicalClusterLayoutManager implements LayoutManager { ...@@ -89,8 +89,8 @@ public class HierarchicalClusterLayoutManager implements LayoutManager {
for (Cluster c : cluster) { for (Cluster c : cluster) {
lists.put(c, new ArrayList<Vertex>()); lists.put(c, new ArrayList<Vertex>());
listsConnection.put(c, new ArrayList<Link>()); listsConnection.put(c, new ArrayList<Link>());
clusterInputSlotHash.put(c, new Hashtable<Port, ClusterInputSlotNode>()); clusterInputSlotHash.put(c, new HashMap<Port, ClusterInputSlotNode>());
clusterOutputSlotHash.put(c, new Hashtable<Port, ClusterOutputSlotNode>()); clusterOutputSlotHash.put(c, new HashMap<Port, ClusterOutputSlotNode>());
clusterOutputSlotSet.put(c, new TreeSet<ClusterOutputSlotNode>()); clusterOutputSlotSet.put(c, new TreeSet<ClusterOutputSlotNode>());
clusterInputSlotSet.put(c, new TreeSet<ClusterInputSlotNode>()); clusterInputSlotSet.put(c, new TreeSet<ClusterInputSlotNode>());
ClusterNode cn = new ClusterNode(c, "" + z); ClusterNode cn = new ClusterNode(c, "" + z);
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
package com.sun.hotspot.igv.layout; package com.sun.hotspot.igv.layout;
import java.util.HashSet; import java.util.HashSet;
import java.util.Hashtable; import java.util.HashMap;
import java.util.Set; import java.util.Set;
import java.util.SortedSet; import java.util.SortedSet;
import java.util.TreeSet; import java.util.TreeSet;
...@@ -37,9 +37,9 @@ public class LayoutGraph { ...@@ -37,9 +37,9 @@ public class LayoutGraph {
private Set<? extends Link> links; private Set<? extends Link> links;
private SortedSet<Vertex> vertices; private SortedSet<Vertex> vertices;
private Hashtable<Vertex, Set<Port>> inputPorts; private HashMap<Vertex, Set<Port>> inputPorts;
private Hashtable<Vertex, Set<Port>> outputPorts; private HashMap<Vertex, Set<Port>> outputPorts;
private Hashtable<Port, Set<Link>> portLinks; private HashMap<Port, Set<Link>> portLinks;
public LayoutGraph(Set<? extends Link> links) { public LayoutGraph(Set<? extends Link> links) {
this(links, new HashSet<Vertex>()); this(links, new HashSet<Vertex>());
...@@ -50,9 +50,9 @@ public class LayoutGraph { ...@@ -50,9 +50,9 @@ public class LayoutGraph {
assert verify(); assert verify();
vertices = new TreeSet<Vertex>(); vertices = new TreeSet<Vertex>();
portLinks = new Hashtable<Port, Set<Link>>(); portLinks = new HashMap<Port, Set<Link>>();
inputPorts = new Hashtable<Vertex, Set<Port>>(); inputPorts = new HashMap<Vertex, Set<Port>>();
outputPorts = new Hashtable<Vertex, Set<Port>>(); outputPorts = new HashMap<Vertex, Set<Port>>();
for (Link l : links) { for (Link l : links) {
Port p = l.getFrom(); Port p = l.getFrom();
......
...@@ -5,21 +5,16 @@ of Linz in Austria and has been included as part of hotspot since that ...@@ -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 was the primary target of the tool. The tool itself is fairly general
with only a few modules that contain C2 specific elements. 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 infrastructure and so requires NetBeans to build. It currently
requires Java 6 to run as it needs support for JavaScript for its requires Java 6 to run as it needs support for JavaScript for its
filtering mechanism and assumes it's built into the platform. It 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 should build out of the box with NetBeans 6.1 and Java 6 or later.
possible to run it on 1.5 by including Rhino on the classpath though It's possible to run it on 1.5 by including Rhino on the classpath
that currently isn't working correctly. Support for exporting graphs though that currently isn't working correctly. Support for exporting
as SVG can be enabled by adding batik to the classpath which isn't graphs as SVG can be enabled by adding batik to the classpath which
included by default. 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.
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.
The JVM support is controlled by the flag -XX:PrintIdealGraphLevel=# The JVM support is controlled by the flag -XX:PrintIdealGraphLevel=#
where # is: where # is:
......
...@@ -36,11 +36,11 @@ import org.openide.nodes.Sheet; ...@@ -36,11 +36,11 @@ import org.openide.nodes.Sheet;
*/ */
public class PropertiesSheet { 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(); Sheet.Set set1 = Sheet.createPropertiesSet();
set1.setDisplayName("Properties"); set1.setDisplayName("Properties");
for (final Property p : properties.getProperties()) { for (final Property p : properties) {
Node.Property<String> prop = new Node.Property<String>(String.class) { Node.Property<String> prop = new Node.Property<String>(String.class) {
@Override @Override
...@@ -60,7 +60,7 @@ public class PropertiesSheet { ...@@ -60,7 +60,7 @@ public class PropertiesSheet {
@Override @Override
public void setValue(String arg0) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { public void setValue(String arg0) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
p.setValue(arg0); properties.setProperty(p.getName(), arg0);
} }
}; };
prop.setName(p.getName()); prop.setName(p.getName());
......
...@@ -65,13 +65,19 @@ public class RangeSliderModel implements ChangedEventProvider<RangeSliderModel> ...@@ -65,13 +65,19 @@ public class RangeSliderModel implements ChangedEventProvider<RangeSliderModel>
public RangeSliderModel(List<String> positions) { public RangeSliderModel(List<String> positions) {
assert positions.size() > 0; assert positions.size() > 0;
this.positions = positions;
this.changedEvent = new ChangedEvent<RangeSliderModel>(this); this.changedEvent = new ChangedEvent<RangeSliderModel>(this);
this.colorChangedEvent = 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>(); colors = new ArrayList<Color>();
for (int i = 0; i < positions.size(); i++) { for (int i = 0; i < positions.size(); i++) {
colors.add(Color.black); colors.add(Color.black);
} }
changedEvent.fire();
colorChangedEvent.fire();
} }
public void setColors(List<Color> colors) { public void setColors(List<Color> colors) {
......
...@@ -63,7 +63,7 @@ import java.util.ArrayList; ...@@ -63,7 +63,7 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Hashtable; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
...@@ -104,10 +104,10 @@ import org.openide.util.lookup.InstanceContent; ...@@ -104,10 +104,10 @@ import org.openide.util.lookup.InstanceContent;
*/ */
public class DiagramScene extends Scene implements ChangedListener<DiagramViewModel> { public class DiagramScene extends Scene implements ChangedListener<DiagramViewModel> {
private Hashtable<Figure, FigureWidget> figureWidgets; private HashMap<Figure, FigureWidget> figureWidgets;
private Hashtable<Slot, SlotWidget> slotWidgets; private HashMap<Slot, SlotWidget> slotWidgets;
private Hashtable<Connection, ConnectionWidget> connectionWidgets; private HashMap<Connection, ConnectionWidget> connectionWidgets;
private Hashtable<InputBlock, BlockWidget> blockWidgets; private HashMap<InputBlock, BlockWidget> blockWidgets;
private Widget hoverWidget; private Widget hoverWidget;
private WidgetAction hoverAction; private WidgetAction hoverAction;
private List<FigureWidget> selectedWidgets; private List<FigureWidget> selectedWidgets;
...@@ -414,7 +414,7 @@ public class DiagramScene extends Scene implements ChangedListener<DiagramViewMo ...@@ -414,7 +414,7 @@ public class DiagramScene extends Scene implements ChangedListener<DiagramViewMo
this.addChild(selectLayer); this.addChild(selectLayer);
this.getActions().addAction(ActionFactory.createRectangularSelectAction(rectangularSelectDecorator, selectLayer, rectangularSelectProvider)); this.getActions().addAction(ActionFactory.createRectangularSelectAction(rectangularSelectDecorator, selectLayer, rectangularSelectProvider));
blockWidgets = new Hashtable<InputBlock, BlockWidget>(); blockWidgets = new HashMap<InputBlock, BlockWidget>();
boolean b = this.getUndoRedoEnabled(); boolean b = this.getUndoRedoEnabled();
this.setUndoRedoEnabled(false); this.setUndoRedoEnabled(false);
...@@ -543,9 +543,9 @@ public class DiagramScene extends Scene implements ChangedListener<DiagramViewMo ...@@ -543,9 +543,9 @@ public class DiagramScene extends Scene implements ChangedListener<DiagramViewMo
blockLayer.removeChildren(); blockLayer.removeChildren();
blockWidgets.clear(); blockWidgets.clear();
figureWidgets = new Hashtable<Figure, FigureWidget>(); figureWidgets = new HashMap<Figure, FigureWidget>();
slotWidgets = new Hashtable<Slot, SlotWidget>(); slotWidgets = new HashMap<Slot, SlotWidget>();
connectionWidgets = new Hashtable<Connection, ConnectionWidget>(); connectionWidgets = new HashMap<Connection, ConnectionWidget>();
WidgetAction selectAction = new ExtendedSelectAction(selectProvider); WidgetAction selectAction = new ExtendedSelectAction(selectProvider);
Diagram d = getModel().getDiagramToView(); Diagram d = getModel().getDiagramToView();
......
...@@ -55,6 +55,7 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene ...@@ -55,6 +55,7 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
private FilterChain filterChain; private FilterChain filterChain;
private FilterChain sequenceFilterChain; private FilterChain sequenceFilterChain;
private Diagram diagram; private Diagram diagram;
private ChangedEvent<DiagramViewModel> groupChangedEvent;
private ChangedEvent<DiagramViewModel> diagramChangedEvent; private ChangedEvent<DiagramViewModel> diagramChangedEvent;
private ChangedEvent<DiagramViewModel> viewChangedEvent; private ChangedEvent<DiagramViewModel> viewChangedEvent;
private ChangedEvent<DiagramViewModel> viewPropertiesChangedEvent; private ChangedEvent<DiagramViewModel> viewPropertiesChangedEvent;
...@@ -67,6 +68,7 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene ...@@ -67,6 +68,7 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
} }
}; };
@Override
public DiagramViewModel copy() { public DiagramViewModel copy() {
DiagramViewModel result = new DiagramViewModel(group, filterChain, sequenceFilterChain); DiagramViewModel result = new DiagramViewModel(group, filterChain, sequenceFilterChain);
result.setData(this); result.setData(this);
...@@ -79,6 +81,7 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene ...@@ -79,6 +81,7 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
boolean viewChanged = false; boolean viewChanged = false;
boolean viewPropertiesChanged = false; boolean viewPropertiesChanged = false;
boolean groupChanged = (group == newModel.group);
this.group = newModel.group; this.group = newModel.group;
diagramChanged |= (filterChain != newModel.filterChain); diagramChanged |= (filterChain != newModel.filterChain);
this.filterChain = newModel.filterChain; this.filterChain = newModel.filterChain;
...@@ -97,6 +100,10 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene ...@@ -97,6 +100,10 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
viewPropertiesChanged |= (showNodeHull != newModel.showNodeHull); viewPropertiesChanged |= (showNodeHull != newModel.showNodeHull);
this.showNodeHull = newModel.showNodeHull; this.showNodeHull = newModel.showNodeHull;
if(groupChanged) {
groupChangedEvent.fire();
}
if (diagramChanged) { if (diagramChanged) {
diagramChangedEvent.fire(); diagramChangedEvent.fire();
} }
...@@ -143,11 +150,38 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene ...@@ -143,11 +150,38 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
diagramChangedEvent = new ChangedEvent<DiagramViewModel>(this); diagramChangedEvent = new ChangedEvent<DiagramViewModel>(this);
viewChangedEvent = new ChangedEvent<DiagramViewModel>(this); viewChangedEvent = new ChangedEvent<DiagramViewModel>(this);
viewPropertiesChangedEvent = new ChangedEvent<DiagramViewModel>(this); viewPropertiesChangedEvent = new ChangedEvent<DiagramViewModel>(this);
groupChangedEvent = new ChangedEvent<DiagramViewModel>(this);
groupChangedEvent.addListener(groupChangedListener);
groupChangedEvent.fire();
filterChain.getChangedEvent().addListener(filterChainChangedListener); filterChain.getChangedEvent().addListener(filterChainChangedListener);
sequenceFilterChain.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() { public ChangedEvent<DiagramViewModel> getDiagramChangedEvent() {
return diagramChangedEvent; return diagramChangedEvent;
} }
...@@ -268,7 +302,10 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene ...@@ -268,7 +302,10 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
} }
public InputGraph getSecondGraph() { 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) { public void selectGraph(InputGraph g) {
......
...@@ -67,7 +67,7 @@ class FindPanel extends JPanel implements KeyListener { ...@@ -67,7 +67,7 @@ class FindPanel extends JPanel implements KeyListener {
for (Figure f : figures) { for (Figure f : figures) {
Properties prop = f.getProperties(); Properties prop = f.getProperties();
for (Property p : prop.getProperties()) { for (Property p : prop) {
if (!propertyNames.contains(p.getName())) { if (!propertyNames.contains(p.getName())) {
propertyNames.add(p.getName()); propertyNames.add(p.getName());
} }
......
# Deprecated since 5.0u1; for compatibility with 5.0: # Deprecated since 5.0u1; for compatibility with 5.0:
disabled.clusters=\ disabled.clusters=\
apisupport1,\ apisupport1,\
gsf1,\
harness,\ harness,\
ide8,\ ide9,\
java1,\ java2,\
nb6.0,\ nb6.1,\
profiler2 profiler3
disabled.modules=\ disabled.modules=\
org.netbeans.core.execution,\ org.netbeans.core.execution,\
org.netbeans.core.multiview,\ org.netbeans.core.multiview,\
org.netbeans.core.output2,\ org.netbeans.core.output2,\
org.netbeans.modules.applemenu,\
org.netbeans.modules.autoupdate.services,\ org.netbeans.modules.autoupdate.services,\
org.netbeans.modules.autoupdate.ui,\ org.netbeans.modules.autoupdate.ui,\
org.netbeans.modules.core.kit,\ org.netbeans.modules.core.kit,\
...@@ -24,6 +24,6 @@ disabled.modules=\ ...@@ -24,6 +24,6 @@ disabled.modules=\
org.openide.execution,\ org.openide.execution,\
org.openide.util.enumerations org.openide.util.enumerations
enabled.clusters=\ enabled.clusters=\
platform7 platform8
nbjdk.active=default nbjdk.active=default
nbplatform.active=default nbplatform.active=default
...@@ -15,7 +15,6 @@ modules=\ ...@@ -15,7 +15,6 @@ modules=\
${project.com.sun.hotspot.igv.difference}:\ ${project.com.sun.hotspot.igv.difference}:\
${project.com.sun.hotspot.igv.settings}:\ ${project.com.sun.hotspot.igv.settings}:\
${project.com.sun.hotspot.igv.util}:\ ${project.com.sun.hotspot.igv.util}:\
${project.com.sun.hotspot.igv.rhino}:\
${project.com.sun.hotspot.igv.svg}:\ ${project.com.sun.hotspot.igv.svg}:\
${project.com.sun.hotspot.connection}:\ ${project.com.sun.hotspot.connection}:\
${project.com.sun.hotspot.igv.servercompilerscheduler}:\ ${project.com.sun.hotspot.igv.servercompilerscheduler}:\
...@@ -31,10 +30,10 @@ project.com.sun.hotspot.igv.filterwindow=FilterWindow ...@@ -31,10 +30,10 @@ project.com.sun.hotspot.igv.filterwindow=FilterWindow
project.com.sun.hotspot.igv.graph=Graph project.com.sun.hotspot.igv.graph=Graph
project.com.sun.hotspot.igv.hierarchicallayout=HierarchicalLayout project.com.sun.hotspot.igv.hierarchicallayout=HierarchicalLayout
project.com.sun.hotspot.igv.layout=Layout 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.servercompilerscheduler=ServerCompiler
project.com.sun.hotspot.igv.settings=Settings project.com.sun.hotspot.igv.settings=Settings
project.com.sun.hotspot.igv.svg=BatikSVGProxy project.com.sun.hotspot.igv.svg=BatikSVGProxy
project.com.sun.hotspot.igv.view=View project.com.sun.hotspot.igv.view=View
project.com.sun.hotspot.igv.util=Util 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
...@@ -377,7 +377,7 @@ static uint dump_spec_constant(FILE *fp, const char *ideal_type, uint i, Operand ...@@ -377,7 +377,7 @@ static uint dump_spec_constant(FILE *fp, const char *ideal_type, uint i, Operand
++i; ++i;
} }
else if (!strcmp(ideal_type, "ConN")) { else if (!strcmp(ideal_type, "ConN")) {
fprintf(fp," _c%d->dump();\n", i); fprintf(fp," _c%d->dump_on(st);\n", i);
++i; ++i;
} }
else if (!strcmp(ideal_type, "ConL")) { else if (!strcmp(ideal_type, "ConL")) {
......
...@@ -551,7 +551,7 @@ Compile::Compile( ciEnv* ci_env, C2Compiler* compiler, ciMethod* target, int osr ...@@ -551,7 +551,7 @@ Compile::Compile( ciEnv* ci_env, C2Compiler* compiler, ciMethod* target, int osr
rethrow_exceptions(kit.transfer_exceptions_into_jvms()); rethrow_exceptions(kit.transfer_exceptions_into_jvms());
} }
print_method("Before RemoveUseless"); print_method("Before RemoveUseless", 3);
// Remove clutter produced by parsing. // Remove clutter produced by parsing.
if (!failing()) { if (!failing()) {
......
...@@ -3541,7 +3541,7 @@ intptr_t TypeNarrowOop::get_con() const { ...@@ -3541,7 +3541,7 @@ intptr_t TypeNarrowOop::get_con() const {
#ifndef PRODUCT #ifndef PRODUCT
void TypeNarrowOop::dump2( Dict & d, uint depth, outputStream *st ) const { void TypeNarrowOop::dump2( Dict & d, uint depth, outputStream *st ) const {
tty->print("narrowoop: "); st->print("narrowoop: ");
_ooptype->dump2(d, depth, st); _ooptype->dump2(d, depth, st);
} }
#endif #endif
......
...@@ -83,12 +83,12 @@ void RegisterMap::print_on(outputStream* st) const { ...@@ -83,12 +83,12 @@ void RegisterMap::print_on(outputStream* st) const {
intptr_t* src = (intptr_t*) location(r); intptr_t* src = (intptr_t*) location(r);
if (src != NULL) { if (src != NULL) {
r->print(); r->print_on(st);
tty->print(" [" INTPTR_FORMAT "] = ", src); st->print(" [" INTPTR_FORMAT "] = ", src);
if (((uintptr_t)src & (sizeof(*src)-1)) != 0) { if (((uintptr_t)src & (sizeof(*src)-1)) != 0) {
tty->print_cr("<misaligned>"); st->print_cr("<misaligned>");
} else { } else {
tty->print_cr(INTPTR_FORMAT, *src); st->print_cr(INTPTR_FORMAT, *src);
} }
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册