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