Skip to content
Snippets Groups Projects
Commit 4f570e88 authored by Martin Zloch's avatar Martin Zloch
Browse files

moved examples and wrote nothing pattern

parent 67515f90
Branches
No related tags found
No related merge requests found
Showing
with 125 additions and 36 deletions
......@@ -22,6 +22,7 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="src/examples"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
<attributes>
<attribute name="maven.pomderived" value="true"/>
......
package de.mzl.examples;
package mzl;
public class EmptyMain {
......
package mzl;
import java.util.ArrayList;
import java.util.List;
public class ForEachLoop {
public static void main(String[] args) {
// initialize list
List<Double> list = new ArrayList<Double>();
list.add(0.0);
list.add(1.0);
list.add(2.0);
list.add(3.0);
list.add(4.0);
// do long computation
for (Double d : list) {
writeResultInDatabase(d);
}
list.add(5.0);
// do long computation
for (Double d : list) {
writeResultInDatabase(d);
}
}
private static void writeResultInDatabase(final double result) {
System.out.println(result);
}
}
package de.mzl.examples;
package mzl;
import java.util.ArrayList;
import java.util.List;
......
package de.mzl.examples;
package mzl;
import java.util.ArrayList;
import java.util.List;
public class ForEachLoop {
public class ForEachLoopTests {
public static void main(String[] args) {
// initialize list
......@@ -12,8 +12,6 @@ public class ForEachLoop {
list.add(new Double(i));
}
//do long computation
for (Double d : list) {
writeResultInDatabase(d);
}
......
package de.mzl.examples;
package mzl;
public class HelloWorld {
......
package de.mzl.examples;
package mzl;
import java.util.ArrayList;
import java.util.List;
......
package de.mzl.examples;
package mzl;
public class SimpleLoop {
......
package de.mzl.examples;
package mzl;
import java.util.ArrayList;
import java.util.List;
......
package de.mzl.examples;
package mzl;
public class SimpleLoopSleep {
......
package de.mzl.examples;
package mzl;
import java.io.IOException;
......
......@@ -134,31 +134,12 @@ public class CompareState {
final Java2SDGTask java2sdg = new Java2SDGTask(targetSourceDir.getAbsolutePath(), classpath, pathToDB,
mainClass);
java2sdg.run();
// java2sdg.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
// @Override
// public void handle(final WorkerStateEvent arg0) {
List<Pattern> matchedPatterns = new ArrayList<>();
for (CandidatePatternMatches pm : patternMatches) {
matchedPatterns.add(pm.getPattern());
}
Logger.info("Running candidate patterns");
init(matchedPatterns);
// }
// });
// java2sdg.setOnFailed(new EventHandler<WorkerStateEvent>() {
// @Override
// public void handle(final WorkerStateEvent arg0) {
// Logger.exception(java2sdg.getException());
// throw new IllegalStateException(java2sdg.getException());
// }
// });
// Thread t = new Thread(java2sdg);
// t.start();
// try {
// t.join();
// } catch (InterruptedException e) {
// throw new IllegalStateException(e);
// }
}
}
<?xml version="1.0" encoding="UTF-8"?>
<pattern display="true/false">
<name>Change Nothing</name>
<description>Changes nothing, can be used to convert java to NeoSuit java</description>
<cp>
<query>
match (class:Class)-[:CONTAINS_METHOD]->(m:Method)
where m.name="main"
return id(m) AS methodID, class as display
<!-- return classNode as display and id's of other nodes -->
</query>
</cp>
<ppversions> <!-- differen pps for different java versions etc. -->
<pp java="1.7" name="java 1.7">
<query>
<![CDATA[
match (m)-[:CONTROL_FLOW]->(x)-[c:CONTROL_FLOW]->(b)
WHERE id(m)={methodID}
WITH m,x,b,c
MATCH (class:Class)-[:CONTAINS_METHOD]->(m)
WITH m,x,b,c,class
RETURN class as display
]]>
</query>
</pp>
</ppversions>
</pattern>
......@@ -18,7 +18,7 @@ Requires the loop var assigment node with attribute "isLoopAssignment = true"
CREATE (at2:Assignment {operation:"thisdeclaration", endif:"true", var:"this", name:"this = @this: %{AnonymousThreadClass}", vartype:"%{AnonymousThreadClass}", type:"Assignment", rightValue:"@this: %{AnonymousThreadClass}"})
CREATE (at3:Assignment {operation:"parameterdeclaration", var:"%{generatedFinalLoopVarCopyTemp}", vartype:initAssignment.vartype, type:"Assignment", rightValue:"@parameter0: "+initAssignment.vartype, displayname:"%{generatedFinalLoopVarCopyTempTemp} = @parameter0: "+initAssignment.vartype})
CREATE (at4:ConstructorCall:MethodCall {fqn:"java.lang.Object.<init>()", caller:"this", args:[], name:"super", type:"MethodCall", displayname:"<init>()", argumentscount:0, returntype:"void"})
CREATE (at5:Assignment {operation:"value", var:"%{generatedFinalLoopVarCopyTemp}", vartype:initAssignment.vartype, type:"Assignment", rightValue:"%{generatedFinalLoopVarCopyTemp}", displayname:"this.<%{AnonymousThreadClass}: "+initAssignment.vartype+" %{generatedFinalLoopVarCopyTemp}> = %{generatedFinalLoopVarCopyTemp}"})
CREATE (at5:Assignment {operation:"value", var:"%{generatedFinalLoopVarCopyTemp}", vartype:initAssignment.vartype, type:"Assignment", rightValue:"%{generatedFinalLoopVarCopyTemp}", displayname:"this.<%{AnonymousThreadClass}: "+initAssignment.vartype+" %{generatedFinalLoopVarCopyTemp}> = %{generatedFinalLoopVarCopyTemp}", finalloopvarcopytemp:"%{generatedFinalLoopVarCopyTemp}"})
CREATE (at6:ReturnStmt {name:"return", type:"ReturnStmt"})
CREATE (at1)-[:CONTROL_FLOW]->(at2)
CREATE (at2)-[:CONTROL_FLOW]->(at3)
......
......@@ -6,6 +6,8 @@
Requirements:
Relationship with attribute "replaceWithThreadPoolJoinLoop=true"
some node with the attribute tasklistvar
//TODO: sdg2java has a problem with consecutive for loops, so we insert a print statemant between them. This has to be removed once the bug in sdg2java is fixed.
-->
<query><![CDATA[
MATCH (start)-[replacedCF]->(end)
......@@ -19,6 +21,9 @@
DELETE replacedCF
CREATE (workaroundnode0:Assignment {operation:"staticFieldAccess", var:"%{gen}", name:"%{gen} = <java.lang.System: java.io.PrintStream out>", vartype:"java.io.PrintStream", type:"Assignment", rightValue:"java.lang.System.out"})
CREATE (workaroundnode1:Assignment {caller:"%{gen}", fqn:"java.io.PrintStream.println(java.lang.String)", args:["Hello World"], name:"println", type:"MethodCall", argumentscount:1, returntype:"void", displayname:"println('Hello World')"})
CREATE (f0:NopStmt {nopkind:"FOREACH_INIT", type:"NopStmt", displayname:"nop"})
CREATE (f1:Assignment:MethodCall {caller:tasklistVar, fqn:"java.lang.Iterable.iterator()", operation:"MethodCall", var:"%{iterator}", args:[], name:"iterator", vartype:"java.util.Iterator", type:"Assignment", rightValue:"interfaceinvoke "+tasklistVar+".<java.lang.Iterable: java.util.Iterator iterator()>()", argumentscount:0, displayname:"%{iterator} = iterator()returntype:java.util.Iterator"})
CREATE (f2:NopStmt {nopkind:"FOREACH_COND", type:"NopStmt", displayname:"nop"})
......@@ -43,6 +48,8 @@
CREATE (f9)-[:CONTROL_FLOW]->(f2)
CREATE (f4)-[:CONTROL_FLOW]->(f10)
CREATE (start)-[:CONTROL_FLOW]->(f0)
CREATE (start)-[:CONTROL_FLOW]->(workaroundnode0)
CREATE (workaroundnode0)-[:CONTROL_FLOW]->(workaroundnode1)
CREATE (workaroundnode1)-[:CONTROL_FLOW]->(f0)
CREATE (f10)-[:CONTROL_FLOW]->(end)
]]></query>
\ No newline at end of file
......@@ -38,11 +38,11 @@
// create nodes for tasks
CREATE (anonymousTempAssignment:Assignment{operation:"new", var:"%{threadInstance}", displayname:"%{threadInstance} = new "+className, vartype:className, type:"Assignment", rightValue:"new "+className})
CREATE (loopVarCopyAssignment)-[:CONTROL_FLOW]->(anonymousTempAssignment)
CREATE (anonymousConstructorCall:ConstructorCall:MethodCall {fqn:className+".<init>("+initAssignment.vartype+")", caller:"%{threadInstance}", args:"[%{loopVar}]", name:"<init>", type:"MethodCall", argumentscount:1, displayname:"<init>(%{loopVar})", returntype:"void"})
CREATE (anonymousConstructorCall:ConstructorCall:MethodCall {fqn:className+".<init>("+initAssignment.vartype+")", caller:"%{threadInstance}", args:["%{loopVar}"], name:"<init>", type:"MethodCall", argumentscount:1, displayname:"<init>(%{loopVar})", returntype:"void"})
CREATE (anonymousTempAssignment)-[:CONTROL_FLOW]->(anonymousConstructorCall)
CREATE (forkJoinTaskRunnableAssignment:Assignment:MethodCall {fqn:"java.util.concurrent.ForkJoinPool.submit(java.lang.Runnable)", caller:"%{threadInstance}", operation:"MethodCall", var:"%{taskTemp}", args:["%{threadInstance}"], name:"submit", vartype:"java.util.concurrent.ForkJoinTask", type:"Assignment", rightValue:"virtualinvoke %{threadInstance}.<java.util.concurrent.ForkJoinPool: java.util.concurrent.ForkJoinTask submit(java.lang.Runnable)>(%{threadInstance})"})
CREATE (anonymousConstructorCall)-[:CONTROL_FLOW]->(forkJoinTaskRunnableAssignment)
CREATE (taskAssignment:Assignment {operation:"value", var:"%{task}", displayname:"%{task} = %{taskTemp}", vartype:"java.util.concurrent.ForkJoinTask", isdeclaration = true, type:"Assignment", rightValue:"%{taskTemp}", lefttypearguments: "?"})
CREATE (taskAssignment:Assignment {operation:"value", var:"%{task}", displayname:"%{task} = %{taskTemp}", vartype:"java.util.concurrent.ForkJoinTask", isdeclaration = true, type:"Assignment", rightValue:"%{taskTemp}", lefttypearguments: ["?"]})
CREATE (forkJoinTaskRunnableAssignment)-[:CONTROL_FLOW]->(taskAssignment)
CREATE (addTaskToFJPool:MethodCall {caller:tasklistVar, args:[%{task}], var:"addResultTemp", type:"MethodCall", returntype:"boolean", fqn:"java.util.List.add(java.lang.Object)", operation:"MethodCall", name:"add", vartype:"boolean", argumentscount:1, returntype:"boolean", displayname:"add(%{task})"})
CREATE (taskAssignment)-[:CONTROL_FLOW]->(addTaskToFJPool)
......
......@@ -10,7 +10,7 @@
MATCH (start)-[beforeLoopControlFlow]->(end)
WHERE exists(beforeLoopControlFlow.replaceWithThreadPoolInit)
AND beforeLoopControlFlow.replaceWithThreadPoolInit = true
WITH beforeLoopControlFlow, start, end
DELETE beforeLoopControlFlow
CREATE (forkJoinPoolTempAssignment:Assignment {operation : "new", var:"%{forkJoinPoolTemp}", displayname:"%{forkJoinPoolTemp} = new java.util.concurrent.ForkJoinPool", vartype: "java.util.concurrent.ForkJoinPool" , lineNumber:"11", type: "Assignment", rightValue:"new java.util.concurrent.ForkJoinPool"})
......@@ -19,11 +19,11 @@
CREATE (forkJoinPoolTempAssignment)-[:CONTROL_FLOW]->(forkJoinPoolConstruction)
CREATE (forkJoinPoolAssignment:Assignment {operation:"value",var:"%{forkJoinPool}", name:"%{forkJoinPool} = %{forkJoinPoolTemp}", vartype:"java.util.concurrent.ForkJoinPool", type:"Assignment", rightValue:"%{forkJoinPoolTemp}", poolvar:"%{forkJoinPool}", isdeclaration:true})
CREATE (forkJoinPoolConstruction)-[:CONTROL_FLOW]->(forkJoinPoolAssignment)
CREATE (arrayListTempAssignment:Assignment {operation:"new", var:"%{tempArrayList}", name:"%{tempArrayList} = new java.util.ArrayList", vartype:"java.util.ArrayList", type:"Assignment", rightValue:"new java.util.ArrayList", lefttypearguments:"ForkJoinTask"})
CREATE (arrayListTempAssignment:Assignment {operation:"new", var:"%{tempArrayList}", name:"%{tempArrayList} = new java.util.ArrayList", vartype:"java.util.ArrayList", type:"Assignment", rightValue:"new java.util.ArrayList", lefttypearguments:["ForkJoinTask"]})
CREATE (forkJoinPoolAssignment)-[:CONTROL_FLOW]->(arrayListTempAssignment)
CREATE (arrayListConstruction:ConstructorCall:MethodCall {fqn:"java.util.ArrayList.<init>()", caller:"%{tempArrayList}", args:[], name:"<init>", type:"MethodCall", argumentscount:0, displayname:"<init>()", returntype:"void"})
CREATE (arrayListTempAssignment)-[:CONTROL_FLOW]->(arrayListConstruction)
CREATE (arrayListAssignment:Assignment {operation:"value", var:"%{taskList}", name:"%{taskList} = %{tempArrayList}", vartype:"java.util.List", type:"Assignment", rightValue:"%{tempArrayList}", tasklistvar:"%{taskList}", isdeclaration:true, lefttypearguments:"ForkJoinTask"})
CREATE (arrayListAssignment:Assignment {operation:"value", var:"%{taskList}", name:"%{taskList} = %{tempArrayList}", vartype:"java.util.List", type:"Assignment", rightValue:"%{tempArrayList}", tasklistvar:"%{taskList}", isdeclaration:true, lefttypearguments:["ForkJoinTask"]})
CREATE (arrayListConstruction)-[:CONTROL_FLOW]->(arrayListAssignment)
CREATE (arrayListAssignment)-[:CONTROL_FLOW]->(end)
]]>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment