mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
6764622: IdealGraphVisualizer fixes
Reviewed-by: rasbold, jrose
This commit is contained in:
parent
8537533873
commit
7bcfb5965d
36 changed files with 331 additions and 207 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
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;
|
||||||
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;
|
||||||
*/
|
*/
|
||||||
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;
|
||||||
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
|
||||||
|
|
||||||
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 @@
|
||||||
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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
@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;
|
||||||
*
|
*
|
||||||
* @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;
|
||||||
*
|
*
|
||||||
* @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 @@
|
||||||
*/
|
*/
|
||||||
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 {
|
||||||
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 {
|
||||||
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;
|
||||||
*
|
*
|
||||||
* @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;
|
||||||
*
|
*
|
||||||
* @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;
|
||||||
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 {
|
||||||
|
|
||||||
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 {
|
||||||
|
|
||||||
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 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
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())) {
|
}
|
||||||
return p;
|
if (value != null && matcher.match(value)) {
|
||||||
|
return new Property(matcher.getName(), value);
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
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 map[i + 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
} else {
|
|
||||||
return p.getValue();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
if (value == null) {
|
||||||
// remove this property
|
// remove this property
|
||||||
return map.remove(name);
|
map[i] = null;
|
||||||
|
map[i + 1] = null;
|
||||||
} else {
|
} else {
|
||||||
Property p = map.get(name);
|
map[i + 1] = value;
|
||||||
if (p == null) {
|
|
||||||
p = new Property(name, value);
|
|
||||||
map.put(name, p);
|
|
||||||
} else {
|
|
||||||
p.setValue(value);
|
|
||||||
}
|
}
|
||||||
return p;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (value == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < map.length; i += 2) {
|
||||||
|
if (map[i] == null) {
|
||||||
|
map[i] = name;
|
||||||
|
map[i + 1] = value;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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 {
|
||||||
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;
|
||||||
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 {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setName(String s) {
|
|
||||||
this.name = s;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setValue(String s) {
|
|
||||||
this.value = s;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return name + " = " + value + "; ";
|
return name + " = " + value + "; ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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 int hashCode() {
|
||||||
|
return name.hashCode() + value == null ? 0 : value.hashCode();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
@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 {
|
||||||
|
|
||||||
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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// <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 {
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
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 {
|
||||||
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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
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 {
|
||||||
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;
|
||||||
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 {
|
||||||
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;
|
||||||
*
|
*
|
||||||
* @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;
|
||||||
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;
|
||||||
*/
|
*/
|
||||||
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;
|
||||||
|
|
||||||
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 {
|
||||||
|
|
||||||
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 {
|
||||||
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 @@
|
||||||
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 {
|
||||||
|
|
||||||
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 {
|
||||||
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
|
||||||
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;
|
||||||
*/
|
*/
|
||||||
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 {
|
||||||
|
|
||||||
@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>
|
||||||
|
|
||||||
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;
|
||||||
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;
|
||||||
*/
|
*/
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
}
|
}
|
||||||
|
|
||||||
public InputGraph getSecondGraph() {
|
public InputGraph getSecondGraph() {
|
||||||
|
List<InputGraph> graphs = group.getGraphs();
|
||||||
|
if (graphs.size() >= getSecondPosition())
|
||||||
return group.getGraphs().get(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 {
|
||||||
|
|
||||||
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());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
# 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=\
|
||||||
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=\
|
||||||
${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
|
||||||
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
|
||||||
++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
|
||||||
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 {
|
||||||
|
|
||||||
#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 {
|
||||||
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue