diff --git a/README.md b/README.md index 00bfdc6..ee7666e 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,10 @@ Go to [this Lab on iCorsi](https://www.icorsi.ch/course/view.php?id=16963). | First Name | Claudio | | Last Name | Maggioni | +**NOTE:** the combined PDF with all CFGs, one per method, can be found in `test-output/all.pdf`. Method CFGs are +laid in side-by-side as I was not able to generate a one-per-page PDF as instructed. I told this to Prof. Hauswirth +on wednesday, and I was told to ask to Mr. Di Lauro if this layout was fine too, but I forgot. So, I'd like to apologize if this causes any inconvenience. + ## Submission Checklist Please complete this checklist (turn [ ] into [X]) before you submit: diff --git a/all.m4 b/all.m4 new file mode 100644 index 0000000..d088a3a --- /dev/null +++ b/all.m4 @@ -0,0 +1,47 @@ +digraph all +{ + define(`digraph',`subgraph') + include(test-output/.dot) + include(test-output/alloc2Of3dArrayMethod.dot) + include(test-output/alloc2dArrayMethod.dot) + include(test-output/allocAndInit2dArrayMethod.dot) + include(test-output/allocAndInitIntArrayMethod.dot) + include(test-output/allocAndInitObjectArrayMethod.dot) + include(test-output/allocIncomplete2dArrayMethod.dot) + include(test-output/allocIntArrayMethod.dot) + include(test-output/allocObjectArrayMethod.dot) + include(test-output/allocObjectMethod.dot) + include(test-output/arrayLengthMethod.dot) + include(test-output/arrayReadMethod.dot) + include(test-output/arrayWriteMethod.dot) + include(test-output/condMethod.dot) + include(test-output/doWhileMethod.dot) + include(test-output/doWhileTrue.dot) + include(test-output/emptyMethod.dot) + include(test-output/fieldReadMethod.dot) + include(test-output/fieldWriteMethod.dot) + include(test-output/forEachArrayMethod.dot) + include(test-output/forEachCollectionMethod.dot) + include(test-output/forEver.dot) + include(test-output/forMethod.dot) + include(test-output/forWithBreakMethod.dot) + include(test-output/forWithContinueMethod.dot) + include(test-output/ifElseMethod.dot) + include(test-output/ifMethod.dot) + include(test-output/instanceCallMethod.dot) + include(test-output/instanceCallTarget.dot) + include(test-output/interfaceCallMethod.dot) + include(test-output/nestedFor.dot) + include(test-output/nonShortCircuitMethod.dot) + include(test-output/privateInstanceCallMethod.dot) + include(test-output/privateInstanceCallTarget.dot) + include(test-output/shortCircuitMethod.dot) + include(test-output/staticCallMethod.dot) + include(test-output/staticCallTarget.dot) + include(test-output/staticFieldReadMethod.dot) + include(test-output/staticFieldWriteMethod.dot) + include(test-output/switchMethod.dot) + include(test-output/switchMethod2.dot) + include(test-output/whileMethod.dot) + include(test-output/whileTrueMethod.dot) +} diff --git a/compile-tests.sh b/compile-tests.sh index 1e8bbac..f811c6a 100755 --- a/compile-tests.sh +++ b/compile-tests.sh @@ -3,4 +3,5 @@ set -eou pipefail cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" -cat test-output/*.dot | gvpack -u | dot -Tpdf > test-output/all.pdf +m4 all.m4 > test-output/all.dot +dot -Tpdf test-output/all.dot > test-output/all.pdf diff --git a/src/ch/usi/inf/sp/cfg/ControlFlowGraphRenderer.java b/src/ch/usi/inf/sp/cfg/ControlFlowGraphRenderer.java index 7ee2535..50ed431 100644 --- a/src/ch/usi/inf/sp/cfg/ControlFlowGraphRenderer.java +++ b/src/ch/usi/inf/sp/cfg/ControlFlowGraphRenderer.java @@ -9,19 +9,19 @@ public class ControlFlowGraphRenderer { private final StringBuilder code = new StringBuilder(); private int indentationLevel = 0; - private static String nodeIdentifier(final BasicBlock bb) { + private static String nodeIdentifier(final BasicBlock bb, final String graphId) { if (bb.getInEdges().isEmpty()) { - return "e"; + return graphId + "e"; } else if (bb.getOutEdges().isEmpty()) { - return "x"; + return graphId + "x"; } else { - return "bb" + bb.getId(); + return graphId + "bb" + bb.getId(); } } - private static String nodeStyle(final BasicBlock bb) { + private static String nodeStyle(final BasicBlock bb, final String label) { if (bb.getInEdges().isEmpty()) { - return "[shape=circle,label=\"e\"]"; + return "[shape=circle,label=\"e\",xlabel=\"" + label + "\"]"; } else if (bb.getOutEdges().isEmpty()) { return "[shape=circle,label=\"x\"]"; } else { @@ -40,15 +40,16 @@ public class ControlFlowGraphRenderer { code.append(INDENTATION.repeat(indentationLevel)).append(line).append('\n'); } - private String render(final String label, final ControlFlowGraph graph) { + private String render(final String desiredLabel, final ControlFlowGraph graph) { + final String label = desiredLabel.replaceAll("\\W+", ""); + line("digraph " + label + " {"); - indentationLevel++; - line("label=\"" + label + "\";"); code.append('\n'); + indentationLevel++; line("node [shape=record]"); for (final BasicBlock bb : graph.getNodes()) { - line(nodeIdentifier(bb) + " " + nodeStyle(bb)); + line(nodeIdentifier(bb, label) + " " + nodeStyle(bb, label)); } code.append('\n'); @@ -56,7 +57,7 @@ public class ControlFlowGraphRenderer { final String l = e.getLabel(); final String suffix = l == null || l.isBlank() ? "" : (" [label=\"" + e.getLabel() + "\"]"); - line(nodeIdentifier(e.getFrom()) + " -> " + nodeIdentifier(e.getTo()) + suffix); + line(nodeIdentifier(e.getFrom(), label) + " -> " + nodeIdentifier(e.getTo(), label) + suffix); } indentationLevel--; line("}"); diff --git a/test-output/.dot b/test-output/.dot index 767c1ca..4e8c3cf 100644 --- a/test-output/.dot +++ b/test-output/.dot @@ -1,11 +1,10 @@ -digraph { - label=""; +digraph init { node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ALOAD 0|3: INVOKESPECIAL java/lang/Object. ()V|4: RETURN }"] + inite [shape=circle,label="e",xlabel="init"] + initx [shape=circle,label="x"] + initbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 0|3: INVOKESPECIAL java/lang/Object. ()V|4: RETURN }"] - e -> bb0 - bb0 -> x + inite -> initbb0 + initbb0 -> initx } diff --git a/test-output/all.dot b/test-output/all.dot new file mode 100644 index 0000000..5458f30 --- /dev/null +++ b/test-output/all.dot @@ -0,0 +1,626 @@ +digraph all +{ + + subgraph init { + + node [shape=record] + inite [shape=circle,label="e",xlabel="init"] + initx [shape=circle,label="x"] + initbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 0|3: INVOKESPECIAL java/lang/Object. ()V|4: RETURN }"] + + inite -> initbb0 + initbb0 -> initx +} + + subgraph alloc2Of3dArrayMethod { + + node [shape=record] + alloc2Of3dArrayMethode [shape=circle,label="e",xlabel="alloc2Of3dArrayMethod"] + alloc2Of3dArrayMethodx [shape=circle,label="x"] + alloc2Of3dArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_2 |3: ICONST_3 |4: MULTIANEWARRAY [[[I 2|5: ARETURN }"] + + alloc2Of3dArrayMethode -> alloc2Of3dArrayMethodbb0 + alloc2Of3dArrayMethodbb0 -> alloc2Of3dArrayMethodx +} + + subgraph alloc2dArrayMethod { + + node [shape=record] + alloc2dArrayMethode [shape=circle,label="e",xlabel="alloc2dArrayMethod"] + alloc2dArrayMethodx [shape=circle,label="x"] + alloc2dArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_2 |3: ICONST_3 |4: MULTIANEWARRAY [[I 2|5: ARETURN }"] + + alloc2dArrayMethode -> alloc2dArrayMethodbb0 + alloc2dArrayMethodbb0 -> alloc2dArrayMethodx +} + + subgraph allocAndInit2dArrayMethod { + + node [shape=record] + allocAndInit2dArrayMethode [shape=circle,label="e",xlabel="allocAndInit2dArrayMethod"] + allocAndInit2dArrayMethodx [shape=circle,label="x"] + allocAndInit2dArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_1 |3: ANEWARRAY [I|4: DUP |5: ICONST_0 |6: ICONST_1 |7: NEWARRAY T_INT|8: DUP |9: ICONST_0 |10: ICONST_1 |11: IASTORE |12: AASTORE |13: ARETURN }"] + + allocAndInit2dArrayMethode -> allocAndInit2dArrayMethodbb0 + allocAndInit2dArrayMethodbb0 -> allocAndInit2dArrayMethodx +} + + subgraph allocAndInitIntArrayMethod { + + node [shape=record] + allocAndInitIntArrayMethode [shape=circle,label="e",xlabel="allocAndInitIntArrayMethod"] + allocAndInitIntArrayMethodx [shape=circle,label="x"] + allocAndInitIntArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_2 |3: NEWARRAY T_INT|4: DUP |5: ICONST_0 |6: ICONST_1 |7: IASTORE |8: DUP |9: ICONST_1 |10: ICONST_2 |11: IASTORE |12: ARETURN }"] + + allocAndInitIntArrayMethode -> allocAndInitIntArrayMethodbb0 + allocAndInitIntArrayMethodbb0 -> allocAndInitIntArrayMethodx +} + + subgraph allocAndInitObjectArrayMethod { + + node [shape=record] + allocAndInitObjectArrayMethode [shape=circle,label="e",xlabel="allocAndInitObjectArrayMethod"] + allocAndInitObjectArrayMethodx [shape=circle,label="x"] + allocAndInitObjectArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_2 |3: ANEWARRAY java/lang/Object|4: DUP |5: ICONST_0 |6: LDC 1|7: AASTORE |8: DUP |9: ICONST_1 |10: LDC 2|11: AASTORE |12: ARETURN }"] + + allocAndInitObjectArrayMethode -> allocAndInitObjectArrayMethodbb0 + allocAndInitObjectArrayMethodbb0 -> allocAndInitObjectArrayMethodx +} + + subgraph allocIncomplete2dArrayMethod { + + node [shape=record] + allocIncomplete2dArrayMethode [shape=circle,label="e",xlabel="allocIncomplete2dArrayMethod"] + allocIncomplete2dArrayMethodx [shape=circle,label="x"] + allocIncomplete2dArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_2 |3: ANEWARRAY [I|4: ARETURN }"] + + allocIncomplete2dArrayMethode -> allocIncomplete2dArrayMethodbb0 + allocIncomplete2dArrayMethodbb0 -> allocIncomplete2dArrayMethodx +} + + subgraph allocIntArrayMethod { + + node [shape=record] + allocIntArrayMethode [shape=circle,label="e",xlabel="allocIntArrayMethod"] + allocIntArrayMethodx [shape=circle,label="x"] + allocIntArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_3 |3: NEWARRAY T_INT|4: ARETURN }"] + + allocIntArrayMethode -> allocIntArrayMethodbb0 + allocIntArrayMethodbb0 -> allocIntArrayMethodx +} + + subgraph allocObjectArrayMethod { + + node [shape=record] + allocObjectArrayMethode [shape=circle,label="e",xlabel="allocObjectArrayMethod"] + allocObjectArrayMethodx [shape=circle,label="x"] + allocObjectArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_3 |3: ANEWARRAY java/lang/Object|4: ARETURN }"] + + allocObjectArrayMethode -> allocObjectArrayMethodbb0 + allocObjectArrayMethodbb0 -> allocObjectArrayMethodx +} + + subgraph allocObjectMethod { + + node [shape=record] + allocObjectMethode [shape=circle,label="e",xlabel="allocObjectMethod"] + allocObjectMethodx [shape=circle,label="x"] + allocObjectMethodbb0 [label="0|{0: // label|1: // line number information|2: NEW java/lang/Object|3: DUP |4: INVOKESPECIAL java/lang/Object. ()V|5: ARETURN }"] + + allocObjectMethode -> allocObjectMethodbb0 + allocObjectMethodbb0 -> allocObjectMethodx +} + + subgraph arrayLengthMethod { + + node [shape=record] + arrayLengthMethode [shape=circle,label="e",xlabel="arrayLengthMethod"] + arrayLengthMethodx [shape=circle,label="x"] + arrayLengthMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: ARRAYLENGTH |4: IRETURN }"] + + arrayLengthMethode -> arrayLengthMethodbb0 + arrayLengthMethodbb0 -> arrayLengthMethodx +} + + subgraph arrayReadMethod { + + node [shape=record] + arrayReadMethode [shape=circle,label="e",xlabel="arrayReadMethod"] + arrayReadMethodx [shape=circle,label="x"] + arrayReadMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: ICONST_0 |4: AALOAD |5: ARETURN }"] + + arrayReadMethode -> arrayReadMethodbb0 + arrayReadMethodbb0 -> arrayReadMethodx +} + + subgraph arrayWriteMethod { + + node [shape=record] + arrayWriteMethode [shape=circle,label="e",xlabel="arrayWriteMethod"] + arrayWriteMethodx [shape=circle,label="x"] + arrayWriteMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: ICONST_0 |4: ALOAD 2|5: AASTORE |6: // label|7: // line number information|8: RETURN }"] + + arrayWriteMethode -> arrayWriteMethodbb0 + arrayWriteMethodbb0 -> arrayWriteMethodx +} + + subgraph condMethod { + + node [shape=record] + condMethode [shape=circle,label="e",xlabel="condMethod"] + condMethodx [shape=circle,label="x"] + condMethodbb0 [label="0|{0: // label|1: // line number information|2: ILOAD 1|3: ILOAD 2|4: IF_ICMPLE 7}"] + condMethodbb5 [label="5|{5: ILOAD 1|6: GOTO 10}"] + condMethodbb7 [label="7|{7: // label|8: // stack frame map|9: ILOAD 2}"] + condMethodbb10 [label="10|{10: // label|11: // stack frame map|12: IRETURN }"] + + condMethode -> condMethodbb0 + condMethodbb0 -> condMethodbb5 + condMethodbb7 -> condMethodbb10 + condMethodbb10 -> condMethodx + condMethodbb0 -> condMethodbb7 [label="T"] + condMethodbb5 -> condMethodbb10 [label="T"] +} + + subgraph doWhileMethod { + + node [shape=record] + doWhileMethode [shape=circle,label="e",xlabel="doWhileMethod"] + doWhileMethodx [shape=circle,label="x"] + doWhileMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2}"] + doWhileMethodbb4 [label="4|{4: // label|5: // line number information|6: // stack frame map|7: ILOAD 2|8: ILOAD 1|9: IADD |10: ISTORE 2|11: // label|12: // line number information|13: IINC 1 -1|14: // label|15: // line number information|16: ILOAD 1|17: IFGT 4}"] + doWhileMethodbb18 [label="18|{18: // label|19: // line number information|20: ILOAD 2|21: IRETURN }"] + + doWhileMethode -> doWhileMethodbb0 + doWhileMethodbb0 -> doWhileMethodbb4 + doWhileMethodbb4 -> doWhileMethodbb18 + doWhileMethodbb18 -> doWhileMethodx + doWhileMethodbb4 -> doWhileMethodbb4 [label="T"] +} + + subgraph doWhileTrue { + + node [shape=record] + doWhileTruee [shape=circle,label="e",xlabel="doWhileTrue"] + doWhileTruee [shape=circle,label="e",xlabel="doWhileTrue"] + doWhileTruebb0 [label="0|{0: // label|1: // line number information|2: // stack frame map|3: IINC 1 1|4: // label|5: // line number information|6: GOTO 0}"] + + doWhileTruee -> doWhileTruebb0 + doWhileTruebb0 -> doWhileTruebb0 [label="T"] +} + + subgraph emptyMethod { + + node [shape=record] + emptyMethode [shape=circle,label="e",xlabel="emptyMethod"] + emptyMethodx [shape=circle,label="x"] + emptyMethodbb0 [label="0|{0: // label|1: // line number information|2: RETURN }"] + + emptyMethode -> emptyMethodbb0 + emptyMethodbb0 -> emptyMethodx +} + + subgraph fieldReadMethod { + + node [shape=record] + fieldReadMethode [shape=circle,label="e",xlabel="fieldReadMethod"] + fieldReadMethodx [shape=circle,label="x"] + fieldReadMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 0|3: GETFIELD ExampleClass.field Ljava/lang/String;|4: ARETURN }"] + + fieldReadMethode -> fieldReadMethodbb0 + fieldReadMethodbb0 -> fieldReadMethodx +} + + subgraph fieldWriteMethod { + + node [shape=record] + fieldWriteMethode [shape=circle,label="e",xlabel="fieldWriteMethod"] + fieldWriteMethodx [shape=circle,label="x"] + fieldWriteMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 0|3: ALOAD 1|4: PUTFIELD ExampleClass.field Ljava/lang/String;|5: // label|6: // line number information|7: RETURN }"] + + fieldWriteMethode -> fieldWriteMethodbb0 + fieldWriteMethodbb0 -> fieldWriteMethodx +} + + subgraph forEachArrayMethod { + + node [shape=record] + forEachArrayMethode [shape=circle,label="e",xlabel="forEachArrayMethod"] + forEachArrayMethodx [shape=circle,label="x"] + forEachArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ALOAD 1|7: ASTORE 3|8: ALOAD 3|9: ARRAYLENGTH |10: ISTORE 4|11: ICONST_0 |12: ISTORE 5}"] + forEachArrayMethodbb13 [label="13|{13: // label|14: // stack frame map|15: ILOAD 5|16: ILOAD 4|17: IF_ICMPGE 29}"] + forEachArrayMethodbb18 [label="18|{18: ALOAD 3|19: ILOAD 5|20: AALOAD |21: ASTORE 6|22: // label|23: // line number information|24: IINC 2 1|25: // label|26: // line number information|27: IINC 5 1|28: GOTO 13}"] + forEachArrayMethodbb29 [label="29|{29: // label|30: // line number information|31: // stack frame map|32: ILOAD 2|33: IRETURN }"] + + forEachArrayMethode -> forEachArrayMethodbb0 + forEachArrayMethodbb0 -> forEachArrayMethodbb13 + forEachArrayMethodbb13 -> forEachArrayMethodbb18 + forEachArrayMethodbb29 -> forEachArrayMethodx + forEachArrayMethodbb18 -> forEachArrayMethodbb13 [label="T"] + forEachArrayMethodbb13 -> forEachArrayMethodbb29 [label="T"] +} + + subgraph forEachCollectionMethod { + + node [shape=record] + forEachCollectionMethode [shape=circle,label="e",xlabel="forEachCollectionMethod"] + forEachCollectionMethodx [shape=circle,label="x"] + forEachCollectionMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ALOAD 1|7: INVOKEINTERFACE java/util/Set.iterator ()Ljava/util/Iterator;|8: ASTORE 3}"] + forEachCollectionMethodbb9 [label="9|{9: // label|10: // stack frame map|11: ALOAD 3|12: INVOKEINTERFACE java/util/Iterator.hasNext ()Z|13: IFEQ 24}"] + forEachCollectionMethodbb14 [label="14|{14: ALOAD 3|15: INVOKEINTERFACE java/util/Iterator.next ()Ljava/lang/Object;|16: CHECKCAST java/lang/String|17: ASTORE 4|18: // label|19: // line number information|20: IINC 2 1|21: // label|22: // line number information|23: GOTO 9}"] + forEachCollectionMethodbb24 [label="24|{24: // label|25: // line number information|26: // stack frame map|27: ILOAD 2|28: IRETURN }"] + + forEachCollectionMethode -> forEachCollectionMethodbb0 + forEachCollectionMethodbb0 -> forEachCollectionMethodbb9 + forEachCollectionMethodbb9 -> forEachCollectionMethodbb14 + forEachCollectionMethodbb24 -> forEachCollectionMethodx + forEachCollectionMethodbb14 -> forEachCollectionMethodbb9 [label="T"] + forEachCollectionMethodbb9 -> forEachCollectionMethodbb24 [label="T"] +} + + subgraph forEver { + + node [shape=record] + forEvere [shape=circle,label="e",xlabel="forEver"] + forEvere [shape=circle,label="e",xlabel="forEver"] + forEverbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2}"] + forEverbb4 [label="4|{4: // label|5: // stack frame map|6: IINC 2 1|7: GOTO 4}"] + + forEvere -> forEverbb0 + forEverbb0 -> forEverbb4 + forEverbb4 -> forEverbb4 [label="T"] +} + + subgraph forMethod { + + node [shape=record] + forMethode [shape=circle,label="e",xlabel="forMethod"] + forMethodx [shape=circle,label="x"] + forMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ICONST_0 |7: ISTORE 3}"] + forMethodbb8 [label="8|{8: // label|9: // stack frame map|10: ILOAD 3|11: ILOAD 1|12: IF_ICMPGE 23}"] + forMethodbb13 [label="13|{13: // label|14: // line number information|15: ILOAD 2|16: ILOAD 3|17: IADD |18: ISTORE 2|19: // label|20: // line number information|21: IINC 1 1|22: GOTO 8}"] + forMethodbb23 [label="23|{23: // label|24: // line number information|25: // stack frame map|26: ILOAD 2|27: IRETURN }"] + + forMethode -> forMethodbb0 + forMethodbb0 -> forMethodbb8 + forMethodbb8 -> forMethodbb13 + forMethodbb23 -> forMethodx + forMethodbb13 -> forMethodbb8 [label="T"] + forMethodbb8 -> forMethodbb23 [label="T"] +} + + subgraph forWithBreakMethod { + + node [shape=record] + forWithBreakMethode [shape=circle,label="e",xlabel="forWithBreakMethod"] + forWithBreakMethodx [shape=circle,label="x"] + forWithBreakMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ICONST_0 |7: ISTORE 3}"] + forWithBreakMethodbb8 [label="8|{8: // label|9: // stack frame map|10: ILOAD 3|11: ILOAD 1|12: IF_ICMPGE 32}"] + forWithBreakMethodbb13 [label="13|{13: // label|14: // line number information|15: ILOAD 3|16: BIPUSH 10|17: IF_ICMPNE 21}"] + forWithBreakMethodbb18 [label="18|{18: // label|19: // line number information|20: GOTO 32}"] + forWithBreakMethodbb21 [label="21|{21: // label|22: // line number information|23: // stack frame map|24: ILOAD 2|25: ILOAD 3|26: IADD |27: ISTORE 2|28: // label|29: // line number information|30: IINC 3 1|31: GOTO 8}"] + forWithBreakMethodbb32 [label="32|{32: // label|33: // line number information|34: // stack frame map|35: ILOAD 2|36: IRETURN }"] + + forWithBreakMethode -> forWithBreakMethodbb0 + forWithBreakMethodbb0 -> forWithBreakMethodbb8 + forWithBreakMethodbb8 -> forWithBreakMethodbb13 + forWithBreakMethodbb13 -> forWithBreakMethodbb18 + forWithBreakMethodbb32 -> forWithBreakMethodx + forWithBreakMethodbb21 -> forWithBreakMethodbb8 [label="T"] + forWithBreakMethodbb13 -> forWithBreakMethodbb21 [label="T"] + forWithBreakMethodbb8 -> forWithBreakMethodbb32 [label="T"] + forWithBreakMethodbb18 -> forWithBreakMethodbb32 [label="T"] +} + + subgraph forWithContinueMethod { + + node [shape=record] + forWithContinueMethode [shape=circle,label="e",xlabel="forWithContinueMethod"] + forWithContinueMethodx [shape=circle,label="x"] + forWithContinueMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ICONST_0 |7: ISTORE 3}"] + forWithContinueMethodbb8 [label="8|{8: // label|9: // stack frame map|10: ILOAD 3|11: ILOAD 1|12: IF_ICMPGE 33}"] + forWithContinueMethodbb13 [label="13|{13: // label|14: // line number information|15: ILOAD 3|16: BIPUSH 10|17: IF_ICMPNE 21}"] + forWithContinueMethodbb18 [label="18|{18: // label|19: // line number information|20: GOTO 28}"] + forWithContinueMethodbb21 [label="21|{21: // label|22: // line number information|23: // stack frame map|24: ILOAD 2|25: ILOAD 3|26: IADD |27: ISTORE 2}"] + forWithContinueMethodbb28 [label="28|{28: // label|29: // line number information|30: // stack frame map|31: IINC 3 1|32: GOTO 8}"] + forWithContinueMethodbb33 [label="33|{33: // label|34: // line number information|35: // stack frame map|36: ILOAD 2|37: IRETURN }"] + + forWithContinueMethode -> forWithContinueMethodbb0 + forWithContinueMethodbb0 -> forWithContinueMethodbb8 + forWithContinueMethodbb8 -> forWithContinueMethodbb13 + forWithContinueMethodbb13 -> forWithContinueMethodbb18 + forWithContinueMethodbb21 -> forWithContinueMethodbb28 + forWithContinueMethodbb33 -> forWithContinueMethodx + forWithContinueMethodbb28 -> forWithContinueMethodbb8 [label="T"] + forWithContinueMethodbb13 -> forWithContinueMethodbb21 [label="T"] + forWithContinueMethodbb18 -> forWithContinueMethodbb28 [label="T"] + forWithContinueMethodbb8 -> forWithContinueMethodbb33 [label="T"] +} + + subgraph ifElseMethod { + + node [shape=record] + ifElseMethode [shape=circle,label="e",xlabel="ifElseMethod"] + ifElseMethodx [shape=circle,label="x"] + ifElseMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ILOAD 1|7: IFLE 13}"] + ifElseMethodbb8 [label="8|{8: // label|9: // line number information|10: ICONST_0 |11: ISTORE 2|12: GOTO 18}"] + ifElseMethodbb13 [label="13|{13: // label|14: // line number information|15: // stack frame map|16: ILOAD 1|17: ISTORE 2}"] + ifElseMethodbb18 [label="18|{18: // label|19: // line number information|20: // stack frame map|21: ILOAD 2|22: IRETURN }"] + + ifElseMethode -> ifElseMethodbb0 + ifElseMethodbb0 -> ifElseMethodbb8 + ifElseMethodbb13 -> ifElseMethodbb18 + ifElseMethodbb18 -> ifElseMethodx + ifElseMethodbb0 -> ifElseMethodbb13 [label="T"] + ifElseMethodbb8 -> ifElseMethodbb18 [label="T"] +} + + subgraph ifMethod { + + node [shape=record] + ifMethode [shape=circle,label="e",xlabel="ifMethod"] + ifMethodx [shape=circle,label="x"] + ifMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ILOAD 1|7: IFGE 12}"] + ifMethodbb8 [label="8|{8: // label|9: // line number information|10: ICONST_1 |11: ISTORE 2}"] + ifMethodbb12 [label="12|{12: // label|13: // line number information|14: // stack frame map|15: ILOAD 2|16: IRETURN }"] + + ifMethode -> ifMethodbb0 + ifMethodbb0 -> ifMethodbb8 + ifMethodbb8 -> ifMethodbb12 + ifMethodbb12 -> ifMethodx + ifMethodbb0 -> ifMethodbb12 [label="T"] +} + + subgraph instanceCallMethod { + + node [shape=record] + instanceCallMethode [shape=circle,label="e",xlabel="instanceCallMethod"] + instanceCallMethodx [shape=circle,label="x"] + instanceCallMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: INVOKEVIRTUAL ExampleClass.instanceCallTarget ()V|4: // label|5: // line number information|6: ICONST_2 |7: IRETURN }"] + + instanceCallMethode -> instanceCallMethodbb0 + instanceCallMethodbb0 -> instanceCallMethodx +} + + subgraph instanceCallTarget { + + node [shape=record] + instanceCallTargete [shape=circle,label="e",xlabel="instanceCallTarget"] + instanceCallTargetx [shape=circle,label="x"] + instanceCallTargetbb0 [label="0|{0: // label|1: // line number information|2: RETURN }"] + + instanceCallTargete -> instanceCallTargetbb0 + instanceCallTargetbb0 -> instanceCallTargetx +} + + subgraph interfaceCallMethod { + + node [shape=record] + interfaceCallMethode [shape=circle,label="e",xlabel="interfaceCallMethod"] + interfaceCallMethodx [shape=circle,label="x"] + interfaceCallMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: INVOKEINTERFACE ExampleClass$Interface.interfaceCallTarget ()V|4: // label|5: // line number information|6: ICONST_2 |7: IRETURN }"] + + interfaceCallMethode -> interfaceCallMethodbb0 + interfaceCallMethodbb0 -> interfaceCallMethodx +} + + subgraph nestedFor { + + node [shape=record] + nestedFore [shape=circle,label="e",xlabel="nestedFor"] + nestedForx [shape=circle,label="x"] + nestedForbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ICONST_0 |7: ISTORE 3}"] + nestedForbb8 [label="8|{8: // label|9: // stack frame map|10: ILOAD 3|11: ILOAD 1|12: IF_ICMPGE 37}"] + nestedForbb13 [label="13|{13: // label|14: // line number information|15: ICONST_0 |16: ISTORE 4}"] + nestedForbb17 [label="17|{17: // label|18: // stack frame map|19: ILOAD 4|20: ILOAD 3|21: IF_ICMPGE 32}"] + nestedForbb22 [label="22|{22: // label|23: // line number information|24: ILOAD 2|25: ILOAD 4|26: IADD |27: ISTORE 2|28: // label|29: // line number information|30: IINC 4 1|31: GOTO 17}"] + nestedForbb32 [label="32|{32: // label|33: // line number information|34: // stack frame map|35: IINC 3 1|36: GOTO 8}"] + nestedForbb37 [label="37|{37: // label|38: // line number information|39: // stack frame map|40: ILOAD 2|41: IRETURN }"] + + nestedFore -> nestedForbb0 + nestedForbb0 -> nestedForbb8 + nestedForbb8 -> nestedForbb13 + nestedForbb13 -> nestedForbb17 + nestedForbb17 -> nestedForbb22 + nestedForbb37 -> nestedForx + nestedForbb32 -> nestedForbb8 [label="T"] + nestedForbb22 -> nestedForbb17 [label="T"] + nestedForbb17 -> nestedForbb32 [label="T"] + nestedForbb8 -> nestedForbb37 [label="T"] +} + + subgraph nonShortCircuitMethod { + + node [shape=record] + nonShortCircuitMethode [shape=circle,label="e",xlabel="nonShortCircuitMethod"] + nonShortCircuitMethodx [shape=circle,label="x"] + nonShortCircuitMethodbb0 [label="0|{0: // label|1: // line number information|2: ILOAD 1|3: ILOAD 2|4: IF_ICMPLE 7}"] + nonShortCircuitMethodbb5 [label="5|{5: ICONST_1 |6: GOTO 10}"] + nonShortCircuitMethodbb7 [label="7|{7: // label|8: // stack frame map|9: ICONST_0 }"] + nonShortCircuitMethodbb10 [label="10|{10: // label|11: // stack frame map|12: ILOAD 1|13: ILOAD 3|14: IF_ICMPGE 17}"] + nonShortCircuitMethodbb15 [label="15|{15: ICONST_1 |16: GOTO 20}"] + nonShortCircuitMethodbb17 [label="17|{17: // label|18: // stack frame map|19: ICONST_0 }"] + nonShortCircuitMethodbb20 [label="20|{20: // label|21: // stack frame map|22: IAND |23: IFEQ 28}"] + nonShortCircuitMethodbb24 [label="24|{24: // label|25: // line number information|26: ICONST_1 |27: IRETURN }"] + nonShortCircuitMethodbb28 [label="28|{28: // label|29: // line number information|30: // stack frame map|31: ICONST_0 |32: IRETURN }"] + + nonShortCircuitMethode -> nonShortCircuitMethodbb0 + nonShortCircuitMethodbb0 -> nonShortCircuitMethodbb5 + nonShortCircuitMethodbb7 -> nonShortCircuitMethodbb10 + nonShortCircuitMethodbb10 -> nonShortCircuitMethodbb15 + nonShortCircuitMethodbb17 -> nonShortCircuitMethodbb20 + nonShortCircuitMethodbb20 -> nonShortCircuitMethodbb24 + nonShortCircuitMethodbb24 -> nonShortCircuitMethodx + nonShortCircuitMethodbb24 -> nonShortCircuitMethodbb28 + nonShortCircuitMethodbb28 -> nonShortCircuitMethodx + nonShortCircuitMethodbb0 -> nonShortCircuitMethodbb7 [label="T"] + nonShortCircuitMethodbb5 -> nonShortCircuitMethodbb10 [label="T"] + nonShortCircuitMethodbb10 -> nonShortCircuitMethodbb17 [label="T"] + nonShortCircuitMethodbb15 -> nonShortCircuitMethodbb20 [label="T"] + nonShortCircuitMethodbb20 -> nonShortCircuitMethodbb28 [label="T"] +} + + subgraph privateInstanceCallMethod { + + node [shape=record] + privateInstanceCallMethode [shape=circle,label="e",xlabel="privateInstanceCallMethod"] + privateInstanceCallMethodx [shape=circle,label="x"] + privateInstanceCallMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: INVOKESPECIAL ExampleClass.privateInstanceCallTarget ()V|4: // label|5: // line number information|6: ICONST_2 |7: IRETURN }"] + + privateInstanceCallMethode -> privateInstanceCallMethodbb0 + privateInstanceCallMethodbb0 -> privateInstanceCallMethodx +} + + subgraph privateInstanceCallTarget { + + node [shape=record] + privateInstanceCallTargete [shape=circle,label="e",xlabel="privateInstanceCallTarget"] + privateInstanceCallTargetx [shape=circle,label="x"] + privateInstanceCallTargetbb0 [label="0|{0: // label|1: // line number information|2: RETURN }"] + + privateInstanceCallTargete -> privateInstanceCallTargetbb0 + privateInstanceCallTargetbb0 -> privateInstanceCallTargetx +} + + subgraph shortCircuitMethod { + + node [shape=record] + shortCircuitMethode [shape=circle,label="e",xlabel="shortCircuitMethod"] + shortCircuitMethodx [shape=circle,label="x"] + shortCircuitMethodbb0 [label="0|{0: // label|1: // line number information|2: ILOAD 1|3: ILOAD 2|4: IF_ICMPLE 12}"] + shortCircuitMethodbb5 [label="5|{5: ILOAD 1|6: ILOAD 3|7: IF_ICMPGE 12}"] + shortCircuitMethodbb8 [label="8|{8: // label|9: // line number information|10: ICONST_1 |11: IRETURN }"] + shortCircuitMethodbb12 [label="12|{12: // label|13: // line number information|14: // stack frame map|15: ICONST_0 |16: IRETURN }"] + + shortCircuitMethode -> shortCircuitMethodbb0 + shortCircuitMethodbb0 -> shortCircuitMethodbb5 + shortCircuitMethodbb5 -> shortCircuitMethodbb8 + shortCircuitMethodbb8 -> shortCircuitMethodx + shortCircuitMethodbb8 -> shortCircuitMethodbb12 + shortCircuitMethodbb12 -> shortCircuitMethodx + shortCircuitMethodbb0 -> shortCircuitMethodbb12 [label="T"] + shortCircuitMethodbb5 -> shortCircuitMethodbb12 [label="T"] +} + + subgraph staticCallMethod { + + node [shape=record] + staticCallMethode [shape=circle,label="e",xlabel="staticCallMethod"] + staticCallMethodx [shape=circle,label="x"] + staticCallMethodbb0 [label="0|{0: // label|1: // line number information|2: INVOKESTATIC ExampleClass.staticCallTarget ()V|3: // label|4: // line number information|5: ICONST_2 |6: IRETURN }"] + + staticCallMethode -> staticCallMethodbb0 + staticCallMethodbb0 -> staticCallMethodx +} + + subgraph staticCallTarget { + + node [shape=record] + staticCallTargete [shape=circle,label="e",xlabel="staticCallTarget"] + staticCallTargetx [shape=circle,label="x"] + staticCallTargetbb0 [label="0|{0: // label|1: // line number information|2: RETURN }"] + + staticCallTargete -> staticCallTargetbb0 + staticCallTargetbb0 -> staticCallTargetx +} + + subgraph staticFieldReadMethod { + + node [shape=record] + staticFieldReadMethode [shape=circle,label="e",xlabel="staticFieldReadMethod"] + staticFieldReadMethodx [shape=circle,label="x"] + staticFieldReadMethodbb0 [label="0|{0: // label|1: // line number information|2: GETSTATIC ExampleClass.staticField Ljava/lang/String;|3: ARETURN }"] + + staticFieldReadMethode -> staticFieldReadMethodbb0 + staticFieldReadMethodbb0 -> staticFieldReadMethodx +} + + subgraph staticFieldWriteMethod { + + node [shape=record] + staticFieldWriteMethode [shape=circle,label="e",xlabel="staticFieldWriteMethod"] + staticFieldWriteMethodx [shape=circle,label="x"] + staticFieldWriteMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: PUTSTATIC ExampleClass.staticField Ljava/lang/String;|4: // label|5: // line number information|6: RETURN }"] + + staticFieldWriteMethode -> staticFieldWriteMethodbb0 + staticFieldWriteMethodbb0 -> staticFieldWriteMethodx +} + + subgraph switchMethod { + + node [shape=record] + switchMethode [shape=circle,label="e",xlabel="switchMethod"] + switchMethodx [shape=circle,label="x"] + switchMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ILOAD 1|7: TABLESWITCH 0: 8, 1: 14, 2: 20, default: 26}"] + switchMethodbb8 [label="8|{8: // label|9: // line number information|10: // stack frame map|11: ICONST_0 |12: ISTORE 2|13: GOTO 31}"] + switchMethodbb14 [label="14|{14: // label|15: // line number information|16: // stack frame map|17: ICONST_1 |18: ISTORE 2|19: GOTO 31}"] + switchMethodbb20 [label="20|{20: // label|21: // line number information|22: // stack frame map|23: ICONST_2 |24: ISTORE 2|25: GOTO 31}"] + switchMethodbb26 [label="26|{26: // label|27: // line number information|28: // stack frame map|29: ICONST_M1 |30: ISTORE 2}"] + switchMethodbb31 [label="31|{31: // label|32: // line number information|33: // stack frame map|34: ILOAD 2|35: IRETURN }"] + + switchMethode -> switchMethodbb0 + switchMethodbb26 -> switchMethodbb31 + switchMethodbb31 -> switchMethodx + switchMethodbb0 -> switchMethodbb8 [label="0"] + switchMethodbb0 -> switchMethodbb14 [label="1"] + switchMethodbb0 -> switchMethodbb20 [label="2"] + switchMethodbb0 -> switchMethodbb26 [label="default"] + switchMethodbb8 -> switchMethodbb31 [label="T"] + switchMethodbb14 -> switchMethodbb31 [label="T"] + switchMethodbb20 -> switchMethodbb31 [label="T"] +} + + subgraph switchMethod2 { + + node [shape=record] + switchMethod2e [shape=circle,label="e",xlabel="switchMethod2"] + switchMethod2x [shape=circle,label="x"] + switchMethod2bb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ILOAD 1|7: LOOKUPSWITCH 0: 8, 1000: 14, 2000: 20, default: 26}"] + switchMethod2bb8 [label="8|{8: // label|9: // line number information|10: // stack frame map|11: ICONST_0 |12: ISTORE 2|13: GOTO 31}"] + switchMethod2bb14 [label="14|{14: // label|15: // line number information|16: // stack frame map|17: ICONST_1 |18: ISTORE 2|19: GOTO 31}"] + switchMethod2bb20 [label="20|{20: // label|21: // line number information|22: // stack frame map|23: ICONST_2 |24: ISTORE 2|25: GOTO 31}"] + switchMethod2bb26 [label="26|{26: // label|27: // line number information|28: // stack frame map|29: ICONST_M1 |30: ISTORE 2}"] + switchMethod2bb31 [label="31|{31: // label|32: // line number information|33: // stack frame map|34: ILOAD 2|35: IRETURN }"] + + switchMethod2e -> switchMethod2bb0 + switchMethod2bb26 -> switchMethod2bb31 + switchMethod2bb31 -> switchMethod2x + switchMethod2bb0 -> switchMethod2bb8 [label="0"] + switchMethod2bb0 -> switchMethod2bb14 [label="1000"] + switchMethod2bb0 -> switchMethod2bb20 [label="2000"] + switchMethod2bb0 -> switchMethod2bb26 [label="default"] + switchMethod2bb8 -> switchMethod2bb31 [label="T"] + switchMethod2bb14 -> switchMethod2bb31 [label="T"] + switchMethod2bb20 -> switchMethod2bb31 [label="T"] +} + + subgraph whileMethod { + + node [shape=record] + whileMethode [shape=circle,label="e",xlabel="whileMethod"] + whileMethodx [shape=circle,label="x"] + whileMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2}"] + whileMethodbb4 [label="4|{4: // label|5: // line number information|6: // stack frame map|7: ILOAD 1|8: IFLE 19}"] + whileMethodbb9 [label="9|{9: // label|10: // line number information|11: ILOAD 2|12: ILOAD 1|13: IADD |14: ISTORE 2|15: // label|16: // line number information|17: IINC 1 -1|18: GOTO 4}"] + whileMethodbb19 [label="19|{19: // label|20: // line number information|21: // stack frame map|22: ILOAD 2|23: IRETURN }"] + + whileMethode -> whileMethodbb0 + whileMethodbb0 -> whileMethodbb4 + whileMethodbb4 -> whileMethodbb9 + whileMethodbb19 -> whileMethodx + whileMethodbb9 -> whileMethodbb4 [label="T"] + whileMethodbb4 -> whileMethodbb19 [label="T"] +} + + subgraph whileTrueMethod { + + node [shape=record] + whileTrueMethode [shape=circle,label="e",xlabel="whileTrueMethod"] + whileTrueMethode [shape=circle,label="e",xlabel="whileTrueMethod"] + whileTrueMethodbb0 [label="0|{0: // label|1: // line number information|2: // stack frame map|3: IINC 1 1|4: GOTO 0}"] + + whileTrueMethode -> whileTrueMethodbb0 + whileTrueMethodbb0 -> whileTrueMethodbb0 [label="T"] +} + +} diff --git a/test-output/all.pdf b/test-output/all.pdf index 8491671..c4d1f98 100644 Binary files a/test-output/all.pdf and b/test-output/all.pdf differ diff --git a/test-output/alloc2Of3dArrayMethod.dot b/test-output/alloc2Of3dArrayMethod.dot index 671d54e..0f8ee30 100644 --- a/test-output/alloc2Of3dArrayMethod.dot +++ b/test-output/alloc2Of3dArrayMethod.dot @@ -1,11 +1,10 @@ digraph alloc2Of3dArrayMethod { - label="alloc2Of3dArrayMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_2 |3: ICONST_3 |4: MULTIANEWARRAY [[[I 2|5: ARETURN }"] + alloc2Of3dArrayMethode [shape=circle,label="e",xlabel="alloc2Of3dArrayMethod"] + alloc2Of3dArrayMethodx [shape=circle,label="x"] + alloc2Of3dArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_2 |3: ICONST_3 |4: MULTIANEWARRAY [[[I 2|5: ARETURN }"] - e -> bb0 - bb0 -> x + alloc2Of3dArrayMethode -> alloc2Of3dArrayMethodbb0 + alloc2Of3dArrayMethodbb0 -> alloc2Of3dArrayMethodx } diff --git a/test-output/alloc2dArrayMethod.dot b/test-output/alloc2dArrayMethod.dot index fd4494e..d9210a2 100644 --- a/test-output/alloc2dArrayMethod.dot +++ b/test-output/alloc2dArrayMethod.dot @@ -1,11 +1,10 @@ digraph alloc2dArrayMethod { - label="alloc2dArrayMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_2 |3: ICONST_3 |4: MULTIANEWARRAY [[I 2|5: ARETURN }"] + alloc2dArrayMethode [shape=circle,label="e",xlabel="alloc2dArrayMethod"] + alloc2dArrayMethodx [shape=circle,label="x"] + alloc2dArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_2 |3: ICONST_3 |4: MULTIANEWARRAY [[I 2|5: ARETURN }"] - e -> bb0 - bb0 -> x + alloc2dArrayMethode -> alloc2dArrayMethodbb0 + alloc2dArrayMethodbb0 -> alloc2dArrayMethodx } diff --git a/test-output/allocAndInit2dArrayMethod.dot b/test-output/allocAndInit2dArrayMethod.dot index 8eec586..425e512 100644 --- a/test-output/allocAndInit2dArrayMethod.dot +++ b/test-output/allocAndInit2dArrayMethod.dot @@ -1,11 +1,10 @@ digraph allocAndInit2dArrayMethod { - label="allocAndInit2dArrayMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_1 |3: ANEWARRAY [I|4: DUP |5: ICONST_0 |6: ICONST_1 |7: NEWARRAY T_INT|8: DUP |9: ICONST_0 |10: ICONST_1 |11: IASTORE |12: AASTORE |13: ARETURN }"] + allocAndInit2dArrayMethode [shape=circle,label="e",xlabel="allocAndInit2dArrayMethod"] + allocAndInit2dArrayMethodx [shape=circle,label="x"] + allocAndInit2dArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_1 |3: ANEWARRAY [I|4: DUP |5: ICONST_0 |6: ICONST_1 |7: NEWARRAY T_INT|8: DUP |9: ICONST_0 |10: ICONST_1 |11: IASTORE |12: AASTORE |13: ARETURN }"] - e -> bb0 - bb0 -> x + allocAndInit2dArrayMethode -> allocAndInit2dArrayMethodbb0 + allocAndInit2dArrayMethodbb0 -> allocAndInit2dArrayMethodx } diff --git a/test-output/allocAndInitIntArrayMethod.dot b/test-output/allocAndInitIntArrayMethod.dot index 7cff1b5..4303ece 100644 --- a/test-output/allocAndInitIntArrayMethod.dot +++ b/test-output/allocAndInitIntArrayMethod.dot @@ -1,11 +1,10 @@ digraph allocAndInitIntArrayMethod { - label="allocAndInitIntArrayMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_2 |3: NEWARRAY T_INT|4: DUP |5: ICONST_0 |6: ICONST_1 |7: IASTORE |8: DUP |9: ICONST_1 |10: ICONST_2 |11: IASTORE |12: ARETURN }"] + allocAndInitIntArrayMethode [shape=circle,label="e",xlabel="allocAndInitIntArrayMethod"] + allocAndInitIntArrayMethodx [shape=circle,label="x"] + allocAndInitIntArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_2 |3: NEWARRAY T_INT|4: DUP |5: ICONST_0 |6: ICONST_1 |7: IASTORE |8: DUP |9: ICONST_1 |10: ICONST_2 |11: IASTORE |12: ARETURN }"] - e -> bb0 - bb0 -> x + allocAndInitIntArrayMethode -> allocAndInitIntArrayMethodbb0 + allocAndInitIntArrayMethodbb0 -> allocAndInitIntArrayMethodx } diff --git a/test-output/allocAndInitObjectArrayMethod.dot b/test-output/allocAndInitObjectArrayMethod.dot index 7e66631..2f14ed1 100644 --- a/test-output/allocAndInitObjectArrayMethod.dot +++ b/test-output/allocAndInitObjectArrayMethod.dot @@ -1,11 +1,10 @@ digraph allocAndInitObjectArrayMethod { - label="allocAndInitObjectArrayMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_2 |3: ANEWARRAY java/lang/Object|4: DUP |5: ICONST_0 |6: LDC 1|7: AASTORE |8: DUP |9: ICONST_1 |10: LDC 2|11: AASTORE |12: ARETURN }"] + allocAndInitObjectArrayMethode [shape=circle,label="e",xlabel="allocAndInitObjectArrayMethod"] + allocAndInitObjectArrayMethodx [shape=circle,label="x"] + allocAndInitObjectArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_2 |3: ANEWARRAY java/lang/Object|4: DUP |5: ICONST_0 |6: LDC 1|7: AASTORE |8: DUP |9: ICONST_1 |10: LDC 2|11: AASTORE |12: ARETURN }"] - e -> bb0 - bb0 -> x + allocAndInitObjectArrayMethode -> allocAndInitObjectArrayMethodbb0 + allocAndInitObjectArrayMethodbb0 -> allocAndInitObjectArrayMethodx } diff --git a/test-output/allocIncomplete2dArrayMethod.dot b/test-output/allocIncomplete2dArrayMethod.dot index 4be865e..d11621a 100644 --- a/test-output/allocIncomplete2dArrayMethod.dot +++ b/test-output/allocIncomplete2dArrayMethod.dot @@ -1,11 +1,10 @@ digraph allocIncomplete2dArrayMethod { - label="allocIncomplete2dArrayMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_2 |3: ANEWARRAY [I|4: ARETURN }"] + allocIncomplete2dArrayMethode [shape=circle,label="e",xlabel="allocIncomplete2dArrayMethod"] + allocIncomplete2dArrayMethodx [shape=circle,label="x"] + allocIncomplete2dArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_2 |3: ANEWARRAY [I|4: ARETURN }"] - e -> bb0 - bb0 -> x + allocIncomplete2dArrayMethode -> allocIncomplete2dArrayMethodbb0 + allocIncomplete2dArrayMethodbb0 -> allocIncomplete2dArrayMethodx } diff --git a/test-output/allocIntArrayMethod.dot b/test-output/allocIntArrayMethod.dot index 3870d39..aa3a494 100644 --- a/test-output/allocIntArrayMethod.dot +++ b/test-output/allocIntArrayMethod.dot @@ -1,11 +1,10 @@ digraph allocIntArrayMethod { - label="allocIntArrayMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_3 |3: NEWARRAY T_INT|4: ARETURN }"] + allocIntArrayMethode [shape=circle,label="e",xlabel="allocIntArrayMethod"] + allocIntArrayMethodx [shape=circle,label="x"] + allocIntArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_3 |3: NEWARRAY T_INT|4: ARETURN }"] - e -> bb0 - bb0 -> x + allocIntArrayMethode -> allocIntArrayMethodbb0 + allocIntArrayMethodbb0 -> allocIntArrayMethodx } diff --git a/test-output/allocObjectArrayMethod.dot b/test-output/allocObjectArrayMethod.dot index 4339049..62973e7 100644 --- a/test-output/allocObjectArrayMethod.dot +++ b/test-output/allocObjectArrayMethod.dot @@ -1,11 +1,10 @@ digraph allocObjectArrayMethod { - label="allocObjectArrayMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_3 |3: ANEWARRAY java/lang/Object|4: ARETURN }"] + allocObjectArrayMethode [shape=circle,label="e",xlabel="allocObjectArrayMethod"] + allocObjectArrayMethodx [shape=circle,label="x"] + allocObjectArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_3 |3: ANEWARRAY java/lang/Object|4: ARETURN }"] - e -> bb0 - bb0 -> x + allocObjectArrayMethode -> allocObjectArrayMethodbb0 + allocObjectArrayMethodbb0 -> allocObjectArrayMethodx } diff --git a/test-output/allocObjectMethod.dot b/test-output/allocObjectMethod.dot index 3362c01..243f905 100644 --- a/test-output/allocObjectMethod.dot +++ b/test-output/allocObjectMethod.dot @@ -1,11 +1,10 @@ digraph allocObjectMethod { - label="allocObjectMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: NEW java/lang/Object|3: DUP |4: INVOKESPECIAL java/lang/Object. ()V|5: ARETURN }"] + allocObjectMethode [shape=circle,label="e",xlabel="allocObjectMethod"] + allocObjectMethodx [shape=circle,label="x"] + allocObjectMethodbb0 [label="0|{0: // label|1: // line number information|2: NEW java/lang/Object|3: DUP |4: INVOKESPECIAL java/lang/Object. ()V|5: ARETURN }"] - e -> bb0 - bb0 -> x + allocObjectMethode -> allocObjectMethodbb0 + allocObjectMethodbb0 -> allocObjectMethodx } diff --git a/test-output/arrayLengthMethod.dot b/test-output/arrayLengthMethod.dot index db26714..0894f77 100644 --- a/test-output/arrayLengthMethod.dot +++ b/test-output/arrayLengthMethod.dot @@ -1,11 +1,10 @@ digraph arrayLengthMethod { - label="arrayLengthMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: ARRAYLENGTH |4: IRETURN }"] + arrayLengthMethode [shape=circle,label="e",xlabel="arrayLengthMethod"] + arrayLengthMethodx [shape=circle,label="x"] + arrayLengthMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: ARRAYLENGTH |4: IRETURN }"] - e -> bb0 - bb0 -> x + arrayLengthMethode -> arrayLengthMethodbb0 + arrayLengthMethodbb0 -> arrayLengthMethodx } diff --git a/test-output/arrayReadMethod.dot b/test-output/arrayReadMethod.dot index 28fc7c6..9f00262 100644 --- a/test-output/arrayReadMethod.dot +++ b/test-output/arrayReadMethod.dot @@ -1,11 +1,10 @@ digraph arrayReadMethod { - label="arrayReadMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: ICONST_0 |4: AALOAD |5: ARETURN }"] + arrayReadMethode [shape=circle,label="e",xlabel="arrayReadMethod"] + arrayReadMethodx [shape=circle,label="x"] + arrayReadMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: ICONST_0 |4: AALOAD |5: ARETURN }"] - e -> bb0 - bb0 -> x + arrayReadMethode -> arrayReadMethodbb0 + arrayReadMethodbb0 -> arrayReadMethodx } diff --git a/test-output/arrayWriteMethod.dot b/test-output/arrayWriteMethod.dot index 59de2a0..7300308 100644 --- a/test-output/arrayWriteMethod.dot +++ b/test-output/arrayWriteMethod.dot @@ -1,11 +1,10 @@ digraph arrayWriteMethod { - label="arrayWriteMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: ICONST_0 |4: ALOAD 2|5: AASTORE |6: // label|7: // line number information|8: RETURN }"] + arrayWriteMethode [shape=circle,label="e",xlabel="arrayWriteMethod"] + arrayWriteMethodx [shape=circle,label="x"] + arrayWriteMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: ICONST_0 |4: ALOAD 2|5: AASTORE |6: // label|7: // line number information|8: RETURN }"] - e -> bb0 - bb0 -> x + arrayWriteMethode -> arrayWriteMethodbb0 + arrayWriteMethodbb0 -> arrayWriteMethodx } diff --git a/test-output/condMethod.dot b/test-output/condMethod.dot index 40ec62b..7930be2 100644 --- a/test-output/condMethod.dot +++ b/test-output/condMethod.dot @@ -1,18 +1,17 @@ digraph condMethod { - label="condMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ILOAD 1|3: ILOAD 2|4: IF_ICMPLE 7}"] - bb5 [label="5|{5: ILOAD 1|6: GOTO 10}"] - bb7 [label="7|{7: // label|8: // stack frame map|9: ILOAD 2}"] - bb10 [label="10|{10: // label|11: // stack frame map|12: IRETURN }"] + condMethode [shape=circle,label="e",xlabel="condMethod"] + condMethodx [shape=circle,label="x"] + condMethodbb0 [label="0|{0: // label|1: // line number information|2: ILOAD 1|3: ILOAD 2|4: IF_ICMPLE 7}"] + condMethodbb5 [label="5|{5: ILOAD 1|6: GOTO 10}"] + condMethodbb7 [label="7|{7: // label|8: // stack frame map|9: ILOAD 2}"] + condMethodbb10 [label="10|{10: // label|11: // stack frame map|12: IRETURN }"] - e -> bb0 - bb0 -> bb5 - bb7 -> bb10 - bb10 -> x - bb0 -> bb7 [label="T"] - bb5 -> bb10 [label="T"] + condMethode -> condMethodbb0 + condMethodbb0 -> condMethodbb5 + condMethodbb7 -> condMethodbb10 + condMethodbb10 -> condMethodx + condMethodbb0 -> condMethodbb7 [label="T"] + condMethodbb5 -> condMethodbb10 [label="T"] } diff --git a/test-output/doWhileMethod.dot b/test-output/doWhileMethod.dot index eefa2c0..02e6115 100644 --- a/test-output/doWhileMethod.dot +++ b/test-output/doWhileMethod.dot @@ -1,16 +1,15 @@ digraph doWhileMethod { - label="doWhileMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2}"] - bb4 [label="4|{4: // label|5: // line number information|6: // stack frame map|7: ILOAD 2|8: ILOAD 1|9: IADD |10: ISTORE 2|11: // label|12: // line number information|13: IINC 1 -1|14: // label|15: // line number information|16: ILOAD 1|17: IFGT 4}"] - bb18 [label="18|{18: // label|19: // line number information|20: ILOAD 2|21: IRETURN }"] + doWhileMethode [shape=circle,label="e",xlabel="doWhileMethod"] + doWhileMethodx [shape=circle,label="x"] + doWhileMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2}"] + doWhileMethodbb4 [label="4|{4: // label|5: // line number information|6: // stack frame map|7: ILOAD 2|8: ILOAD 1|9: IADD |10: ISTORE 2|11: // label|12: // line number information|13: IINC 1 -1|14: // label|15: // line number information|16: ILOAD 1|17: IFGT 4}"] + doWhileMethodbb18 [label="18|{18: // label|19: // line number information|20: ILOAD 2|21: IRETURN }"] - e -> bb0 - bb0 -> bb4 - bb4 -> bb18 - bb18 -> x - bb4 -> bb4 [label="T"] + doWhileMethode -> doWhileMethodbb0 + doWhileMethodbb0 -> doWhileMethodbb4 + doWhileMethodbb4 -> doWhileMethodbb18 + doWhileMethodbb18 -> doWhileMethodx + doWhileMethodbb4 -> doWhileMethodbb4 [label="T"] } diff --git a/test-output/doWhileTrue.dot b/test-output/doWhileTrue.dot index 91220c1..e79e266 100644 --- a/test-output/doWhileTrue.dot +++ b/test-output/doWhileTrue.dot @@ -1,11 +1,10 @@ digraph doWhileTrue { - label="doWhileTrue"; node [shape=record] - e [shape=circle,label="e"] - e [shape=circle,label="e"] - bb0 [label="0|{0: // label|1: // line number information|2: // stack frame map|3: IINC 1 1|4: // label|5: // line number information|6: GOTO 0}"] + doWhileTruee [shape=circle,label="e",xlabel="doWhileTrue"] + doWhileTruee [shape=circle,label="e",xlabel="doWhileTrue"] + doWhileTruebb0 [label="0|{0: // label|1: // line number information|2: // stack frame map|3: IINC 1 1|4: // label|5: // line number information|6: GOTO 0}"] - e -> bb0 - bb0 -> bb0 [label="T"] + doWhileTruee -> doWhileTruebb0 + doWhileTruebb0 -> doWhileTruebb0 [label="T"] } diff --git a/test-output/emptyMethod.dot b/test-output/emptyMethod.dot index b85c7b2..f8d96fa 100644 --- a/test-output/emptyMethod.dot +++ b/test-output/emptyMethod.dot @@ -1,11 +1,10 @@ digraph emptyMethod { - label="emptyMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: RETURN }"] + emptyMethode [shape=circle,label="e",xlabel="emptyMethod"] + emptyMethodx [shape=circle,label="x"] + emptyMethodbb0 [label="0|{0: // label|1: // line number information|2: RETURN }"] - e -> bb0 - bb0 -> x + emptyMethode -> emptyMethodbb0 + emptyMethodbb0 -> emptyMethodx } diff --git a/test-output/fieldReadMethod.dot b/test-output/fieldReadMethod.dot index fbdde10..1fa6d66 100644 --- a/test-output/fieldReadMethod.dot +++ b/test-output/fieldReadMethod.dot @@ -1,11 +1,10 @@ digraph fieldReadMethod { - label="fieldReadMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ALOAD 0|3: GETFIELD ExampleClass.field Ljava/lang/String;|4: ARETURN }"] + fieldReadMethode [shape=circle,label="e",xlabel="fieldReadMethod"] + fieldReadMethodx [shape=circle,label="x"] + fieldReadMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 0|3: GETFIELD ExampleClass.field Ljava/lang/String;|4: ARETURN }"] - e -> bb0 - bb0 -> x + fieldReadMethode -> fieldReadMethodbb0 + fieldReadMethodbb0 -> fieldReadMethodx } diff --git a/test-output/fieldWriteMethod.dot b/test-output/fieldWriteMethod.dot index 21da341..d49f1c1 100644 --- a/test-output/fieldWriteMethod.dot +++ b/test-output/fieldWriteMethod.dot @@ -1,11 +1,10 @@ digraph fieldWriteMethod { - label="fieldWriteMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ALOAD 0|3: ALOAD 1|4: PUTFIELD ExampleClass.field Ljava/lang/String;|5: // label|6: // line number information|7: RETURN }"] + fieldWriteMethode [shape=circle,label="e",xlabel="fieldWriteMethod"] + fieldWriteMethodx [shape=circle,label="x"] + fieldWriteMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 0|3: ALOAD 1|4: PUTFIELD ExampleClass.field Ljava/lang/String;|5: // label|6: // line number information|7: RETURN }"] - e -> bb0 - bb0 -> x + fieldWriteMethode -> fieldWriteMethodbb0 + fieldWriteMethodbb0 -> fieldWriteMethodx } diff --git a/test-output/forEachArrayMethod.dot b/test-output/forEachArrayMethod.dot index 7cb1489..edb06ea 100644 --- a/test-output/forEachArrayMethod.dot +++ b/test-output/forEachArrayMethod.dot @@ -1,18 +1,17 @@ digraph forEachArrayMethod { - label="forEachArrayMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ALOAD 1|7: ASTORE 3|8: ALOAD 3|9: ARRAYLENGTH |10: ISTORE 4|11: ICONST_0 |12: ISTORE 5}"] - bb13 [label="13|{13: // label|14: // stack frame map|15: ILOAD 5|16: ILOAD 4|17: IF_ICMPGE 29}"] - bb18 [label="18|{18: ALOAD 3|19: ILOAD 5|20: AALOAD |21: ASTORE 6|22: // label|23: // line number information|24: IINC 2 1|25: // label|26: // line number information|27: IINC 5 1|28: GOTO 13}"] - bb29 [label="29|{29: // label|30: // line number information|31: // stack frame map|32: ILOAD 2|33: IRETURN }"] + forEachArrayMethode [shape=circle,label="e",xlabel="forEachArrayMethod"] + forEachArrayMethodx [shape=circle,label="x"] + forEachArrayMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ALOAD 1|7: ASTORE 3|8: ALOAD 3|9: ARRAYLENGTH |10: ISTORE 4|11: ICONST_0 |12: ISTORE 5}"] + forEachArrayMethodbb13 [label="13|{13: // label|14: // stack frame map|15: ILOAD 5|16: ILOAD 4|17: IF_ICMPGE 29}"] + forEachArrayMethodbb18 [label="18|{18: ALOAD 3|19: ILOAD 5|20: AALOAD |21: ASTORE 6|22: // label|23: // line number information|24: IINC 2 1|25: // label|26: // line number information|27: IINC 5 1|28: GOTO 13}"] + forEachArrayMethodbb29 [label="29|{29: // label|30: // line number information|31: // stack frame map|32: ILOAD 2|33: IRETURN }"] - e -> bb0 - bb0 -> bb13 - bb13 -> bb18 - bb29 -> x - bb18 -> bb13 [label="T"] - bb13 -> bb29 [label="T"] + forEachArrayMethode -> forEachArrayMethodbb0 + forEachArrayMethodbb0 -> forEachArrayMethodbb13 + forEachArrayMethodbb13 -> forEachArrayMethodbb18 + forEachArrayMethodbb29 -> forEachArrayMethodx + forEachArrayMethodbb18 -> forEachArrayMethodbb13 [label="T"] + forEachArrayMethodbb13 -> forEachArrayMethodbb29 [label="T"] } diff --git a/test-output/forEachCollectionMethod.dot b/test-output/forEachCollectionMethod.dot index cf91a87..3a7fe32 100644 --- a/test-output/forEachCollectionMethod.dot +++ b/test-output/forEachCollectionMethod.dot @@ -1,18 +1,17 @@ digraph forEachCollectionMethod { - label="forEachCollectionMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ALOAD 1|7: INVOKEINTERFACE java/util/Set.iterator ()Ljava/util/Iterator;|8: ASTORE 3}"] - bb9 [label="9|{9: // label|10: // stack frame map|11: ALOAD 3|12: INVOKEINTERFACE java/util/Iterator.hasNext ()Z|13: IFEQ 24}"] - bb14 [label="14|{14: ALOAD 3|15: INVOKEINTERFACE java/util/Iterator.next ()Ljava/lang/Object;|16: CHECKCAST java/lang/String|17: ASTORE 4|18: // label|19: // line number information|20: IINC 2 1|21: // label|22: // line number information|23: GOTO 9}"] - bb24 [label="24|{24: // label|25: // line number information|26: // stack frame map|27: ILOAD 2|28: IRETURN }"] + forEachCollectionMethode [shape=circle,label="e",xlabel="forEachCollectionMethod"] + forEachCollectionMethodx [shape=circle,label="x"] + forEachCollectionMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ALOAD 1|7: INVOKEINTERFACE java/util/Set.iterator ()Ljava/util/Iterator;|8: ASTORE 3}"] + forEachCollectionMethodbb9 [label="9|{9: // label|10: // stack frame map|11: ALOAD 3|12: INVOKEINTERFACE java/util/Iterator.hasNext ()Z|13: IFEQ 24}"] + forEachCollectionMethodbb14 [label="14|{14: ALOAD 3|15: INVOKEINTERFACE java/util/Iterator.next ()Ljava/lang/Object;|16: CHECKCAST java/lang/String|17: ASTORE 4|18: // label|19: // line number information|20: IINC 2 1|21: // label|22: // line number information|23: GOTO 9}"] + forEachCollectionMethodbb24 [label="24|{24: // label|25: // line number information|26: // stack frame map|27: ILOAD 2|28: IRETURN }"] - e -> bb0 - bb0 -> bb9 - bb9 -> bb14 - bb24 -> x - bb14 -> bb9 [label="T"] - bb9 -> bb24 [label="T"] + forEachCollectionMethode -> forEachCollectionMethodbb0 + forEachCollectionMethodbb0 -> forEachCollectionMethodbb9 + forEachCollectionMethodbb9 -> forEachCollectionMethodbb14 + forEachCollectionMethodbb24 -> forEachCollectionMethodx + forEachCollectionMethodbb14 -> forEachCollectionMethodbb9 [label="T"] + forEachCollectionMethodbb9 -> forEachCollectionMethodbb24 [label="T"] } diff --git a/test-output/forEver.dot b/test-output/forEver.dot index e517f58..0ab7877 100644 --- a/test-output/forEver.dot +++ b/test-output/forEver.dot @@ -1,13 +1,12 @@ digraph forEver { - label="forEver"; node [shape=record] - e [shape=circle,label="e"] - e [shape=circle,label="e"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2}"] - bb4 [label="4|{4: // label|5: // stack frame map|6: IINC 2 1|7: GOTO 4}"] + forEvere [shape=circle,label="e",xlabel="forEver"] + forEvere [shape=circle,label="e",xlabel="forEver"] + forEverbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2}"] + forEverbb4 [label="4|{4: // label|5: // stack frame map|6: IINC 2 1|7: GOTO 4}"] - e -> bb0 - bb0 -> bb4 - bb4 -> bb4 [label="T"] + forEvere -> forEverbb0 + forEverbb0 -> forEverbb4 + forEverbb4 -> forEverbb4 [label="T"] } diff --git a/test-output/forMethod.dot b/test-output/forMethod.dot index 6233028..9e62177 100644 --- a/test-output/forMethod.dot +++ b/test-output/forMethod.dot @@ -1,18 +1,17 @@ digraph forMethod { - label="forMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ICONST_0 |7: ISTORE 3}"] - bb8 [label="8|{8: // label|9: // stack frame map|10: ILOAD 3|11: ILOAD 1|12: IF_ICMPGE 23}"] - bb13 [label="13|{13: // label|14: // line number information|15: ILOAD 2|16: ILOAD 3|17: IADD |18: ISTORE 2|19: // label|20: // line number information|21: IINC 1 1|22: GOTO 8}"] - bb23 [label="23|{23: // label|24: // line number information|25: // stack frame map|26: ILOAD 2|27: IRETURN }"] + forMethode [shape=circle,label="e",xlabel="forMethod"] + forMethodx [shape=circle,label="x"] + forMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ICONST_0 |7: ISTORE 3}"] + forMethodbb8 [label="8|{8: // label|9: // stack frame map|10: ILOAD 3|11: ILOAD 1|12: IF_ICMPGE 23}"] + forMethodbb13 [label="13|{13: // label|14: // line number information|15: ILOAD 2|16: ILOAD 3|17: IADD |18: ISTORE 2|19: // label|20: // line number information|21: IINC 1 1|22: GOTO 8}"] + forMethodbb23 [label="23|{23: // label|24: // line number information|25: // stack frame map|26: ILOAD 2|27: IRETURN }"] - e -> bb0 - bb0 -> bb8 - bb8 -> bb13 - bb23 -> x - bb13 -> bb8 [label="T"] - bb8 -> bb23 [label="T"] + forMethode -> forMethodbb0 + forMethodbb0 -> forMethodbb8 + forMethodbb8 -> forMethodbb13 + forMethodbb23 -> forMethodx + forMethodbb13 -> forMethodbb8 [label="T"] + forMethodbb8 -> forMethodbb23 [label="T"] } diff --git a/test-output/forWithBreakMethod.dot b/test-output/forWithBreakMethod.dot index 349f0ce..a0850c0 100644 --- a/test-output/forWithBreakMethod.dot +++ b/test-output/forWithBreakMethod.dot @@ -1,23 +1,22 @@ digraph forWithBreakMethod { - label="forWithBreakMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ICONST_0 |7: ISTORE 3}"] - bb8 [label="8|{8: // label|9: // stack frame map|10: ILOAD 3|11: ILOAD 1|12: IF_ICMPGE 32}"] - bb13 [label="13|{13: // label|14: // line number information|15: ILOAD 3|16: BIPUSH 10|17: IF_ICMPNE 21}"] - bb18 [label="18|{18: // label|19: // line number information|20: GOTO 32}"] - bb21 [label="21|{21: // label|22: // line number information|23: // stack frame map|24: ILOAD 2|25: ILOAD 3|26: IADD |27: ISTORE 2|28: // label|29: // line number information|30: IINC 3 1|31: GOTO 8}"] - bb32 [label="32|{32: // label|33: // line number information|34: // stack frame map|35: ILOAD 2|36: IRETURN }"] + forWithBreakMethode [shape=circle,label="e",xlabel="forWithBreakMethod"] + forWithBreakMethodx [shape=circle,label="x"] + forWithBreakMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ICONST_0 |7: ISTORE 3}"] + forWithBreakMethodbb8 [label="8|{8: // label|9: // stack frame map|10: ILOAD 3|11: ILOAD 1|12: IF_ICMPGE 32}"] + forWithBreakMethodbb13 [label="13|{13: // label|14: // line number information|15: ILOAD 3|16: BIPUSH 10|17: IF_ICMPNE 21}"] + forWithBreakMethodbb18 [label="18|{18: // label|19: // line number information|20: GOTO 32}"] + forWithBreakMethodbb21 [label="21|{21: // label|22: // line number information|23: // stack frame map|24: ILOAD 2|25: ILOAD 3|26: IADD |27: ISTORE 2|28: // label|29: // line number information|30: IINC 3 1|31: GOTO 8}"] + forWithBreakMethodbb32 [label="32|{32: // label|33: // line number information|34: // stack frame map|35: ILOAD 2|36: IRETURN }"] - e -> bb0 - bb0 -> bb8 - bb8 -> bb13 - bb13 -> bb18 - bb32 -> x - bb21 -> bb8 [label="T"] - bb13 -> bb21 [label="T"] - bb8 -> bb32 [label="T"] - bb18 -> bb32 [label="T"] + forWithBreakMethode -> forWithBreakMethodbb0 + forWithBreakMethodbb0 -> forWithBreakMethodbb8 + forWithBreakMethodbb8 -> forWithBreakMethodbb13 + forWithBreakMethodbb13 -> forWithBreakMethodbb18 + forWithBreakMethodbb32 -> forWithBreakMethodx + forWithBreakMethodbb21 -> forWithBreakMethodbb8 [label="T"] + forWithBreakMethodbb13 -> forWithBreakMethodbb21 [label="T"] + forWithBreakMethodbb8 -> forWithBreakMethodbb32 [label="T"] + forWithBreakMethodbb18 -> forWithBreakMethodbb32 [label="T"] } diff --git a/test-output/forWithContinueMethod.dot b/test-output/forWithContinueMethod.dot index 245949a..2ae27be 100644 --- a/test-output/forWithContinueMethod.dot +++ b/test-output/forWithContinueMethod.dot @@ -1,25 +1,24 @@ digraph forWithContinueMethod { - label="forWithContinueMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ICONST_0 |7: ISTORE 3}"] - bb8 [label="8|{8: // label|9: // stack frame map|10: ILOAD 3|11: ILOAD 1|12: IF_ICMPGE 33}"] - bb13 [label="13|{13: // label|14: // line number information|15: ILOAD 3|16: BIPUSH 10|17: IF_ICMPNE 21}"] - bb18 [label="18|{18: // label|19: // line number information|20: GOTO 28}"] - bb21 [label="21|{21: // label|22: // line number information|23: // stack frame map|24: ILOAD 2|25: ILOAD 3|26: IADD |27: ISTORE 2}"] - bb28 [label="28|{28: // label|29: // line number information|30: // stack frame map|31: IINC 3 1|32: GOTO 8}"] - bb33 [label="33|{33: // label|34: // line number information|35: // stack frame map|36: ILOAD 2|37: IRETURN }"] + forWithContinueMethode [shape=circle,label="e",xlabel="forWithContinueMethod"] + forWithContinueMethodx [shape=circle,label="x"] + forWithContinueMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ICONST_0 |7: ISTORE 3}"] + forWithContinueMethodbb8 [label="8|{8: // label|9: // stack frame map|10: ILOAD 3|11: ILOAD 1|12: IF_ICMPGE 33}"] + forWithContinueMethodbb13 [label="13|{13: // label|14: // line number information|15: ILOAD 3|16: BIPUSH 10|17: IF_ICMPNE 21}"] + forWithContinueMethodbb18 [label="18|{18: // label|19: // line number information|20: GOTO 28}"] + forWithContinueMethodbb21 [label="21|{21: // label|22: // line number information|23: // stack frame map|24: ILOAD 2|25: ILOAD 3|26: IADD |27: ISTORE 2}"] + forWithContinueMethodbb28 [label="28|{28: // label|29: // line number information|30: // stack frame map|31: IINC 3 1|32: GOTO 8}"] + forWithContinueMethodbb33 [label="33|{33: // label|34: // line number information|35: // stack frame map|36: ILOAD 2|37: IRETURN }"] - e -> bb0 - bb0 -> bb8 - bb8 -> bb13 - bb13 -> bb18 - bb21 -> bb28 - bb33 -> x - bb28 -> bb8 [label="T"] - bb13 -> bb21 [label="T"] - bb18 -> bb28 [label="T"] - bb8 -> bb33 [label="T"] + forWithContinueMethode -> forWithContinueMethodbb0 + forWithContinueMethodbb0 -> forWithContinueMethodbb8 + forWithContinueMethodbb8 -> forWithContinueMethodbb13 + forWithContinueMethodbb13 -> forWithContinueMethodbb18 + forWithContinueMethodbb21 -> forWithContinueMethodbb28 + forWithContinueMethodbb33 -> forWithContinueMethodx + forWithContinueMethodbb28 -> forWithContinueMethodbb8 [label="T"] + forWithContinueMethodbb13 -> forWithContinueMethodbb21 [label="T"] + forWithContinueMethodbb18 -> forWithContinueMethodbb28 [label="T"] + forWithContinueMethodbb8 -> forWithContinueMethodbb33 [label="T"] } diff --git a/test-output/ifElseMethod.dot b/test-output/ifElseMethod.dot index 2385f04..f30eb28 100644 --- a/test-output/ifElseMethod.dot +++ b/test-output/ifElseMethod.dot @@ -1,18 +1,17 @@ digraph ifElseMethod { - label="ifElseMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ILOAD 1|7: IFLE 13}"] - bb8 [label="8|{8: // label|9: // line number information|10: ICONST_0 |11: ISTORE 2|12: GOTO 18}"] - bb13 [label="13|{13: // label|14: // line number information|15: // stack frame map|16: ILOAD 1|17: ISTORE 2}"] - bb18 [label="18|{18: // label|19: // line number information|20: // stack frame map|21: ILOAD 2|22: IRETURN }"] + ifElseMethode [shape=circle,label="e",xlabel="ifElseMethod"] + ifElseMethodx [shape=circle,label="x"] + ifElseMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ILOAD 1|7: IFLE 13}"] + ifElseMethodbb8 [label="8|{8: // label|9: // line number information|10: ICONST_0 |11: ISTORE 2|12: GOTO 18}"] + ifElseMethodbb13 [label="13|{13: // label|14: // line number information|15: // stack frame map|16: ILOAD 1|17: ISTORE 2}"] + ifElseMethodbb18 [label="18|{18: // label|19: // line number information|20: // stack frame map|21: ILOAD 2|22: IRETURN }"] - e -> bb0 - bb0 -> bb8 - bb13 -> bb18 - bb18 -> x - bb0 -> bb13 [label="T"] - bb8 -> bb18 [label="T"] + ifElseMethode -> ifElseMethodbb0 + ifElseMethodbb0 -> ifElseMethodbb8 + ifElseMethodbb13 -> ifElseMethodbb18 + ifElseMethodbb18 -> ifElseMethodx + ifElseMethodbb0 -> ifElseMethodbb13 [label="T"] + ifElseMethodbb8 -> ifElseMethodbb18 [label="T"] } diff --git a/test-output/ifMethod.dot b/test-output/ifMethod.dot index 40e0e82..da5c603 100644 --- a/test-output/ifMethod.dot +++ b/test-output/ifMethod.dot @@ -1,16 +1,15 @@ digraph ifMethod { - label="ifMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ILOAD 1|7: IFGE 12}"] - bb8 [label="8|{8: // label|9: // line number information|10: ICONST_1 |11: ISTORE 2}"] - bb12 [label="12|{12: // label|13: // line number information|14: // stack frame map|15: ILOAD 2|16: IRETURN }"] + ifMethode [shape=circle,label="e",xlabel="ifMethod"] + ifMethodx [shape=circle,label="x"] + ifMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ILOAD 1|7: IFGE 12}"] + ifMethodbb8 [label="8|{8: // label|9: // line number information|10: ICONST_1 |11: ISTORE 2}"] + ifMethodbb12 [label="12|{12: // label|13: // line number information|14: // stack frame map|15: ILOAD 2|16: IRETURN }"] - e -> bb0 - bb0 -> bb8 - bb8 -> bb12 - bb12 -> x - bb0 -> bb12 [label="T"] + ifMethode -> ifMethodbb0 + ifMethodbb0 -> ifMethodbb8 + ifMethodbb8 -> ifMethodbb12 + ifMethodbb12 -> ifMethodx + ifMethodbb0 -> ifMethodbb12 [label="T"] } diff --git a/test-output/instanceCallMethod.dot b/test-output/instanceCallMethod.dot index 3d534f2..9bc6122 100644 --- a/test-output/instanceCallMethod.dot +++ b/test-output/instanceCallMethod.dot @@ -1,11 +1,10 @@ digraph instanceCallMethod { - label="instanceCallMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: INVOKEVIRTUAL ExampleClass.instanceCallTarget ()V|4: // label|5: // line number information|6: ICONST_2 |7: IRETURN }"] + instanceCallMethode [shape=circle,label="e",xlabel="instanceCallMethod"] + instanceCallMethodx [shape=circle,label="x"] + instanceCallMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: INVOKEVIRTUAL ExampleClass.instanceCallTarget ()V|4: // label|5: // line number information|6: ICONST_2 |7: IRETURN }"] - e -> bb0 - bb0 -> x + instanceCallMethode -> instanceCallMethodbb0 + instanceCallMethodbb0 -> instanceCallMethodx } diff --git a/test-output/instanceCallTarget.dot b/test-output/instanceCallTarget.dot index b190488..69ed940 100644 --- a/test-output/instanceCallTarget.dot +++ b/test-output/instanceCallTarget.dot @@ -1,11 +1,10 @@ digraph instanceCallTarget { - label="instanceCallTarget"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: RETURN }"] + instanceCallTargete [shape=circle,label="e",xlabel="instanceCallTarget"] + instanceCallTargetx [shape=circle,label="x"] + instanceCallTargetbb0 [label="0|{0: // label|1: // line number information|2: RETURN }"] - e -> bb0 - bb0 -> x + instanceCallTargete -> instanceCallTargetbb0 + instanceCallTargetbb0 -> instanceCallTargetx } diff --git a/test-output/interfaceCallMethod.dot b/test-output/interfaceCallMethod.dot index ea008b2..6a57693 100644 --- a/test-output/interfaceCallMethod.dot +++ b/test-output/interfaceCallMethod.dot @@ -1,11 +1,10 @@ digraph interfaceCallMethod { - label="interfaceCallMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: INVOKEINTERFACE ExampleClass$Interface.interfaceCallTarget ()V|4: // label|5: // line number information|6: ICONST_2 |7: IRETURN }"] + interfaceCallMethode [shape=circle,label="e",xlabel="interfaceCallMethod"] + interfaceCallMethodx [shape=circle,label="x"] + interfaceCallMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: INVOKEINTERFACE ExampleClass$Interface.interfaceCallTarget ()V|4: // label|5: // line number information|6: ICONST_2 |7: IRETURN }"] - e -> bb0 - bb0 -> x + interfaceCallMethode -> interfaceCallMethodbb0 + interfaceCallMethodbb0 -> interfaceCallMethodx } diff --git a/test-output/nestedFor.dot b/test-output/nestedFor.dot index 44fc2d3..56071ee 100644 --- a/test-output/nestedFor.dot +++ b/test-output/nestedFor.dot @@ -1,25 +1,24 @@ digraph nestedFor { - label="nestedFor"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ICONST_0 |7: ISTORE 3}"] - bb8 [label="8|{8: // label|9: // stack frame map|10: ILOAD 3|11: ILOAD 1|12: IF_ICMPGE 37}"] - bb13 [label="13|{13: // label|14: // line number information|15: ICONST_0 |16: ISTORE 4}"] - bb17 [label="17|{17: // label|18: // stack frame map|19: ILOAD 4|20: ILOAD 3|21: IF_ICMPGE 32}"] - bb22 [label="22|{22: // label|23: // line number information|24: ILOAD 2|25: ILOAD 4|26: IADD |27: ISTORE 2|28: // label|29: // line number information|30: IINC 4 1|31: GOTO 17}"] - bb32 [label="32|{32: // label|33: // line number information|34: // stack frame map|35: IINC 3 1|36: GOTO 8}"] - bb37 [label="37|{37: // label|38: // line number information|39: // stack frame map|40: ILOAD 2|41: IRETURN }"] + nestedFore [shape=circle,label="e",xlabel="nestedFor"] + nestedForx [shape=circle,label="x"] + nestedForbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ICONST_0 |7: ISTORE 3}"] + nestedForbb8 [label="8|{8: // label|9: // stack frame map|10: ILOAD 3|11: ILOAD 1|12: IF_ICMPGE 37}"] + nestedForbb13 [label="13|{13: // label|14: // line number information|15: ICONST_0 |16: ISTORE 4}"] + nestedForbb17 [label="17|{17: // label|18: // stack frame map|19: ILOAD 4|20: ILOAD 3|21: IF_ICMPGE 32}"] + nestedForbb22 [label="22|{22: // label|23: // line number information|24: ILOAD 2|25: ILOAD 4|26: IADD |27: ISTORE 2|28: // label|29: // line number information|30: IINC 4 1|31: GOTO 17}"] + nestedForbb32 [label="32|{32: // label|33: // line number information|34: // stack frame map|35: IINC 3 1|36: GOTO 8}"] + nestedForbb37 [label="37|{37: // label|38: // line number information|39: // stack frame map|40: ILOAD 2|41: IRETURN }"] - e -> bb0 - bb0 -> bb8 - bb8 -> bb13 - bb13 -> bb17 - bb17 -> bb22 - bb37 -> x - bb32 -> bb8 [label="T"] - bb22 -> bb17 [label="T"] - bb17 -> bb32 [label="T"] - bb8 -> bb37 [label="T"] + nestedFore -> nestedForbb0 + nestedForbb0 -> nestedForbb8 + nestedForbb8 -> nestedForbb13 + nestedForbb13 -> nestedForbb17 + nestedForbb17 -> nestedForbb22 + nestedForbb37 -> nestedForx + nestedForbb32 -> nestedForbb8 [label="T"] + nestedForbb22 -> nestedForbb17 [label="T"] + nestedForbb17 -> nestedForbb32 [label="T"] + nestedForbb8 -> nestedForbb37 [label="T"] } diff --git a/test-output/nonShortCircuitMethod.dot b/test-output/nonShortCircuitMethod.dot index cc42448..50963c8 100644 --- a/test-output/nonShortCircuitMethod.dot +++ b/test-output/nonShortCircuitMethod.dot @@ -1,31 +1,30 @@ digraph nonShortCircuitMethod { - label="nonShortCircuitMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ILOAD 1|3: ILOAD 2|4: IF_ICMPLE 7}"] - bb5 [label="5|{5: ICONST_1 |6: GOTO 10}"] - bb7 [label="7|{7: // label|8: // stack frame map|9: ICONST_0 }"] - bb10 [label="10|{10: // label|11: // stack frame map|12: ILOAD 1|13: ILOAD 3|14: IF_ICMPGE 17}"] - bb15 [label="15|{15: ICONST_1 |16: GOTO 20}"] - bb17 [label="17|{17: // label|18: // stack frame map|19: ICONST_0 }"] - bb20 [label="20|{20: // label|21: // stack frame map|22: IAND |23: IFEQ 28}"] - bb24 [label="24|{24: // label|25: // line number information|26: ICONST_1 |27: IRETURN }"] - bb28 [label="28|{28: // label|29: // line number information|30: // stack frame map|31: ICONST_0 |32: IRETURN }"] + nonShortCircuitMethode [shape=circle,label="e",xlabel="nonShortCircuitMethod"] + nonShortCircuitMethodx [shape=circle,label="x"] + nonShortCircuitMethodbb0 [label="0|{0: // label|1: // line number information|2: ILOAD 1|3: ILOAD 2|4: IF_ICMPLE 7}"] + nonShortCircuitMethodbb5 [label="5|{5: ICONST_1 |6: GOTO 10}"] + nonShortCircuitMethodbb7 [label="7|{7: // label|8: // stack frame map|9: ICONST_0 }"] + nonShortCircuitMethodbb10 [label="10|{10: // label|11: // stack frame map|12: ILOAD 1|13: ILOAD 3|14: IF_ICMPGE 17}"] + nonShortCircuitMethodbb15 [label="15|{15: ICONST_1 |16: GOTO 20}"] + nonShortCircuitMethodbb17 [label="17|{17: // label|18: // stack frame map|19: ICONST_0 }"] + nonShortCircuitMethodbb20 [label="20|{20: // label|21: // stack frame map|22: IAND |23: IFEQ 28}"] + nonShortCircuitMethodbb24 [label="24|{24: // label|25: // line number information|26: ICONST_1 |27: IRETURN }"] + nonShortCircuitMethodbb28 [label="28|{28: // label|29: // line number information|30: // stack frame map|31: ICONST_0 |32: IRETURN }"] - e -> bb0 - bb0 -> bb5 - bb7 -> bb10 - bb10 -> bb15 - bb17 -> bb20 - bb20 -> bb24 - bb24 -> x - bb24 -> bb28 - bb28 -> x - bb0 -> bb7 [label="T"] - bb5 -> bb10 [label="T"] - bb10 -> bb17 [label="T"] - bb15 -> bb20 [label="T"] - bb20 -> bb28 [label="T"] + nonShortCircuitMethode -> nonShortCircuitMethodbb0 + nonShortCircuitMethodbb0 -> nonShortCircuitMethodbb5 + nonShortCircuitMethodbb7 -> nonShortCircuitMethodbb10 + nonShortCircuitMethodbb10 -> nonShortCircuitMethodbb15 + nonShortCircuitMethodbb17 -> nonShortCircuitMethodbb20 + nonShortCircuitMethodbb20 -> nonShortCircuitMethodbb24 + nonShortCircuitMethodbb24 -> nonShortCircuitMethodx + nonShortCircuitMethodbb24 -> nonShortCircuitMethodbb28 + nonShortCircuitMethodbb28 -> nonShortCircuitMethodx + nonShortCircuitMethodbb0 -> nonShortCircuitMethodbb7 [label="T"] + nonShortCircuitMethodbb5 -> nonShortCircuitMethodbb10 [label="T"] + nonShortCircuitMethodbb10 -> nonShortCircuitMethodbb17 [label="T"] + nonShortCircuitMethodbb15 -> nonShortCircuitMethodbb20 [label="T"] + nonShortCircuitMethodbb20 -> nonShortCircuitMethodbb28 [label="T"] } diff --git a/test-output/privateInstanceCallMethod.dot b/test-output/privateInstanceCallMethod.dot index a02673c..5361f83 100644 --- a/test-output/privateInstanceCallMethod.dot +++ b/test-output/privateInstanceCallMethod.dot @@ -1,11 +1,10 @@ digraph privateInstanceCallMethod { - label="privateInstanceCallMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: INVOKESPECIAL ExampleClass.privateInstanceCallTarget ()V|4: // label|5: // line number information|6: ICONST_2 |7: IRETURN }"] + privateInstanceCallMethode [shape=circle,label="e",xlabel="privateInstanceCallMethod"] + privateInstanceCallMethodx [shape=circle,label="x"] + privateInstanceCallMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: INVOKESPECIAL ExampleClass.privateInstanceCallTarget ()V|4: // label|5: // line number information|6: ICONST_2 |7: IRETURN }"] - e -> bb0 - bb0 -> x + privateInstanceCallMethode -> privateInstanceCallMethodbb0 + privateInstanceCallMethodbb0 -> privateInstanceCallMethodx } diff --git a/test-output/privateInstanceCallTarget.dot b/test-output/privateInstanceCallTarget.dot index 058ef84..a4f766b 100644 --- a/test-output/privateInstanceCallTarget.dot +++ b/test-output/privateInstanceCallTarget.dot @@ -1,11 +1,10 @@ digraph privateInstanceCallTarget { - label="privateInstanceCallTarget"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: RETURN }"] + privateInstanceCallTargete [shape=circle,label="e",xlabel="privateInstanceCallTarget"] + privateInstanceCallTargetx [shape=circle,label="x"] + privateInstanceCallTargetbb0 [label="0|{0: // label|1: // line number information|2: RETURN }"] - e -> bb0 - bb0 -> x + privateInstanceCallTargete -> privateInstanceCallTargetbb0 + privateInstanceCallTargetbb0 -> privateInstanceCallTargetx } diff --git a/test-output/shortCircuitMethod.dot b/test-output/shortCircuitMethod.dot index 3d84edb..5dea3b3 100644 --- a/test-output/shortCircuitMethod.dot +++ b/test-output/shortCircuitMethod.dot @@ -1,20 +1,19 @@ digraph shortCircuitMethod { - label="shortCircuitMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ILOAD 1|3: ILOAD 2|4: IF_ICMPLE 12}"] - bb5 [label="5|{5: ILOAD 1|6: ILOAD 3|7: IF_ICMPGE 12}"] - bb8 [label="8|{8: // label|9: // line number information|10: ICONST_1 |11: IRETURN }"] - bb12 [label="12|{12: // label|13: // line number information|14: // stack frame map|15: ICONST_0 |16: IRETURN }"] + shortCircuitMethode [shape=circle,label="e",xlabel="shortCircuitMethod"] + shortCircuitMethodx [shape=circle,label="x"] + shortCircuitMethodbb0 [label="0|{0: // label|1: // line number information|2: ILOAD 1|3: ILOAD 2|4: IF_ICMPLE 12}"] + shortCircuitMethodbb5 [label="5|{5: ILOAD 1|6: ILOAD 3|7: IF_ICMPGE 12}"] + shortCircuitMethodbb8 [label="8|{8: // label|9: // line number information|10: ICONST_1 |11: IRETURN }"] + shortCircuitMethodbb12 [label="12|{12: // label|13: // line number information|14: // stack frame map|15: ICONST_0 |16: IRETURN }"] - e -> bb0 - bb0 -> bb5 - bb5 -> bb8 - bb8 -> x - bb8 -> bb12 - bb12 -> x - bb0 -> bb12 [label="T"] - bb5 -> bb12 [label="T"] + shortCircuitMethode -> shortCircuitMethodbb0 + shortCircuitMethodbb0 -> shortCircuitMethodbb5 + shortCircuitMethodbb5 -> shortCircuitMethodbb8 + shortCircuitMethodbb8 -> shortCircuitMethodx + shortCircuitMethodbb8 -> shortCircuitMethodbb12 + shortCircuitMethodbb12 -> shortCircuitMethodx + shortCircuitMethodbb0 -> shortCircuitMethodbb12 [label="T"] + shortCircuitMethodbb5 -> shortCircuitMethodbb12 [label="T"] } diff --git a/test-output/staticCallMethod.dot b/test-output/staticCallMethod.dot index b004502..aa0072f 100644 --- a/test-output/staticCallMethod.dot +++ b/test-output/staticCallMethod.dot @@ -1,11 +1,10 @@ digraph staticCallMethod { - label="staticCallMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: INVOKESTATIC ExampleClass.staticCallTarget ()V|3: // label|4: // line number information|5: ICONST_2 |6: IRETURN }"] + staticCallMethode [shape=circle,label="e",xlabel="staticCallMethod"] + staticCallMethodx [shape=circle,label="x"] + staticCallMethodbb0 [label="0|{0: // label|1: // line number information|2: INVOKESTATIC ExampleClass.staticCallTarget ()V|3: // label|4: // line number information|5: ICONST_2 |6: IRETURN }"] - e -> bb0 - bb0 -> x + staticCallMethode -> staticCallMethodbb0 + staticCallMethodbb0 -> staticCallMethodx } diff --git a/test-output/staticCallTarget.dot b/test-output/staticCallTarget.dot index a2beb0e..2baf9ea 100644 --- a/test-output/staticCallTarget.dot +++ b/test-output/staticCallTarget.dot @@ -1,11 +1,10 @@ digraph staticCallTarget { - label="staticCallTarget"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: RETURN }"] + staticCallTargete [shape=circle,label="e",xlabel="staticCallTarget"] + staticCallTargetx [shape=circle,label="x"] + staticCallTargetbb0 [label="0|{0: // label|1: // line number information|2: RETURN }"] - e -> bb0 - bb0 -> x + staticCallTargete -> staticCallTargetbb0 + staticCallTargetbb0 -> staticCallTargetx } diff --git a/test-output/staticFieldReadMethod.dot b/test-output/staticFieldReadMethod.dot index c175b80..a9cd408 100644 --- a/test-output/staticFieldReadMethod.dot +++ b/test-output/staticFieldReadMethod.dot @@ -1,11 +1,10 @@ digraph staticFieldReadMethod { - label="staticFieldReadMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: GETSTATIC ExampleClass.staticField Ljava/lang/String;|3: ARETURN }"] + staticFieldReadMethode [shape=circle,label="e",xlabel="staticFieldReadMethod"] + staticFieldReadMethodx [shape=circle,label="x"] + staticFieldReadMethodbb0 [label="0|{0: // label|1: // line number information|2: GETSTATIC ExampleClass.staticField Ljava/lang/String;|3: ARETURN }"] - e -> bb0 - bb0 -> x + staticFieldReadMethode -> staticFieldReadMethodbb0 + staticFieldReadMethodbb0 -> staticFieldReadMethodx } diff --git a/test-output/staticFieldWriteMethod.dot b/test-output/staticFieldWriteMethod.dot index 6a99e8c..44e2ff9 100644 --- a/test-output/staticFieldWriteMethod.dot +++ b/test-output/staticFieldWriteMethod.dot @@ -1,11 +1,10 @@ digraph staticFieldWriteMethod { - label="staticFieldWriteMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: PUTSTATIC ExampleClass.staticField Ljava/lang/String;|4: // label|5: // line number information|6: RETURN }"] + staticFieldWriteMethode [shape=circle,label="e",xlabel="staticFieldWriteMethod"] + staticFieldWriteMethodx [shape=circle,label="x"] + staticFieldWriteMethodbb0 [label="0|{0: // label|1: // line number information|2: ALOAD 1|3: PUTSTATIC ExampleClass.staticField Ljava/lang/String;|4: // label|5: // line number information|6: RETURN }"] - e -> bb0 - bb0 -> x + staticFieldWriteMethode -> staticFieldWriteMethodbb0 + staticFieldWriteMethodbb0 -> staticFieldWriteMethodx } diff --git a/test-output/switchMethod.dot b/test-output/switchMethod.dot index eb4d363..ce8da9e 100644 --- a/test-output/switchMethod.dot +++ b/test-output/switchMethod.dot @@ -1,24 +1,23 @@ digraph switchMethod { - label="switchMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ILOAD 1|7: TABLESWITCH 0: 8, 1: 14, 2: 20, default: 26}"] - bb8 [label="8|{8: // label|9: // line number information|10: // stack frame map|11: ICONST_0 |12: ISTORE 2|13: GOTO 31}"] - bb14 [label="14|{14: // label|15: // line number information|16: // stack frame map|17: ICONST_1 |18: ISTORE 2|19: GOTO 31}"] - bb20 [label="20|{20: // label|21: // line number information|22: // stack frame map|23: ICONST_2 |24: ISTORE 2|25: GOTO 31}"] - bb26 [label="26|{26: // label|27: // line number information|28: // stack frame map|29: ICONST_M1 |30: ISTORE 2}"] - bb31 [label="31|{31: // label|32: // line number information|33: // stack frame map|34: ILOAD 2|35: IRETURN }"] + switchMethode [shape=circle,label="e",xlabel="switchMethod"] + switchMethodx [shape=circle,label="x"] + switchMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ILOAD 1|7: TABLESWITCH 0: 8, 1: 14, 2: 20, default: 26}"] + switchMethodbb8 [label="8|{8: // label|9: // line number information|10: // stack frame map|11: ICONST_0 |12: ISTORE 2|13: GOTO 31}"] + switchMethodbb14 [label="14|{14: // label|15: // line number information|16: // stack frame map|17: ICONST_1 |18: ISTORE 2|19: GOTO 31}"] + switchMethodbb20 [label="20|{20: // label|21: // line number information|22: // stack frame map|23: ICONST_2 |24: ISTORE 2|25: GOTO 31}"] + switchMethodbb26 [label="26|{26: // label|27: // line number information|28: // stack frame map|29: ICONST_M1 |30: ISTORE 2}"] + switchMethodbb31 [label="31|{31: // label|32: // line number information|33: // stack frame map|34: ILOAD 2|35: IRETURN }"] - e -> bb0 - bb26 -> bb31 - bb31 -> x - bb0 -> bb8 [label="0"] - bb0 -> bb14 [label="1"] - bb0 -> bb20 [label="2"] - bb0 -> bb26 [label="default"] - bb8 -> bb31 [label="T"] - bb14 -> bb31 [label="T"] - bb20 -> bb31 [label="T"] + switchMethode -> switchMethodbb0 + switchMethodbb26 -> switchMethodbb31 + switchMethodbb31 -> switchMethodx + switchMethodbb0 -> switchMethodbb8 [label="0"] + switchMethodbb0 -> switchMethodbb14 [label="1"] + switchMethodbb0 -> switchMethodbb20 [label="2"] + switchMethodbb0 -> switchMethodbb26 [label="default"] + switchMethodbb8 -> switchMethodbb31 [label="T"] + switchMethodbb14 -> switchMethodbb31 [label="T"] + switchMethodbb20 -> switchMethodbb31 [label="T"] } diff --git a/test-output/switchMethod2.dot b/test-output/switchMethod2.dot index 1565c59..ee0bd85 100644 --- a/test-output/switchMethod2.dot +++ b/test-output/switchMethod2.dot @@ -1,24 +1,23 @@ digraph switchMethod2 { - label="switchMethod2"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ILOAD 1|7: LOOKUPSWITCH 0: 8, 1000: 14, 2000: 20, default: 26}"] - bb8 [label="8|{8: // label|9: // line number information|10: // stack frame map|11: ICONST_0 |12: ISTORE 2|13: GOTO 31}"] - bb14 [label="14|{14: // label|15: // line number information|16: // stack frame map|17: ICONST_1 |18: ISTORE 2|19: GOTO 31}"] - bb20 [label="20|{20: // label|21: // line number information|22: // stack frame map|23: ICONST_2 |24: ISTORE 2|25: GOTO 31}"] - bb26 [label="26|{26: // label|27: // line number information|28: // stack frame map|29: ICONST_M1 |30: ISTORE 2}"] - bb31 [label="31|{31: // label|32: // line number information|33: // stack frame map|34: ILOAD 2|35: IRETURN }"] + switchMethod2e [shape=circle,label="e",xlabel="switchMethod2"] + switchMethod2x [shape=circle,label="x"] + switchMethod2bb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2|4: // label|5: // line number information|6: ILOAD 1|7: LOOKUPSWITCH 0: 8, 1000: 14, 2000: 20, default: 26}"] + switchMethod2bb8 [label="8|{8: // label|9: // line number information|10: // stack frame map|11: ICONST_0 |12: ISTORE 2|13: GOTO 31}"] + switchMethod2bb14 [label="14|{14: // label|15: // line number information|16: // stack frame map|17: ICONST_1 |18: ISTORE 2|19: GOTO 31}"] + switchMethod2bb20 [label="20|{20: // label|21: // line number information|22: // stack frame map|23: ICONST_2 |24: ISTORE 2|25: GOTO 31}"] + switchMethod2bb26 [label="26|{26: // label|27: // line number information|28: // stack frame map|29: ICONST_M1 |30: ISTORE 2}"] + switchMethod2bb31 [label="31|{31: // label|32: // line number information|33: // stack frame map|34: ILOAD 2|35: IRETURN }"] - e -> bb0 - bb26 -> bb31 - bb31 -> x - bb0 -> bb8 [label="0"] - bb0 -> bb14 [label="1000"] - bb0 -> bb20 [label="2000"] - bb0 -> bb26 [label="default"] - bb8 -> bb31 [label="T"] - bb14 -> bb31 [label="T"] - bb20 -> bb31 [label="T"] + switchMethod2e -> switchMethod2bb0 + switchMethod2bb26 -> switchMethod2bb31 + switchMethod2bb31 -> switchMethod2x + switchMethod2bb0 -> switchMethod2bb8 [label="0"] + switchMethod2bb0 -> switchMethod2bb14 [label="1000"] + switchMethod2bb0 -> switchMethod2bb20 [label="2000"] + switchMethod2bb0 -> switchMethod2bb26 [label="default"] + switchMethod2bb8 -> switchMethod2bb31 [label="T"] + switchMethod2bb14 -> switchMethod2bb31 [label="T"] + switchMethod2bb20 -> switchMethod2bb31 [label="T"] } diff --git a/test-output/whileMethod.dot b/test-output/whileMethod.dot index 832221b..dba900e 100644 --- a/test-output/whileMethod.dot +++ b/test-output/whileMethod.dot @@ -1,18 +1,17 @@ digraph whileMethod { - label="whileMethod"; node [shape=record] - e [shape=circle,label="e"] - x [shape=circle,label="x"] - bb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2}"] - bb4 [label="4|{4: // label|5: // line number information|6: // stack frame map|7: ILOAD 1|8: IFLE 19}"] - bb9 [label="9|{9: // label|10: // line number information|11: ILOAD 2|12: ILOAD 1|13: IADD |14: ISTORE 2|15: // label|16: // line number information|17: IINC 1 -1|18: GOTO 4}"] - bb19 [label="19|{19: // label|20: // line number information|21: // stack frame map|22: ILOAD 2|23: IRETURN }"] + whileMethode [shape=circle,label="e",xlabel="whileMethod"] + whileMethodx [shape=circle,label="x"] + whileMethodbb0 [label="0|{0: // label|1: // line number information|2: ICONST_0 |3: ISTORE 2}"] + whileMethodbb4 [label="4|{4: // label|5: // line number information|6: // stack frame map|7: ILOAD 1|8: IFLE 19}"] + whileMethodbb9 [label="9|{9: // label|10: // line number information|11: ILOAD 2|12: ILOAD 1|13: IADD |14: ISTORE 2|15: // label|16: // line number information|17: IINC 1 -1|18: GOTO 4}"] + whileMethodbb19 [label="19|{19: // label|20: // line number information|21: // stack frame map|22: ILOAD 2|23: IRETURN }"] - e -> bb0 - bb0 -> bb4 - bb4 -> bb9 - bb19 -> x - bb9 -> bb4 [label="T"] - bb4 -> bb19 [label="T"] + whileMethode -> whileMethodbb0 + whileMethodbb0 -> whileMethodbb4 + whileMethodbb4 -> whileMethodbb9 + whileMethodbb19 -> whileMethodx + whileMethodbb9 -> whileMethodbb4 [label="T"] + whileMethodbb4 -> whileMethodbb19 [label="T"] } diff --git a/test-output/whileTrueMethod.dot b/test-output/whileTrueMethod.dot index f0fb500..8a816b6 100644 --- a/test-output/whileTrueMethod.dot +++ b/test-output/whileTrueMethod.dot @@ -1,11 +1,10 @@ digraph whileTrueMethod { - label="whileTrueMethod"; node [shape=record] - e [shape=circle,label="e"] - e [shape=circle,label="e"] - bb0 [label="0|{0: // label|1: // line number information|2: // stack frame map|3: IINC 1 1|4: GOTO 0}"] + whileTrueMethode [shape=circle,label="e",xlabel="whileTrueMethod"] + whileTrueMethode [shape=circle,label="e",xlabel="whileTrueMethod"] + whileTrueMethodbb0 [label="0|{0: // label|1: // line number information|2: // stack frame map|3: IINC 1 1|4: GOTO 0}"] - e -> bb0 - bb0 -> bb0 [label="T"] + whileTrueMethode -> whileTrueMethodbb0 + whileTrueMethodbb0 -> whileTrueMethodbb0 [label="T"] }