Skip to content

Commit 0f2ac02

Browse files
committed
Add display field
1 parent 149e502 commit 0f2ac02

File tree

1 file changed

+30
-5
lines changed
  • substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/reports

1 file changed

+30
-5
lines changed

substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/reports/CallTreeCypher.java

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import com.oracle.graal.pointsto.reports.CallTreePrinter.MethodNode;
77
import com.oracle.graal.pointsto.reports.CallTreePrinter.MethodNodeReference;
88
import com.oracle.graal.pointsto.reports.CallTreePrinter.Node;
9+
import jdk.vm.ci.meta.JavaKind;
910
import jdk.vm.ci.meta.ResolvedJavaMethod;
11+
import jdk.vm.ci.meta.ResolvedJavaType;
1012

1113
import java.io.File;
1214
import java.io.PrintWriter;
@@ -21,12 +23,18 @@
2123
import java.util.Objects;
2224
import java.util.Set;
2325
import java.util.concurrent.atomic.AtomicInteger;
26+
import java.util.regex.MatchResult;
27+
import java.util.regex.Matcher;
28+
import java.util.regex.Pattern;
2429
import java.util.stream.Collectors;
2530
import java.util.stream.Stream;
2631

2732
public class CallTreeCypher {
2833

2934
private static final AtomicInteger virtualNodeId = new AtomicInteger(-1);
35+
public static final Pattern DISPLAY_PATTERN = Pattern.compile(
36+
"\\b[a-zA-Z]|[A-Z]|\\."
37+
);
3038

3139
public static void print(BigBang bigbang, String path, String reportName) {
3240
// Re-initialize method ids back to 0 to better diagnose disparities
@@ -91,11 +99,11 @@ private static void printCypher(String vmFileName, String methodsFileName, Strin
9199
writer.println("RETURN count(v);");
92100
writer.println("");
93101
writer.println(String.format("LOAD CSV WITH HEADERS FROM 'file:///%s' AS row", methodsFileName));
94-
writer.println("MERGE (m:Method {methodId: row.Id, name: row.Name, type: row.Type, parameters: row.Parameters, return: row.Return})");
102+
writer.println("MERGE (m:Method {methodId: row.Id, name: row.Name, type: row.Type, parameters: row.Parameters, return: row.Return, display: row.Display})");
95103
writer.println("RETURN count(m);");
96104
writer.println("");
97105
writer.println(String.format("LOAD CSV WITH HEADERS FROM 'file:///%s' AS row", virtualMethodsFileName));
98-
writer.println("MERGE (m:Method {methodId: row.Id, name: row.Name, type: row.Type, parameters: row.Parameters, return: row.Return})");
106+
writer.println("MERGE (m:Method {methodId: row.Id, name: row.Name, type: row.Type, parameters: row.Parameters, return: row.Return, display: row.Display})");
99107
writer.println("RETURN count(m);");
100108
writer.println("");
101109
writer.println(String.format("LOAD CSV WITH HEADERS FROM 'file:///%s' AS row", entryPointsFileName));
@@ -152,7 +160,7 @@ private static void walkNodes(MethodNode methodNode, Map<Integer, Set<BciEndEdge
152160
}
153161

154162
private static void printMethodNodes(Collection<MethodNode> methods, PrintWriter writer) {
155-
writer.println(convertToCSV("Id", "Name", "Type", "Parameters", "Return"));
163+
writer.println(convertToCSV("Id", "Name", "Type", "Parameters", "Return", "Display"));
156164
methods.stream()
157165
.map(CallTreeCypher::methodNodeInfo)
158166
.map(CallTreeCypher::convertToCSV)
@@ -189,7 +197,7 @@ private static List<Integer> bytecodeIndexes(InvokeNode node) {
189197
}
190198

191199
private static void printVirtualNodes(Map<List<String>, Integer> virtualNodes, PrintWriter writer) {
192-
writer.println(convertToCSV("Id", "Name", "Type", "Parameters", "Return"));
200+
writer.println(convertToCSV("Id", "Name", "Type", "Parameters", "Return", "Display"));
193201
virtualNodes.entrySet().stream()
194202
.map(CallTreeCypher::virtualMethodAndIdInfo)
195203
.map(CallTreeCypher::convertToCSV)
@@ -266,10 +274,27 @@ private static List<String> resolvedJavaMethodInfo(Integer id, ResolvedJavaMetho
266274
method.getName(),
267275
method.getDeclaringClass().toJavaName(true),
268276
parameters,
269-
method.getSignature().getReturnType(null).toJavaName(true)
277+
method.getSignature().getReturnType(null).toJavaName(true),
278+
display(method)
270279
);
271280
}
272281

282+
private static String display(ResolvedJavaMethod method) {
283+
final ResolvedJavaType type = method.getDeclaringClass();
284+
final String typeName = type.toJavaName(true);
285+
if (type.getJavaKind() == JavaKind.Object) {
286+
List<String> matchResults = new ArrayList<>();
287+
Matcher matcher = DISPLAY_PATTERN.matcher(typeName);
288+
while (matcher.find()) {
289+
matchResults.add(matcher.toMatchResult().group());
290+
}
291+
292+
return String.join("", matchResults) + "." + method.getName();
293+
}
294+
295+
return typeName + "." + method.getName();
296+
}
297+
273298
private static String convertToCSV(String... data) {
274299
return String.join(",", data);
275300
}

0 commit comments

Comments
 (0)