GROOVY-6094: Make the workaround more "local" to AntlrParserPlugin
diff --git a/src/main/org/codehaus/groovy/antlr/AntlrParserPlugin.java b/src/main/org/codehaus/groovy/antlr/AntlrParserPlugin.java
index 4fac26c..9b0e311 100644
--- a/src/main/org/codehaus/groovy/antlr/AntlrParserPlugin.java
+++ b/src/main/org/codehaus/groovy/antlr/AntlrParserPlugin.java
@@ -328,6 +328,9 @@
protected void importDef(AST importNode) {
try {
+ // GROOVY-6094
+ output.putNodeMetaData(ImportNode.class, ImportNode.class);
+
boolean isStatic = importNode.getType() == STATIC_IMPORT;
List<AnnotationNode> annotations = new ArrayList<AnnotationNode>();
@@ -390,11 +393,11 @@
} finally {
// we're using node metadata here in order to fix GROOVY-6094
// without breaking external APIs
- ImportNode node = (ImportNode) output.getNodeMetaData(ImportNode.class);
- if (node!=null) {
- configureAST(node, importNode);
- output.removeNodeMetaData(ImportNode.class);
+ Object node = output.getNodeMetaData(ImportNode.class);
+ if (node!=null && node!=ImportNode.class) {
+ configureAST((ImportNode)node, importNode);
}
+ output.removeNodeMetaData(ImportNode.class);
}
}
diff --git a/src/main/org/codehaus/groovy/ast/ModuleNode.java b/src/main/org/codehaus/groovy/ast/ModuleNode.java
index a10a5fc..47655d8 100644
--- a/src/main/org/codehaus/groovy/ast/ModuleNode.java
+++ b/src/main/org/codehaus/groovy/ast/ModuleNode.java
@@ -122,7 +122,7 @@
ImportNode importNode = new ImportNode(type, alias);
imports.put(alias, importNode);
importNode.addAnnotations(annotations);
- putNodeMetaData(ImportNode.class, importNode);
+ storeLastAddedImportNode(importNode);
}
public void addStarImport(String packageName) {
@@ -133,7 +133,7 @@
ImportNode importNode = new ImportNode(packageName);
importNode.addAnnotations(annotations);
starImports.add(importNode);
- putNodeMetaData(ImportNode.class, importNode);
+ storeLastAddedImportNode(importNode);
}
public void addStatement(Statement node) {
@@ -419,7 +419,7 @@
ImportNode node = new ImportNode(type, fieldName, alias);
node.addAnnotations(annotations);
staticImports.put(alias, node);
- putNodeMetaData(ImportNode.class, node);
+ storeLastAddedImportNode(node);
}
public void addStaticStarImport(String name, ClassNode type) {
@@ -430,9 +430,17 @@
ImportNode node = new ImportNode(type);
node.addAnnotations(annotations);
staticStarImports.put(name, node);
- putNodeMetaData(ImportNode.class, node);
+ storeLastAddedImportNode(node);
}
-
+
+ // This method only exists as a workaround for GROOVY-6094
+ // In order to keep binary compatibility
+ private void storeLastAddedImportNode(final ImportNode node) {
+ if (getNodeMetaData(ImportNode.class)==ImportNode.class) {
+ putNodeMetaData(ImportNode.class, node);
+ }
+ }
+
public String getMainClassName() {
return mainClassName;
}