diff --git a/src/main/rascal/TryCounter.rsc b/src/main/rascal/TryCounter.rsc deleted file mode 100644 index 2ee57a2..0000000 --- a/src/main/rascal/TryCounter.rsc +++ /dev/null @@ -1,53 +0,0 @@ -/* -* This module counts the amount of try-catch and try-catch-finally -* blocks in a project. I used it to substantiate a claim in my -* thesis that such exception handling code is common. -*/ -module TryCounter - -import Prelude; -import analysis::m3::Registry; -import lang::java::m3::Core; -import lang::java::m3::AST; - -import extractors::Project; - -public void countTries(loc project) { - set[Declaration] asts = createProjectAST(project, false); - - int tryCounter = 0; - int catchCounter = 0; - int finallyCounter = 0; - - for(ast <- asts) { - tuple[int tries,int catches,int finals] counts = count(ast); - - tryCounter += counts.tries; - catchCounter += counts.catches; - finallyCounter += counts.finals; - } - - println("Total: Tries = . Catches = . Finally = ."); -} - -private tuple[int tries,int catches,int finals] count(Declaration ast) { - int tryCounter = 0; - int catchCounter = 0; - int finallyCounter = 0; - - visit(ast) { - case \try(Statement body, list[Statement] catchClauses): { - tryCounter += 1; - catchCounter += size(catchClauses); - } - case \try(Statement body, list[Statement] catchClauses, Statement \finally): { - tryCounter += 1; - catchCounter += size(catchClauses); - finallyCounter += 1; - } - } - - //println("[]: Tries = . Catches = . Finally = ."); - - return ; -} \ No newline at end of file diff --git a/src/main/rascal/screen/ControlDependenceScreen.rsc b/src/main/rascal/screen/ControlDependenceScreen.rsc deleted file mode 100644 index ddf35ee..0000000 --- a/src/main/rascal/screen/ControlDependenceScreen.rsc +++ /dev/null @@ -1,42 +0,0 @@ -@contributor{Lulu Zhang - UvA MSc 2014} -@contributor{René Bulsing - UvA MSc 2015} -module screen::ControlDependenceScreen - -import Prelude; -import lang::java::m3::Core; -import analysis::graphs::Graph; -import vis::Figure; -import vis::Render; -import vis::KeySym; -import util::Editors; -import lang::java::m3::AST; - -import screen::Screen; -import extractors::Project; - -import graph::DataStructures; -import graph::control::dependence::CDG; -import graph::factory::GraphFactory; - -@doc{ - To run a test: - displayControlDependenceGraph(|cwd:///../../../JavaTest|, "testPDT"); - displayControlDependenceGraph(|cwd:///../../../JavaTest|, "testPDT2"); -} -public void displayControlDependenceGraph(loc project, str methodName) { - M3 projectModel = createM3(project); - loc methodLocation = getMethodLocation(methodName, projectModel); - node methodAST = getMethodASTEclipse(methodLocation, model = projectModel); - - ControlDependences controlDependences = createControlDependences(methodLocation, methodAST, projectModel, File()); - - list[Edge] edges = []; - list[Figure] boxes = []; - - for(method <- controlDependences) { - edges += createEdges(method.name, controlDependences[method].graph, "solid", "blue"); - boxes += createBoxes(method); - } - - render(graph(boxes, edges, hint("layered"), gap(50))); -} \ No newline at end of file diff --git a/src/main/rascal/screen/ControlFlowScreen.rsc b/src/main/rascal/screen/ControlFlowScreen.rsc deleted file mode 100644 index 38271e0..0000000 --- a/src/main/rascal/screen/ControlFlowScreen.rsc +++ /dev/null @@ -1,74 +0,0 @@ -@contributor{Lulu Zhang - UvA MSc 2014} -@contributor{René Bulsing - UvA MSc 2015} -module screen::ControlFlowScreen - -import Prelude; -import lang::java::m3::Core; -import analysis::graphs::Graph; -import vis::Figure; -import vis::Render; - -import screen::Screen; -import graph::DataStructures; -import graph::factory::GraphFactory; -import extractors::Project; - - -@doc{ - To run a test: - displayControlFlowGraph(|cwd:///../../../JavaTest|, "testCDG"); -} -public void displayControlFlowGraph(loc project, str methodName) { - M3 projectModel = createM3(project); - loc methodLocation = getMethodLocation(methodName, projectModel); - node methodAST = getMethodASTEclipse(methodLocation, model = projectModel); - - ControlFlows controlFlows = createControlFlows(methodLocation, methodAST, projectModel, File()); - - list[Edge] edges = []; - list[Figure] boxes = []; - - for(method <- controlFlows) { - edges += createEdges(method.name, controlFlows[method].graph, "solid", "blue"); - edges += edge(":", ":", - lineColor("blue"), toArrow(box(size(10), fillColor("blue")))); - edges = (edges - | it + edge(":", ":", - lineColor("blue"), toArrow(box(size(10), fillColor("blue")))) - | exitNode <- controlFlows[method].exitNodes - ); - - boxes += createBoxes(method); - boxes += box(text("EXIT "), id(":"), size(50), fillColor("lightblue")); - } - - render(graph(boxes, edges, hint("layered"), gap(50))); -} - -public void displayControlFlowGraph(loc project, str methodName, str fileName) { - M3 projectModel = createM3(project); - loc methodLocation = getMethodLocation(methodName, fileName, projectModel); - node methodAST = getMethodASTEclipse(methodLocation, model = projectModel); - - ControlFlows controlFlows = createControlFlows(methodLocation, methodAST, projectModel, File()); - - list[Edge] edges = []; - list[Figure] boxes = []; - - for(method <- controlFlows) { - edges += createEdges(method.name, controlFlows[method].graph, "solid", "blue"); - edges += edge(":", ":", - lineColor("blue"), toArrow(box(size(10), fillColor("blue")))); - - edges = (edges - | it + edge(":", ":", - lineColor("blue"), toArrow(box(size(10), fillColor("blue")))) - | exitNode <- controlFlows[method].exitNodes - ); - - boxes += createBoxes(method); - boxes += box(text("EXIT "), id(":"), size(50), fillColor("lightblue")); - } - - render(graph(boxes, edges, hint("layered"), gap(50))); -} \ No newline at end of file diff --git a/src/main/rascal/screen/DataDependenceScreen.rsc b/src/main/rascal/screen/DataDependenceScreen.rsc deleted file mode 100644 index f3ecbf4..0000000 --- a/src/main/rascal/screen/DataDependenceScreen.rsc +++ /dev/null @@ -1,42 +0,0 @@ -@contributor{Lulu Zhang - UvA MSc 2014} -@contributor{René Bulsing - UvA MSc 2015} -module screen::DataDependenceScreen - -import Prelude; -import lang::java::m3::Core; -import analysis::graphs::Graph; -import vis::Figure; -import vis::Render; -import vis::KeySym; -import util::Editors; -import lang::java::m3::AST; - -import screen::Screen; -import extractors::Project; -import graph::DataStructures; -import graph::factory::GraphFactory; - - -@doc{ - To run a test: - displayDataDependenceGraph(|cwd:///../../../JavaTest|, "testPDT"); - displayDataDependenceGraph(|cwd:///../../../JavaTest|, "testPDT2"); - displayDataDependenceGraph(|project://QL|, "nextToken"); -} -public void displayDataDependenceGraph(loc project, str methodName) { - M3 projectModel = createM3(project); - loc methodLocation = getMethodLocation(methodName, projectModel); - node methodAST = getMethodASTEclipse(methodLocation, model = projectModel); - - DataDependences dataDependences = createDataDependences(methodLocation, methodAST, projectModel, File()); - - list[Edge] edges = []; - list[Figure] boxes = []; - - for(method <- dataDependences) { - edges += createEdges(method.name, dataDependences[method].graph, "dash", "green"); - boxes += createBoxes(method); - } - - render(graph(boxes, edges, hint("layered"), gap(50))); -} \ No newline at end of file diff --git a/src/main/rascal/screen/PostDominatorScreen.rsc b/src/main/rascal/screen/PostDominatorScreen.rsc deleted file mode 100644 index 1ac8d81..0000000 --- a/src/main/rascal/screen/PostDominatorScreen.rsc +++ /dev/null @@ -1,64 +0,0 @@ -@contributor{Lulu Zhang - UvA MSc 2014} -@contributor{René Bulsing - UvA MSc 2015} -module screen::PostDominatorScreen - -import Prelude; -import lang::java::m3::Core; -import analysis::graphs::Graph; -import vis::Figure; -import vis::Render; -import vis::KeySym; -import util::Editors; -import lang::java::m3::AST; - -import screen::Screen; -import extractors::Project; -import graph::DataStructures; -import graph::factory::GraphFactory; - - -@doc{ - To run a test: - displayPostDominatorTree(|cwd:///../../../JavaTest|, "testPDT"); - displayPostDominatorTree(|cwd:///../../../JavaTest|, "testPDT2"); - displayPostDominatorTree(|cwd:///../../../JavaTest|, "testCDG"); -} -public void displayPostDominatorTree(loc project, str methodName) { - M3 projectModel = createM3(project); - loc methodLocation = getMethodLocation(methodName, projectModel); - node methodAST = getMethodASTEclipse(methodLocation, model = projectModel); - - PostDominators postDominators = createPostDominators(methodLocation, methodAST, projectModel, File()); - - list[Edge] edges = []; - list[Figure] boxes = []; - - for(method <- postDominators) { - edges += createEdges(method.name, postDominators[method].tree, "solid", "blue"); - boxes += createBoxes(method); - boxes += box(text("START "), id(":"), size(50), fillColor("lightblue")); - boxes += box(text("EXIT "), id(":"), size(50), fillColor("lightblue")); - } - - render(graph(boxes, edges, hint("layered"), gap(50))); -} - -public void displayPostDominatorTree(loc project, str methodName, str fileName) { - M3 projectModel = createM3(project); - loc methodLocation = getMethodLocation(methodName, fileName, projectModel); - node methodAST = getMethodASTEclipse(methodLocation, model = projectModel); - - PostDominators postDominators = createPostDominators(methodLocation, methodAST, projectModel, Intra()); - - list[Edge] edges = []; - list[Figure] boxes = []; - - for(method <- postDominators) { - edges += createEdges(method.name, postDominators[method].tree, "solid", "blue"); - boxes += createBoxes(method); - boxes += box(text("START "), id(":"), size(50), fillColor("lightblue")); - boxes += box(text("EXIT "), id(":"), size(50), fillColor("lightblue")); - } - - render(graph(boxes, edges, hint("layered"), gap(50))); -} \ No newline at end of file diff --git a/src/main/rascal/screen/ProgramDependenceScreen.rsc b/src/main/rascal/screen/ProgramDependenceScreen.rsc deleted file mode 100644 index 44b8526..0000000 --- a/src/main/rascal/screen/ProgramDependenceScreen.rsc +++ /dev/null @@ -1,66 +0,0 @@ -@contributor{Lulu Zhang - UvA MSc 2014} -@contributor{René Bulsing - UvA MSc 2015} -module screen::ProgramDependenceScreen - -import Prelude; -import lang::java::m3::Core; -import analysis::graphs::Graph; -import vis::Figure; -import vis::Render; -import vis::KeySym; -import util::Editors; -import lang::java::m3::AST; - -import screen::Screen; -import extractors::Project; -import graph::DataStructures; -import graph::factory::GraphFactory; - - -@doc { - To run a test: - displayProgramDependenceGraph(|cwd:///../../../JavaTest|, "main"); - displayProgramDependenceGraph(|cwd:///../../../JavaTest|, "testPDG"); - displayProgramDependenceGraph(|cwd:///../../../JavaTest|, "testPDT2"); -} -public void displayProgramDependenceGraph(loc project, str methodName) { - M3 projectModel = createM3(project); - loc methodLocation = getMethodLocation(methodName, projectModel); - node methodAST = getMethodASTEclipse(methodLocation, model = projectModel); - - ControlDependences controlDependences = createControlDependences(methodLocation, methodAST, projectModel, File()); - DataDependences dataDependences = createDataDependences(methodLocation, methodAST, projectModel, File()); - - list[Edge] edges = []; - list[Figure] boxes = []; - - for(method <- controlDependences) { - edges += createEdges(method.name, controlDependences[method].graph, "solid", "blue"); - edges += createEdges(method.name, dataDependences[method].graph, "dash", "green"); - - boxes += createBoxes(method); - } - - render(graph(boxes, edges, hint("layered"), gap(50))); -} - -public void displayProgramDependenceGraph(loc project, str methodName, str fileName) { - M3 projectModel = createM3(project); - loc methodLocation = getMethodLocation(methodName, fileName, projectModel); - node methodAST = getMethodASTEclipse(methodLocation, model = projectModel); - - ControlDependences controlDependences = createControlDependences(methodLocation, methodAST, projectModel, File()); - DataDependences dataDependences = createDataDependences(methodLocation, methodAST, projectModel, File()); - - list[Edge] edges = []; - list[Figure] boxes = []; - - for(method <- controlDependences) { - edges += createEdges(method.name, controlDependences[method].graph, "solid", "blue"); - edges += createEdges(method.name, dataDependences[method].graph, "dash", "green"); - - boxes += createBoxes(method); - } - - render(graph(boxes, edges, hint("layered"), gap(50))); -} \ No newline at end of file diff --git a/src/main/rascal/screen/Screen.rsc b/src/main/rascal/screen/Screen.rsc deleted file mode 100644 index 807b48a..0000000 --- a/src/main/rascal/screen/Screen.rsc +++ /dev/null @@ -1,81 +0,0 @@ -@contributor{Lulu Zhang - UvA MSc 2014} -@contributor{René Bulsing - UvA MSc 2015} -module screen::Screen - -import Prelude; -import lang::java::m3::Core; -import analysis::graphs::Graph; -import vis::Figure; -import vis::Render; -import vis::KeySym; -import util::Editors; -import lang::java::m3::AST; - -import extractors::Project; -import graph::DataStructures; - - -public loc getMethodLocation(str methodName, str fileName, M3 projectModel) { - for(method <- getM3Methods(projectModel)) { - if(// := method.file, name == methodName - , method.parent.file == fileName) { - return method; - } - } - - throw "Method \"\" does not exist."; -} - - -public loc getMethodLocation(str methodName, M3 projectModel) { - for(method <- getM3Methods(projectModel)) { - if(/\(/ := method.file, name == methodName) { - return method; - } - } - - throw "Method \"\" does not exist."; -} - -public list[Edge] createEdges(str methodName, Graph[int] tree, str style, str color) { - return [ edge(":", ":", - lineStyle(style), lineColor(color), toArrow(box(size(10), - fillColor(color)))) | graphEdge <- tree ]; -} - -public str getBoxColor(NodeType nodeType) { - switch(nodeType) { - case Normal(): return "lightgreen"; - case CallSite(): return "lightpink"; - case Parameter(): return "beige"; - case Entry(): return "lightblue"; - case Global(): return "darkorange"; - } -} - -public Figures createBoxes(MethodData methodData) { - return [ box(text(":"), id(":"), - size(50), fillColor(getBoxColor(getNodeType(resolveIdentifier(methodData, treeNode)))), - onMouseDown( - goToSource( - getLocation( - resolveIdentifier(methodData, treeNode) - ) - ) - ) - ) | treeNode <- environmentDomain(methodData) ]; -} - -public loc getLocation(node stat){ - return cast(#loc, getAnnotations(stat)["src"]); -} - -public bool(int button, map[KeyModifier,bool] modifiers) goToSource(loc location) = - bool(int button, map[KeyModifier,bool] modifiers) - { - if(button == 1) { - edit(location,[]); - return true; - } - return false; - }; \ No newline at end of file diff --git a/src/main/rascal/screen/SystemDependenceScreen.rsc b/src/main/rascal/screen/SystemDependenceScreen.rsc deleted file mode 100644 index 6e0ac9d..0000000 --- a/src/main/rascal/screen/SystemDependenceScreen.rsc +++ /dev/null @@ -1,90 +0,0 @@ -@contributor{Lulu Zhang - UvA MSc 2014} -@contributor{René Bulsing - UvA MSc 2015} -module screen::SystemDependenceScreen - -import Prelude; -import lang::java::m3::Core; -import analysis::graphs::Graph; -import vis::Figure; -import vis::Render; -import vis::KeySym; -import util::Editors; -import analysis::m3::Registry; -import lang::java::m3::AST; - -import screen::Screen; -import extractors::Project; -import graph::system::SDG; -import graph::DataStructures; -import graph::factory::GraphFactory; - - -@doc{ - To run a test: - displaySystemDependenceGraph(|cwd:///../../../JavaTest|, "main"); -} -public void displaySystemDependenceGraph(loc project, str methodName) { - M3 projectModel = createM3(project); - loc methodLocation = getMethodLocation(methodName, projectModel); - - displaySystemDependenceGraph(projectModel, methodLocation); -} - -public void displaySystemDependenceGraph(loc project, str methodName, str fileName) { - M3 projectModel = createM3(project); - loc methodLocation = getMethodLocation(methodName, fileName, projectModel); - - displaySystemDependenceGraph(projectModel, methodLocation); -} - -private void displaySystemDependenceGraph(M3 projectModel, loc methodLocation) { - node methodAST = getMethodASTEclipse(methodLocation, model = projectModel); - - SystemDependence systemDependence = createSystemDependence(methodLocation, methodAST, projectModel, File()); - - list[Edge] edges = createEdges(systemDependence.controlDependence, "solid", "blue") - + createEdges(systemDependence.dataDependence, "dash", "green") - + createEdges(systemDependence.iControlDependence, "solid", "deepskyblue") - + createEdges(systemDependence.iDataDependence, "dash", "lime") - + createEdges(systemDependence.globalDataDependence, "dash", "lime"); - - set[Vertex] vertices = getVertices(systemDependence); - - list[Figure] boxes = createSDGBoxes(systemDependence.nodeEnvironment, vertices); - - render(graph(boxes, edges, hint("layered"), gap(50))); -} - -private set[Vertex] getVertices(SystemDependence systemDependence) { - return carrier(systemDependence.controlDependence) - + carrier(systemDependence.dataDependence) - + carrier(systemDependence.iControlDependence) - + carrier(systemDependence.iDataDependence) - + carrier(systemDependence.globalDataDependence); -} - -public str vertexIdentifier(Vertex vertex) { - return "::"; -} - -public list[Edge] createEdges(Graph[Vertex] graph, str style, str color) { - return [ edge(vertexIdentifier(graphEdge.from), vertexIdentifier(graphEdge.to), - lineStyle(style), lineColor(color), toArrow(box(size(10), - fillColor(color)))) | graphEdge <- graph ]; -} - -public Figures createSDGBoxes(map[Vertex, node] environment, set[Vertex] vertices) { - return [ box( - text(":"), - id(vertexIdentifier(vertex)), - size(50), - fillColor(getBoxColor(getNodeType(environment[vertex]))), - onMouseDown( - goToSource( - getLocation( - environment[vertex] - ) - ) - ) - ) | vertex <- vertices ]; -} \ No newline at end of file