checkpoint
authoradam <adam@megacz.com>
Sat, 8 Jul 2006 04:29:34 +0000 (00:29 -0400)
committeradam <adam@megacz.com>
Sat, 8 Jul 2006 04:29:34 +0000 (00:29 -0400)
darcs-hash:20060708042934-5007d-fd198d9b46f7ebed9231971eba8b2188b9cf47b6.gz

src/edu/berkeley/sbp/meta/AnnotationGrammarBindingResolver.java
src/edu/berkeley/sbp/misc/RegressionTests.java

index ca10c04..cb2a161 100644 (file)
@@ -15,6 +15,7 @@ public class AnnotationGrammarBindingResolver extends GrammarBindingResolver {
 
     private final Class _cl;
     private final Class[] _inner;
 
     private final Class _cl;
     private final Class[] _inner;
+    private final Method[] _allMethods;
 
     public AnnotationGrammarBindingResolver() {
         this(MetaGrammarBindings.class);
 
     public AnnotationGrammarBindingResolver() {
         this(MetaGrammarBindings.class);
@@ -22,23 +23,20 @@ public class AnnotationGrammarBindingResolver extends GrammarBindingResolver {
 
     public AnnotationGrammarBindingResolver(Class c) {
         this._cl = c;
 
     public AnnotationGrammarBindingResolver(Class c) {
         this._cl = c;
-        this._inner = c.getDeclaredClasses();
+        ArrayList<Class> alc = new ArrayList<Class>();
+        ArrayList<Method> alm = new ArrayList<Method>();
+        add(c, alc, alm);
+        this._inner = (Class[])alc.toArray(new Class[0]);
+        this._allMethods = (Method[])alm.toArray(new Method[0]);
     }
 
     }
 
-    public AnnotationGrammarBindingResolver(Class c, Class[] inner) {
-        this._cl = c;
-        this._inner = inner;
-    }
-
-    public Object repeatTag() {
-        return new Tree.ArrayBuildingTreeFunctor<Object>();
-    }
+    public Object repeatTag() { return new Tree.ArrayBuildingTreeFunctor<Object>(); }
 
     public Sequence tryResolveTag(String tag, String nonTerminalName, Element[] els, Object[] labels, boolean[] drops) {
         MetaGrammar.Production p = new MetaGrammar.Production(tag, nonTerminalName, els, labels, drops);
             if (labels != null && labels.length > 0 && "numeric".equals(labels[0]))
                 System.out.println("here! ");
 
     public Sequence tryResolveTag(String tag, String nonTerminalName, Element[] els, Object[] labels, boolean[] drops) {
         MetaGrammar.Production p = new MetaGrammar.Production(tag, nonTerminalName, els, labels, drops);
             if (labels != null && labels.length > 0 && "numeric".equals(labels[0]))
                 System.out.println("here! ");
-        for(Method m : _cl.getMethods())
+        for(Method m : _allMethods)
             if (new MetaGrammar.Target(m).isCompatible(p))
                 return new MetaGrammar.Target(m).makeSequence(p);
         for(Class c : _inner)
             if (new MetaGrammar.Target(m).isCompatible(p))
                 return new MetaGrammar.Target(m).makeSequence(p);
         for(Class c : _inner)
@@ -63,4 +61,18 @@ public class AnnotationGrammarBindingResolver extends GrammarBindingResolver {
             return Sequence.rewritingSequence(tag, els, labels, drops);
         }
     }
             return Sequence.rewritingSequence(tag, els, labels, drops);
         }
     }
+
+    // helper
+
+    private static void add(Class cl, ArrayList<Class> alc, ArrayList<Method> alm) {
+        for(Method m : cl.getDeclaredMethods())
+            alm.add(m);
+        for(Class c : cl.getDeclaredClasses()) {
+            alc.add(c);
+            add(c, alc, alm);
+        }
+        if (cl.getSuperclass() != Object.class)
+            add(cl.getSuperclass(), alc, alm);
+    }
+
 }
 }
index 032e373..1646a17 100644 (file)
@@ -92,18 +92,7 @@ public class RegressionTests {
 
     public static class TestCaseMaker extends AnnotationGrammarBindingResolver {
         public TestCaseMaker() {
 
     public static class TestCaseMaker extends AnnotationGrammarBindingResolver {
         public TestCaseMaker() {
-            super(TestCaseMakerHelper.class, new Class[] {
-                     MetaGrammarBindings.Grammar.class,
-                     MetaGrammarBindings.NonTerminal.class,
-                     MetaGrammarBindings.AnonUn.class,
-                     MetaGrammarBindings.Range.class,
-                     MetaGrammarBindings.El.class,
-                     MetaGrammarBindings.Seq.class,
-                     MetaGrammarBindings.NonTerminalReference.class,
-                     MetaGrammarBindings.Literal.class,
-                     MetaGrammarBindings.XTree.class,
-                     MetaGrammarBindings.CharClass.class
-            });
+            super(TestCaseMakerHelper.class);
         }
         public static class TestCaseMakerHelper extends MetaGrammarBindings {
             public static @bind.as("grammaro") @bind.raw Object grammaro(Iterable<Tree> t) {
         }
         public static class TestCaseMakerHelper extends MetaGrammarBindings {
             public static @bind.as("grammaro") @bind.raw Object grammaro(Iterable<Tree> t) {