You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2018/08/13 23:58:58 UTC
groovy git commit: GROOVY-8748: tweaks for 2_5_X branch
Repository: groovy
Updated Branches:
refs/heads/GROOVY_2_5_X e6ce34aca -> 32d2ae5f4
GROOVY-8748: tweaks for 2_5_X branch
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/32d2ae5f
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/32d2ae5f
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/32d2ae5f
Branch: refs/heads/GROOVY_2_5_X
Commit: 32d2ae5f417c8b479c5c291020d4cf81f0f17cac
Parents: e6ce34a
Author: Paul King <pa...@asert.com.au>
Authored: Tue Aug 14 09:58:47 2018 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Tue Aug 14 09:58:47 2018 +1000
----------------------------------------------------------------------
.../org/codehaus/groovy/ast/CompileUnit.java | 82 ++++++++++++++++++--
1 file changed, 74 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/32d2ae5f/src/main/java/org/codehaus/groovy/ast/CompileUnit.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/ast/CompileUnit.java b/src/main/java/org/codehaus/groovy/ast/CompileUnit.java
index a453bb1..065098d 100644
--- a/src/main/java/org/codehaus/groovy/ast/CompileUnit.java
+++ b/src/main/java/org/codehaus/groovy/ast/CompileUnit.java
@@ -19,6 +19,7 @@
package org.codehaus.groovy.ast;
import groovy.lang.GroovyClassLoader;
+import org.codehaus.groovy.GroovyBugError;
import org.codehaus.groovy.control.CompilerConfiguration;
import org.codehaus.groovy.control.SourceUnit;
import org.codehaus.groovy.control.messages.SyntaxErrorMessage;
@@ -41,7 +42,7 @@ import java.util.Map;
* It's attached to MethodNodes and ClassNodes and is used to find fully qualified names of classes,
* resolve imports, and that sort of thing.
*/
-public class CompileUnit implements NodeMetaDataHandler {
+public class CompileUnit {
private final List<ModuleNode> modules = new ArrayList<ModuleNode>();
private final Map<String, ClassNode> classes = new HashMap<String, ClassNode>();
@@ -51,7 +52,7 @@ public class CompileUnit implements NodeMetaDataHandler {
private final Map<String, ClassNode> classesToCompile = new HashMap<String, ClassNode>();
private final Map<String, SourceUnit> classNameToSource = new HashMap<String, SourceUnit>();
private final Map<String, InnerClassNode> generatedInnerClasses = new HashMap();
- private Map metaDataMap = null;
+ private ListHashMap metaDataMap = null;
public CompileUnit(GroovyClassLoader classLoader, CompilerConfiguration config) {
this(classLoader, null, config);
@@ -191,13 +192,78 @@ public class CompileUnit implements NodeMetaDataHandler {
return Collections.unmodifiableMap(generatedInnerClasses);
}
- @Override
- public ListHashMap getMetaDataMap() {
- return (ListHashMap) metaDataMap;
+ /**
+ * Gets the node meta data for the provided key.
+ *
+ * @param key - the meta data key
+ * @return the node meta data value for this key
+ */
+ public <T> T getNodeMetaData(Object key) {
+ if (metaDataMap == null) {
+ return (T) null;
+ }
+ return (T) metaDataMap.get(key);
}
- @Override
- public void setMetaDataMap(Map<?, ?> metaDataMap) {
- this.metaDataMap = metaDataMap;
+ /**
+ * Sets the node meta data for the provided key.
+ *
+ * @param key - the meta data key
+ * @param value - the meta data value
+ * @throws GroovyBugError if key is null or there is already meta
+ * data under that key
+ */
+ public void setNodeMetaData(Object key, Object value) {
+ if (key==null) throw new GroovyBugError("Tried to set meta data with null key on "+this+".");
+ if (metaDataMap == null) {
+ metaDataMap = new ListHashMap();
+ }
+ Object old = metaDataMap.put(key,value);
+ if (old!=null) throw new GroovyBugError("Tried to overwrite existing meta data "+this+".");
+ }
+
+ /**
+ * Sets the node meta data but allows overwriting values.
+ *
+ * @param key - the meta data key
+ * @param value - the meta data value
+ * @return the old node meta data value for this key
+ * @throws GroovyBugError if key is null
+ */
+ public Object putNodeMetaData(Object key, Object value) {
+ if (key == null) throw new GroovyBugError("Tried to set meta data with null key on " + this + ".");
+ if (metaDataMap == null) {
+ metaDataMap = new ListHashMap();
+ }
+ return metaDataMap.put(key, value);
+ }
+
+ /**
+ * Removes a node meta data entry.
+ *
+ * @param key - the meta data key
+ * @throws GroovyBugError if the key is null
+ */
+ public void removeNodeMetaData(Object key) {
+ if (key==null) throw new GroovyBugError("Tried to remove meta data with null key "+this+".");
+ if (metaDataMap == null) {
+ return;
+ }
+ metaDataMap.remove(key);
+ }
+
+ /**
+ * Returns an unmodifiable view of the current node metadata.
+ * @return the node metadata. Always not null.
+ */
+ public Map<?,?> getNodeMetaData() {
+ if (metaDataMap==null) {
+ return Collections.emptyMap();
+ }
+ return Collections.unmodifiableMap(metaDataMap);
+ }
+
+ public ListHashMap getMetaDataMap() {
+ return metaDataMap;
}
}