Skip to content

Commit c5ad2aa

Browse files
author
CJ Miller
committed
Can no do command line arguments
1 parent 60e9e99 commit c5ad2aa

3 files changed

Lines changed: 110 additions & 13 deletions

File tree

src/edu/rosehulman/cjjb/JavaModelClassVisitor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ public JavaModelClassVisitor(Set<String> classes, OutputStream out) {
3333
this(classes, out, null, null, 0);
3434
}
3535

36+
public JavaModelClassVisitor(OutputStream out, String classSearch, QualifiedMethod methodSearch, int depth) {
37+
this(null, out, classSearch, methodSearch, depth);
38+
}
39+
3640
public JavaModelClassVisitor(Set<String> classes, OutputStream out, String classSearch, QualifiedMethod methodSearch, int depth) {
3741
this.classes = classes;
3842
this.out = out;

src/edu/rosehulman/cjjb/Main.java

Lines changed: 106 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,17 @@
77
import java.net.URL;
88
import java.util.ArrayList;
99
import java.util.Arrays;
10+
import java.util.Collection;
1011
import java.util.Enumeration;
1112
import java.util.HashSet;
1213
import java.util.List;
1314
import java.util.Set;
1415

1516
import edu.rosehulman.cjjb.asm.QualifiedMethod;
1617
import edu.rosehulman.cjjb.javaModel.visitor.ISequenceVisitor;
18+
import edu.rosehulman.cjjb.javaModel.visitor.IUMLVisitor;
1719
import edu.rosehulman.cjjb.javaModel.visitor.SDSequenceVisitor;
20+
import edu.rosehulman.cjjb.javaModel.visitor.UMLDotVisitor;
1821

1922
public class Main {
2023

@@ -35,28 +38,120 @@ public class Main {
3538
public static final String boilerPlate = "digraph G { fontname = \"Bitstream Vera Sans\" fontsize = 8 node [ fontname = \"Bitstream Vera Sans\" fontsize = 8 shape = \"record\" ] edge [ fontname = \"Bitstream Vera Sans\" fontsize = 8 ]";
3639

3740
public static void main(String[] args) throws IOException, ClassNotFoundException {
41+
if(args.length == 0) {
42+
System.out.println("Calls shown bellow");
43+
System.out.println("UML -c <List of Classes> -p <List of Packages>");
44+
System.out.println("SEQ -c <Class> -m <Method> -d <ASM Desc>");
45+
System.out.println("EXAMPLE");
46+
return;
47+
}
3848
OutputStream out = new FileOutputStream("output.txt");
49+
switch (args[0]) {
50+
case "SEQ":
51+
QualifiedMethod qm = new QualifiedMethod(getMethodFromArgs(args), getDescFromArgs(args));
52+
// QualifiedMethod qm = new QualifiedMethod("shuffle", "(Ljava/util/List;)V");
53+
String clazz = getClassFromArgs(args);
54+
JavaModelClassVisitor visitor = new JavaModelClassVisitor(out, clazz, qm, 2);
55+
56+
visitor.buildSeqModel();
57+
ISequenceVisitor seqVisitor = new SDSequenceVisitor(clazz, qm, 2, out);
58+
visitor.getModel().accept(seqVisitor);
59+
break;
60+
case "UML":
61+
Set<String> classesToVisit = new HashSet<String>();
62+
classesToVisit.addAll(getClassesFromArgs(args));
63+
64+
for (String s : getPackagesFromArgs(args)) {
65+
classesToVisit.addAll(getClasses(s));
66+
}
67+
68+
visitor = new JavaModelClassVisitor(classesToVisit, out);
69+
visitor.buildUMLModel();
70+
IUMLVisitor umlVisitor = new UMLDotVisitor(out);
71+
visitor.getModel().accept(umlVisitor);
72+
break;
73+
case "EXAMPLE":
74+
exampleCall(new FileOutputStream("output.txt"));
75+
break;
76+
default:
77+
System.out.println("Not a valid diagram type. Valid Types: SEQ|UML|EXAMPLE");
78+
}
79+
}
80+
81+
private static String getClassFromArgs(String[] args) {
82+
int index = 0;
83+
while(index < args.length && !args[index++].equals("-c")) { }
84+
85+
return args[index];
86+
}
87+
88+
89+
private static String getDescFromArgs(String[] args) {
90+
int index = 0;
91+
while(index < args.length && !args[index++].equals("-d")) { }
92+
93+
return args[index];
94+
}
95+
96+
private static String getMethodFromArgs(String[] args) {
97+
int index = 0;
98+
while(index < args.length && !args[index++].equals("-m")) { }
99+
100+
return args[index];
101+
}
39102

103+
private static List<String> getPackagesFromArgs(String[] args) {
104+
List<String> toReturn = new ArrayList<String>();
105+
106+
int index = 0;
107+
while(index < args.length && !args[index++].equals("-p")) { }
108+
109+
for(int i = index; i < args.length; i++) {
110+
if(args[i].equals("-c")) {
111+
break;
112+
}
113+
114+
toReturn.add(args[i]);
115+
}
116+
117+
return toReturn;
118+
}
119+
120+
private static List<String> getClassesFromArgs(String[] args) {
121+
List<String> toReturn = new ArrayList<String>();
122+
123+
int index = 0;
124+
while(index < args.length && !args[index++].equals("-c")) { }
125+
126+
for(int i = index; i < args.length; i++) {
127+
if(args[i].equals("-p")) {
128+
break;
129+
}
130+
131+
toReturn.add(args[i]);
132+
}
133+
134+
return toReturn;
135+
}
136+
137+
private static void exampleCall(OutputStream out ) throws IOException, ClassNotFoundException {
40138
Set<String> classesToVisit = new HashSet<String>();
41139
classesToVisit.addAll(Arrays.asList(CLASSES));
42-
140+
43141
for (String s : PACKAGES) {
44142
classesToVisit.addAll(getClasses(s));
45143
}
46-
144+
47145
QualifiedMethod qm = new QualifiedMethod("shuffle", "(Ljava/util/List;)V");
48146
JavaModelClassVisitor visitor = new JavaModelClassVisitor(classesToVisit, out, "java.util.Collections", qm, 2);
49147

50-
// visitor.buildUMLModel();
51-
// IUMLVisitor umlVisitor = new UMLDotVisitor(out);
52-
// visitor.getModel().accept(umlVisitor);
53-
148+
visitor.buildUMLModel();
149+
IUMLVisitor umlVisitor = new UMLDotVisitor(out);
150+
visitor.getModel().accept(umlVisitor);
151+
54152
visitor.buildSeqModel();
55153
ISequenceVisitor seqVisitor = new SDSequenceVisitor("java.util.Collections", qm, 2, out);
56154
visitor.getModel().accept(seqVisitor);
57-
58-
//java.util.Collections.shuffle(list, rnd);
59-
//java.util.Random;
60155
}
61156

62157
/* From
@@ -71,7 +166,8 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio
71166
* @return The classes
72167
* @throws ClassNotFoundException
73168
* @throws IOException
74-
*/ private static List<String> getClasses(String packageName) throws ClassNotFoundException, IOException {
169+
*/
170+
private static List<String> getClasses(String packageName) throws ClassNotFoundException, IOException {
75171
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
76172
assert classLoader != null;
77173
String path = packageName.replace('.', '/');

src/edu/rosehulman/cjjb/asm/ClassSequnceClassVisitor.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,6 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si
5151

5252
QualifiedMethod qmeth = new QualifiedMethod(name, desc);
5353
if(methodsToFind.contains(qmeth)) {
54-
55-
System.out.println("I found the method");
56-
5754
MethodCallGroup method = new MethodCallGroup(className, qmeth);
5855
toDecorate = new ClassSequnceMethodVisitor(this.api, toDecorate, method, this.model, this.depth, seqStructure);
5956

0 commit comments

Comments
 (0)