checkpoint
[sbp.git] / src / edu / berkeley / sbp / meta / AnnotationGrammarBindingResolver.java
index 1955f7f..825dc56 100644 (file)
@@ -35,19 +35,21 @@ public class AnnotationGrammarBindingResolver extends GrammarBindingResolver {
     }
 
     public Sequence tryResolveTag(String tag, String nonTerminalName, Element[] els, Object[] labels, boolean[] drops) {
+        MetaGrammar.Production p = new MetaGrammar.Production(tag, nonTerminalName, els, labels, drops);
         for(Method m : _cl.getMethods())
-            if (new MetaGrammar.Target(m).isCompatible(tag, nonTerminalName, els, labels, drops))
-                return new MetaGrammar.Target(m).makeSequence(tag, nonTerminalName, els, labels, drops);
+            if (new MetaGrammar.Target(m).isCompatible(p))
+                return new MetaGrammar.Target(m).makeSequence(p);
         for(Class c : _inner)
             for(Constructor con : c.getConstructors())
-                if (new MetaGrammar.Target(con).isCompatible(tag, nonTerminalName, els, labels, drops))
-                    return new MetaGrammar.Target(con).makeSequence(tag, nonTerminalName, els, labels, drops);
+                if (new MetaGrammar.Target(con).isCompatible(p))
+                    return new MetaGrammar.Target(con).makeSequence(p);
         for(Class c : _inner)
-            if (new MetaGrammar.Target(c).isCompatible(tag, nonTerminalName, els, labels, drops))
-                return new MetaGrammar.Target(c).makeSequence(tag, nonTerminalName, els, labels, drops);
+            if (new MetaGrammar.Target(c).isCompatible(p))
+                return new MetaGrammar.Target(c).makeSequence(p);
         return null;
     }
     public Sequence resolveTag(String tag, String nonTerminalName, Element[] els, Object[] labels, boolean[] drops) {
+        MetaGrammar.Production p = new MetaGrammar.Production(tag, nonTerminalName, els, labels, drops);
         Sequence ret = tryResolveTag(tag, nonTerminalName, els, labels, drops);
         if (ret != null) return ret;
         String message = "could not find a Java method/class/ctor matching tag \""+tag+