From 589d6bf1877cb4e3e8c28e0173c4f62cce3988c0 Mon Sep 17 00:00:00 2001 From: Sam Harwell Date: Wed, 18 Jul 2012 15:39:38 -0500 Subject: [PATCH] Remove field which hides another field with the same name; add check for this condition to OutputModelWalker --- tool/src/org/antlr/v4/codegen/OutputModelWalker.java | 8 ++++++++ tool/src/org/antlr/v4/codegen/model/LL1PlusBlock.java | 1 - 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tool/src/org/antlr/v4/codegen/OutputModelWalker.java b/tool/src/org/antlr/v4/codegen/OutputModelWalker.java index 58c887db5..544489656 100644 --- a/tool/src/org/antlr/v4/codegen/OutputModelWalker.java +++ b/tool/src/org/antlr/v4/codegen/OutputModelWalker.java @@ -95,6 +95,7 @@ public class OutputModelWalker { st.add(modelArgName, omo); // COMPUTE STs FOR EACH NESTED MODEL OBJECT MARKED WITH @ModelElement AND MAKE ST ATTRIBUTE + Set usedFieldNames = new HashSet(); Field fields[] = cl.getFields(); for (Field fi : fields) { ModelElement annotation = fi.getAnnotation(ModelElement.class); @@ -103,8 +104,15 @@ public class OutputModelWalker { } String fieldName = fi.getName(); + + if (!usedFieldNames.add(fieldName)) { + tool.errMgr.toolError(ErrorType.INTERNAL_ERROR, "Model object " + omo.getClass().getSimpleName() + " has multiple fields named '" + fieldName + "'"); + continue; + } + // Just don't set @ModelElement fields w/o formal arg in target ST if ( formalArgs.get(fieldName)==null ) continue; + try { Object o = fi.get(omo); if ( o instanceof OutputModelObject ) { // SINGLE MODEL OBJECT? diff --git a/tool/src/org/antlr/v4/codegen/model/LL1PlusBlock.java b/tool/src/org/antlr/v4/codegen/model/LL1PlusBlock.java index eebb3ba7c..e495249e5 100644 --- a/tool/src/org/antlr/v4/codegen/model/LL1PlusBlock.java +++ b/tool/src/org/antlr/v4/codegen/model/LL1PlusBlock.java @@ -46,7 +46,6 @@ public class LL1PlusBlock extends LL1Loop { public String loopCounterVar; public String[] exitLook; - @ModelElement public SrcOp loopExpr; @ModelElement public ThrowNoViableAlt error; public LL1PlusBlock(OutputModelFactory factory, GrammarAST plusRoot, List alts) {