1
2
3
4 package joeq.Class;
5
6 import java.util.Arrays;
7 import java.util.Iterator;
8 import java.util.Set;
9 import jwutil.collections.AppendIterator;
10
11
12
13
14
15 public interface jq_MethodVisitor {
16
17 void visitClassInitializer(jq_ClassInitializer m);
18 void visitInitializer(jq_Initializer m);
19 void visitStaticMethod(jq_StaticMethod m);
20 void visitInstanceMethod(jq_InstanceMethod m);
21 void visitMethod(jq_Method m);
22
23 class EmptyVisitor implements jq_MethodVisitor {
24 public void visitClassInitializer(jq_ClassInitializer m) {}
25 public void visitInitializer(jq_Initializer m) {}
26 public void visitStaticMethod(jq_StaticMethod m) {}
27 public void visitInstanceMethod(jq_InstanceMethod m) {}
28 public void visitMethod(jq_Method m) {}
29 }
30
31 class DeclaredMethodVisitor extends jq_TypeVisitor.EmptyVisitor {
32 final jq_MethodVisitor mv; final Set methodNames; boolean trace;
33 public DeclaredMethodVisitor(jq_MethodVisitor mv) { this.mv = mv; this.methodNames = null; this.trace = false; }
34 public DeclaredMethodVisitor(jq_MethodVisitor mv, boolean trace) { this.mv = mv; this.methodNames = null; this.trace = trace; }
35 public DeclaredMethodVisitor(jq_MethodVisitor mv, Set methodNames, boolean trace) { this.mv = mv; this.methodNames = methodNames; this.trace = trace; }
36 public void visitClass(jq_Class k) {
37 if (trace) System.out.println(k.toString());
38 Iterator it = new AppendIterator(Arrays.asList(k.getDeclaredStaticMethods()).iterator(),
39 Arrays.asList(k.getDeclaredInstanceMethods()).iterator());
40 while (it.hasNext()) {
41 jq_Method m = (jq_Method)it.next();
42 if (methodNames != null && !methodNames.contains(m.getName().toString()))
43 continue;
44 m.accept(mv);
45 }
46 }
47 }
48
49 }
50