diff --git a/.classpath b/.classpath
index 27faf72..c3a5258 100644
--- a/.classpath
+++ b/.classpath
@@ -2,19 +2,19 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.project b/.project
index e9d783a..e8e5cb4 100644
--- a/.project
+++ b/.project
@@ -14,4 +14,15 @@
org.eclipse.jdt.core.javanature
+
+
+ 1740856740019
+
+ 30
+
+ org.eclipse.core.resources.regexFilterMatcher
+ node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__
+
+
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=UTF-8
diff --git a/DemoAST.java b/DemoAST.java
new file mode 100644
index 0000000..f404bcb
--- /dev/null
+++ b/DemoAST.java
@@ -0,0 +1,19 @@
+
+public class DemoAST {
+ int bart(int x) { return x+1; }
+ int lisa(int x) { return x+2; }
+
+ int homer(int x) {
+ int y, a, b;
+
+ if(x>0) {
+ y = 0;
+ } else {
+ a = bart(1);
+ b = lisa(2);
+ y = a + b;
+ }
+ return y;
+ }
+
+}
diff --git a/bin/main/ASTGenerator.class b/bin/main/ASTGenerator.class
index 4d0e9c3..60bc1ef 100644
Binary files a/bin/main/ASTGenerator.class and b/bin/main/ASTGenerator.class differ
diff --git a/bin/main/ASTtoDOT.class b/bin/main/ASTtoDOT.class
index da24e0c..9112cbd 100644
Binary files a/bin/main/ASTtoDOT.class and b/bin/main/ASTtoDOT.class differ
diff --git a/bin/main/Main.class b/bin/main/Main.class
index a966787..64acbc3 100644
Binary files a/bin/main/Main.class and b/bin/main/Main.class differ
diff --git a/output/DemoAST.java_bart.dot b/output/DemoAST.java_bart.dot
new file mode 100644
index 0000000..c3217b7
--- /dev/null
+++ b/output/DemoAST.java_bart.dot
@@ -0,0 +1,24 @@
+digraph "DirectedGraph" {
+graph [label = "bart", labelloc=t, concentrate = true];
+"1686369710" [ label=<Method
Declaration
int bart(int x) ... } > type=31 startLineNumber=3 endLineNumber=3 ]
+"194706439" [ label=<Primitive
Type
int> type=39 startLineNumber=3 endLineNumber=3 ]
+"942518407" [ label=<Simple
Name
bart> type=42 startLineNumber=3 endLineNumber=3 ]
+"1943325854" [ label=<Single
Variable
Declaration
int x> type=44 startLineNumber=3 endLineNumber=3 ]
+"134310351" [ label=<Primitive
Type
int> type=39 startLineNumber=3 endLineNumber=3 ]
+"1411892748" [ label=<Simple
Name
x> type=42 startLineNumber=3 endLineNumber=3 ]
+"22805895" [ label=<Block
{ return x + 1 ... } > type=8 startLineNumber=3 endLineNumber=3 ]
+"1413378318" [ label=<Return
Statement
return x + 1; > type=41 startLineNumber=3 endLineNumber=3 ]
+"1475491159" [ label=<Infix
Expression
x + 1> type=27 startLineNumber=3 endLineNumber=3 ]
+"1024429571" [ label=<Simple
Name
x> type=42 startLineNumber=3 endLineNumber=3 ]
+"1667689440" [ label=<Number
Literal
1> type=34 startLineNumber=3 endLineNumber=3 ]
+"1686369710" -> "194706439"
+"1686369710" -> "942518407"
+"1686369710" -> "1943325854"
+"1943325854" -> "134310351"
+"1943325854" -> "1411892748"
+"1686369710" -> "22805895"
+"22805895" -> "1413378318"
+"1413378318" -> "1475491159"
+"1475491159" -> "1024429571"
+"1475491159" -> "1667689440"
+}
diff --git a/output/DemoAST.java_homer.dot b/output/DemoAST.java_homer.dot
new file mode 100644
index 0000000..3ffb8b6
--- /dev/null
+++ b/output/DemoAST.java_homer.dot
@@ -0,0 +1,92 @@
+digraph "DirectedGraph" {
+graph [label = "homer", labelloc=t, concentrate = true];
+"79290965" [ label=<Method
Declaration
int homer(int x ... } > type=31 startLineNumber=6 endLineNumber=17 ]
+"1582785598" [ label=<Primitive
Type
int> type=39 startLineNumber=6 endLineNumber=6 ]
+"322836221" [ label=<Simple
Name
homer> type=42 startLineNumber=6 endLineNumber=6 ]
+"1370651081" [ label=<Single
Variable
Declaration
int x> type=44 startLineNumber=6 endLineNumber=6 ]
+"450003680" [ label=<Primitive
Type
int> type=39 startLineNumber=6 endLineNumber=6 ]
+"2134991632" [ label=<Simple
Name
x> type=42 startLineNumber=6 endLineNumber=6 ]
+"480971771" [ label=<Block
{ int y, a, b; ... } > type=8 startLineNumber=6 endLineNumber=17 ]
+"1586845078" [ label=<Variable
Declaration
Statement
int y, a, b; > type=60 startLineNumber=7 endLineNumber=7 ]
+"1356728614" [ label=<Primitive
Type
int> type=39 startLineNumber=7 endLineNumber=7 ]
+"611563982" [ label=<Variable
Declaration
Fragment
y> type=59 startLineNumber=7 endLineNumber=7 ]
+"1615039080" [ label=<Simple
Name
y> type=42 startLineNumber=7 endLineNumber=7 ]
+"336484883" [ label=<Variable
Declaration
Fragment
a> type=59 startLineNumber=7 endLineNumber=7 ]
+"876213901" [ label=<Simple
Name
a> type=42 startLineNumber=7 endLineNumber=7 ]
+"230528013" [ label=<Variable
Declaration
Fragment
b> type=59 startLineNumber=7 endLineNumber=7 ]
+"1909546776" [ label=<Simple
Name
b> type=42 startLineNumber=7 endLineNumber=7 ]
+"392781299" [ label=<If
Statement
if (x > 0) { y ... } > type=25 startLineNumber=9 endLineNumber=15 ]
+"1822383117" [ label=<Infix
Expression
x > 0> type=27 startLineNumber=9 endLineNumber=9 ]
+"233021551" [ label=<Simple
Name
x> type=42 startLineNumber=9 endLineNumber=9 ]
+"1991313236" [ label=<Number
Literal
0> type=34 startLineNumber=9 endLineNumber=9 ]
+"736778932" [ label=<Block
{ y=0; } > type=8 startLineNumber=9 endLineNumber=11 ]
+"1032000752" [ label=<Expression
Statement
y=0; > type=21 startLineNumber=10 endLineNumber=10 ]
+"770911223" [ label=<Assignment
y=0> type=7 startLineNumber=10 endLineNumber=10 ]
+"1392906938" [ label=<Simple
Name
y> type=42 startLineNumber=10 endLineNumber=10 ]
+"708890004" [ label=<Number
Literal
0> type=34 startLineNumber=10 endLineNumber=10 ]
+"255944888" [ label=<Block
{ a=bart(1); ... } > type=8 startLineNumber=11 endLineNumber=15 ]
+"1004095028" [ label=<Expression
Statement
a=bart(1); > type=21 startLineNumber=12 endLineNumber=12 ]
+"1487470647" [ label=<Assignment
a=bart(1)> type=7 startLineNumber=12 endLineNumber=12 ]
+"1948863195" [ label=<Simple
Name
a> type=42 startLineNumber=12 endLineNumber=12 ]
+"1890187342" [ label=<Method
Invocation
bart(1)> type=32 startLineNumber=12 endLineNumber=12 ]
+"19986569" [ label=<Simple
Name
bart> type=42 startLineNumber=12 endLineNumber=12 ]
+"294184992" [ label=<Number
Literal
1> type=34 startLineNumber=12 endLineNumber=12 ]
+"793315160" [ label=<Expression
Statement
b=lisa(2); > type=21 startLineNumber=13 endLineNumber=13 ]
+"270397815" [ label=<Assignment
b=lisa(2)> type=7 startLineNumber=13 endLineNumber=13 ]
+"376416077" [ label=<Simple
Name
b> type=42 startLineNumber=13 endLineNumber=13 ]
+"1089504328" [ label=<Method
Invocation
lisa(2)> type=32 startLineNumber=13 endLineNumber=13 ]
+"660879561" [ label=<Simple
Name
lisa> type=42 startLineNumber=13 endLineNumber=13 ]
+"1485697819" [ label=<Number
Literal
2> type=34 startLineNumber=13 endLineNumber=13 ]
+"867398280" [ label=<Expression
Statement
y=a + b; > type=21 startLineNumber=14 endLineNumber=14 ]
+"2007331442" [ label=<Assignment
y=a + b> type=7 startLineNumber=14 endLineNumber=14 ]
+"1904324159" [ label=<Simple
Name
y> type=42 startLineNumber=14 endLineNumber=14 ]
+"1176735295" [ label=<Infix
Expression
a + b> type=27 startLineNumber=14 endLineNumber=14 ]
+"1848415041" [ label=<Simple
Name
a> type=42 startLineNumber=14 endLineNumber=14 ]
+"843467284" [ label=<Simple
Name
b> type=42 startLineNumber=14 endLineNumber=14 ]
+"1313532469" [ label=<Return
Statement
return y; > type=41 startLineNumber=16 endLineNumber=16 ]
+"339924917" [ label=<Simple
Name
y> type=42 startLineNumber=16 endLineNumber=16 ]
+"79290965" -> "1582785598"
+"79290965" -> "322836221"
+"79290965" -> "1370651081"
+"1370651081" -> "450003680"
+"1370651081" -> "2134991632"
+"79290965" -> "480971771"
+"480971771" -> "1586845078"
+"1586845078" -> "1356728614"
+"1586845078" -> "611563982"
+"611563982" -> "1615039080"
+"1586845078" -> "336484883"
+"336484883" -> "876213901"
+"1586845078" -> "230528013"
+"230528013" -> "1909546776"
+"480971771" -> "392781299"
+"392781299" -> "1822383117"
+"1822383117" -> "233021551"
+"1822383117" -> "1991313236"
+"392781299" -> "736778932"
+"736778932" -> "1032000752"
+"1032000752" -> "770911223"
+"770911223" -> "1392906938"
+"770911223" -> "708890004"
+"392781299" -> "255944888"
+"255944888" -> "1004095028"
+"1004095028" -> "1487470647"
+"1487470647" -> "1948863195"
+"1487470647" -> "1890187342"
+"1890187342" -> "19986569"
+"1890187342" -> "294184992"
+"255944888" -> "793315160"
+"793315160" -> "270397815"
+"270397815" -> "376416077"
+"270397815" -> "1089504328"
+"1089504328" -> "660879561"
+"1089504328" -> "1485697819"
+"255944888" -> "867398280"
+"867398280" -> "2007331442"
+"2007331442" -> "1904324159"
+"2007331442" -> "1176735295"
+"1176735295" -> "1848415041"
+"1176735295" -> "843467284"
+"480971771" -> "1313532469"
+"1313532469" -> "339924917"
+}
diff --git a/output/DemoAST.java_lisa.dot b/output/DemoAST.java_lisa.dot
new file mode 100644
index 0000000..f51929f
--- /dev/null
+++ b/output/DemoAST.java_lisa.dot
@@ -0,0 +1,24 @@
+digraph "DirectedGraph" {
+graph [label = "lisa", labelloc=t, concentrate = true];
+"1157058691" [ label=<Method
Declaration
int lisa(int x) ... } > type=31 startLineNumber=4 endLineNumber=4 ]
+"40472007" [ label=<Primitive
Type
int> type=39 startLineNumber=4 endLineNumber=4 ]
+"1138193439" [ label=<Simple
Name
lisa> type=42 startLineNumber=4 endLineNumber=4 ]
+"398110318" [ label=<Single
Variable
Declaration
int x> type=44 startLineNumber=4 endLineNumber=4 ]
+"1765250898" [ label=<Primitive
Type
int> type=39 startLineNumber=4 endLineNumber=4 ]
+"670971910" [ label=<Simple
Name
x> type=42 startLineNumber=4 endLineNumber=4 ]
+"1601292138" [ label=<Block
{ return x + 2 ... } > type=8 startLineNumber=4 endLineNumber=4 ]
+"494586676" [ label=<Return
Statement
return x + 2; > type=41 startLineNumber=4 endLineNumber=4 ]
+"1218593486" [ label=<Infix
Expression
x + 2> type=27 startLineNumber=4 endLineNumber=4 ]
+"508198356" [ label=<Simple
Name
x> type=42 startLineNumber=4 endLineNumber=4 ]
+"1330754528" [ label=<Number
Literal
2> type=34 startLineNumber=4 endLineNumber=4 ]
+"1157058691" -> "40472007"
+"1157058691" -> "1138193439"
+"1157058691" -> "398110318"
+"398110318" -> "1765250898"
+"398110318" -> "670971910"
+"1157058691" -> "1601292138"
+"1601292138" -> "494586676"
+"494586676" -> "1218593486"
+"1218593486" -> "508198356"
+"1218593486" -> "1330754528"
+}
diff --git a/src/main/ASTtoDOT.java b/src/main/ASTtoDOT.java
index cbdb7af..c16239e 100644
--- a/src/main/ASTtoDOT.java
+++ b/src/main/ASTtoDOT.java
@@ -4,6 +4,7 @@
import structure.MyASTNode;
import structure.MyMethodNode;
+import static org.apache.commons.lang.StringEscapeUtils.escapeHtml;
public class ASTtoDOT {
@@ -20,7 +21,7 @@ public static String ASTtoDotParser(MyMethodNode m) {
ASTNode astNode = mn.astNode;
int hashcode = astNode.hashCode();
int nodeType = astNode.getNodeType();
- str += ("\"" + String.valueOf(hashcode) + "\" [ label=\""+buildLabel(mn)+"\" type=" + String.valueOf(nodeType) + " startLineNumber="
+ str += ("\"" + String.valueOf(hashcode) + "\" [ label=<"+buildLabel(mn)+"> type=" + String.valueOf(nodeType) + " startLineNumber="
+ String.valueOf(mn.startLineNum)+" endLineNumber="
+ String.valueOf(mn.endLineNum) + " ]\n");
}
@@ -41,6 +42,17 @@ public static String ASTtoDotParser(MyMethodNode m) {
public static String buildLabel(MyASTNode node) {
String contentString=node.astNode.toString().replace("\n", " ").replace("\"", "\\\"").replace(" ", " ");
String nodeType=ASTNode.nodeClassForType(node.astNode.getNodeType()).getName().replace("org.eclipse.jdt.core.dom.", "");
- return "("+contentString+","+nodeType+","+node.startLineNum+","+node.endLineNum+")";
+
+ nodeType = nodeType.replaceAll("(?$1");
+
+ if(nodeType.toLowerCase().contains("name")) {
+ nodeType = ""+nodeType+"";
+ }
+ else if(nodeType.toLowerCase().contains("literal")) {
+ nodeType = ""+nodeType+"";
+ }
+
+ return ""+nodeType+"
"+(contentString.length()>15 ? escapeHtml(contentString.substring(0,15))+" ... "+escapeHtml(contentString.substring(contentString.length()-2)) : escapeHtml(contentString));
+
}
}
diff --git a/src/main/Main.java b/src/main/Main.java
index 916469b..976201e 100644
--- a/src/main/Main.java
+++ b/src/main/Main.java
@@ -16,8 +16,8 @@ public class Main {
* @throws IOException
*/
public static void main(String[] args) throws IOException {
- String FilePath = "PATH/HelloWorld.java";
- String outputDir = "PATH/output/";
+ String FilePath = "./input/DemoAST.java";
+ String outputDir = "./output/";
File f = new File(FilePath);
ASTGenerator astGenerator = new ASTGenerator(f);
List methodNodeList = astGenerator.getMethodNodeList();