From bd03a63787dd15ecb9840aa0ee0315d54d738564 Mon Sep 17 00:00:00 2001 From: adam Date: Sat, 8 Jul 2006 00:29:34 -0400 Subject: [PATCH 1/1] checkpoint darcs-hash:20060708042934-5007d-fd198d9b46f7ebed9231971eba8b2188b9cf47b6.gz --- .../sbp/meta/AnnotationGrammarBindingResolver.java | 32 ++++++++++++++------ src/edu/berkeley/sbp/misc/RegressionTests.java | 13 +------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/edu/berkeley/sbp/meta/AnnotationGrammarBindingResolver.java b/src/edu/berkeley/sbp/meta/AnnotationGrammarBindingResolver.java index ca10c04..cb2a161 100644 --- a/src/edu/berkeley/sbp/meta/AnnotationGrammarBindingResolver.java +++ b/src/edu/berkeley/sbp/meta/AnnotationGrammarBindingResolver.java @@ -15,6 +15,7 @@ public class AnnotationGrammarBindingResolver extends GrammarBindingResolver { private final Class _cl; private final Class[] _inner; + private final Method[] _allMethods; public AnnotationGrammarBindingResolver() { this(MetaGrammarBindings.class); @@ -22,23 +23,20 @@ public class AnnotationGrammarBindingResolver extends GrammarBindingResolver { public AnnotationGrammarBindingResolver(Class c) { this._cl = c; - this._inner = c.getDeclaredClasses(); + ArrayList alc = new ArrayList(); + ArrayList alm = new ArrayList(); + 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(); - } + public Object repeatTag() { return new Tree.ArrayBuildingTreeFunctor(); } 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) @@ -63,4 +61,18 @@ public class AnnotationGrammarBindingResolver extends GrammarBindingResolver { return Sequence.rewritingSequence(tag, els, labels, drops); } } + + // helper + + private static void add(Class cl, ArrayList alc, ArrayList 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); + } + } diff --git a/src/edu/berkeley/sbp/misc/RegressionTests.java b/src/edu/berkeley/sbp/misc/RegressionTests.java index 032e373..1646a17 100644 --- a/src/edu/berkeley/sbp/misc/RegressionTests.java +++ b/src/edu/berkeley/sbp/misc/RegressionTests.java @@ -92,18 +92,7 @@ public class RegressionTests { 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 t) { -- 1.7.10.4