< prev index next >
src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/NodeQuickSearch.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 21,30 ****
--- 21,31 ----
* questions.
*
*/
package com.sun.hotspot.igv.view;
+ import com.sun.hotspot.igv.data.InputGraph;
import com.sun.hotspot.igv.data.InputNode;
import com.sun.hotspot.igv.data.Properties;
import com.sun.hotspot.igv.data.Properties.RegexpPropertyMatcher;
import com.sun.hotspot.igv.data.services.InputGraphProvider;
import com.sun.hotspot.igv.util.LookupHistory;
*** 79,122 ****
value = ".*";
}
final InputGraphProvider p = LookupHistory.getLast(InputGraphProvider.class);
if (p != null && p.getGraph() != null) {
! List<InputNode> matches = null;
! try {
! RegexpPropertyMatcher matcher = new RegexpPropertyMatcher(name, value, Pattern.CASE_INSENSITIVE);
! Properties.PropertySelector<InputNode> selector = new Properties.PropertySelector<>(p.getGraph().getNodes());
!
! matches = selector.selectMultiple(matcher);
! } catch (Exception e) {
! final String msg = e.getMessage();
! response.addResult(new Runnable() {
! @Override
! public void run() {
! Message desc = new NotifyDescriptor.Message("An exception occurred during the search, "
! + "perhaps due to a malformed query string:\n" + msg,
! NotifyDescriptor.WARNING_MESSAGE);
! DialogDisplayer.getDefault().notify(desc);
}
- },
- "(Error during search)"
- );
}
if (matches != null) {
final Set<InputNode> set = new HashSet<>(matches);
response.addResult(new Runnable() {
@Override
public void run() {
final EditorTopComponent comp = EditorTopComponent.getActive();
if (comp != null) {
comp.setSelectedNodes(set);
comp.requestActive();
}
}
},
! "All " + matches.size() + " matching nodes (" + name + "=" + value + ")"
);
// Single matches
for (final InputNode n : matches) {
response.addResult(new Runnable() {
--- 80,130 ----
value = ".*";
}
final InputGraphProvider p = LookupHistory.getLast(InputGraphProvider.class);
if (p != null && p.getGraph() != null) {
! InputGraph matchGraph = p.getGraph();
! // Search the current graph
! List<InputNode> matches = findMatches(name, value, p.getGraph(), response);
! if (matches == null) {
! // See if the it hits in a later graph
! for (InputGraph graph : p.searchForward()) {
! matches = findMatches(name, value, graph, response);
! if (matches != null) {
! matchGraph = graph;
! break;
! }
! }
! }
! if (matches == null) {
! // See if it hits in a earlier graph
! for (InputGraph graph : p.searchBackward()) {
! matches = findMatches(name, value, graph, response);
! if (matches != null) {
! matchGraph = graph;
! break;
! }
}
}
if (matches != null) {
final Set<InputNode> set = new HashSet<>(matches);
+ final InputGraph theGraph = p.getGraph() != matchGraph ? matchGraph : null;
response.addResult(new Runnable() {
@Override
public void run() {
final EditorTopComponent comp = EditorTopComponent.getActive();
if (comp != null) {
+ if (theGraph != null) {
+ comp.getDiagramModel().selectGraph(theGraph);
+ }
comp.setSelectedNodes(set);
comp.requestActive();
}
}
},
! "All " + matches.size() + " matching nodes (" + name + "=" + value + ")" + (theGraph != null ? " in " + theGraph.getName() : "")
);
// Single matches
for (final InputNode n : matches) {
response.addResult(new Runnable() {
*** 124,142 ****
public void run() {
final EditorTopComponent comp = EditorTopComponent.getActive();
if (comp != null) {
final Set<InputNode> tmpSet = new HashSet<>();
tmpSet.add(n);
comp.setSelectedNodes(tmpSet);
comp.requestActive();
}
}
},
! n.getProperties().get(name) + " (" + n.getId() + " " + n.getProperties().get("name") + ")"
);
}
}
} else {
System.out.println("no input graph provider!");
}
}
}
--- 132,176 ----
public void run() {
final EditorTopComponent comp = EditorTopComponent.getActive();
if (comp != null) {
final Set<InputNode> tmpSet = new HashSet<>();
tmpSet.add(n);
+ if (theGraph != null) {
+ comp.getDiagramModel().selectGraph(theGraph);
+ }
comp.setSelectedNodes(tmpSet);
comp.requestActive();
}
}
},
! n.getProperties().get(name) + " (" + n.getId() + " " + n.getProperties().get("name") + ")" + (theGraph != null ? " in " + theGraph.getName() : "")
);
}
}
} else {
System.out.println("no input graph provider!");
}
}
+
+ private List<InputNode> findMatches(String name, String value, InputGraph inputGraph, SearchResponse response) {
+ try {
+ RegexpPropertyMatcher matcher = new RegexpPropertyMatcher(name, value, Pattern.CASE_INSENSITIVE);
+ Properties.PropertySelector<InputNode> selector = new Properties.PropertySelector<>(inputGraph.getNodes());
+ List<InputNode> matches = selector.selectMultiple(matcher);
+ return matches.size() == 0 ? null : matches;
+ } catch (Exception e) {
+ final String msg = e.getMessage();
+ response.addResult(new Runnable() {
+ @Override
+ public void run() {
+ Message desc = new NotifyDescriptor.Message("An exception occurred during the search, "
+ + "perhaps due to a malformed query string:\n" + msg,
+ NotifyDescriptor.WARNING_MESSAGE);
+ DialogDisplayer.getDefault().notify(desc);
+ }
+ },
+ "(Error during search)"
+ );
+ }
+ return null;
+ }
}
< prev index next >