checkpoint
[sbp.git] / src / edu / berkeley / sbp / meta / AnnotationGrammarBindingResolver.java
index 3aa832a..f3af6df 100644 (file)
@@ -15,14 +15,20 @@ public class AnnotationGrammarBindingResolver extends GrammarBindingResolver {
     private static boolean harsh = true;
 
     private final Class _cl;
-    private final Class[] _inner;
-    private final Method[] _allMethods;
+    private Class[] _inner = new Class[0];
+    private Method[] _allMethods = new Method[0];
 
     public AnnotationGrammarBindingResolver(Class c) {
         this._cl = c;
+        add(c, "");
+    }
+
+    public void add(Class c, String prefix) {
         ArrayList<Class> alc = new ArrayList<Class>();
+        for(Class cc : _inner) alc.add(cc);
         ArrayList<Method> alm = new ArrayList<Method>();
-        add(c, alc, alm);
+        for(Method m : _allMethods) alm.add(m);
+        add(c, alc, alm, "");
         this._inner = (Class[])alc.toArray(new Class[0]);
         this._allMethods = (Method[])alm.toArray(new Method[0]);
     }
@@ -58,16 +64,16 @@ public class AnnotationGrammarBindingResolver extends GrammarBindingResolver {
 
     // helper
 
-    private static void add(Class cl, ArrayList<Class> alc, ArrayList<Method> alm) {
+    private static void add(Class cl, ArrayList<Class> alc, ArrayList<Method> alm, String prefix) {
         if (cl==null) return;
         for(Method m : cl.getDeclaredMethods())
             alm.add(m);
         for(Class c : cl.getDeclaredClasses()) {
             alc.add(c);
-            add(c, alc, alm);
+            add(c, alc, alm, prefix);
         }
         if (cl.getSuperclass() != Object.class)
-            add(cl.getSuperclass(), alc, alm);
+            add(cl.getSuperclass(), alc, alm, prefix);
     }
 
 }