You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2017/06/24 12:45:59 UTC

groovy git commit: Make EmptyExpression and EmptyStatement singleton and immutatble

Repository: groovy
Updated Branches:
  refs/heads/master 89b5b072a -> aeb4184ba


Make EmptyExpression and EmptyStatement singleton and immutatble


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/aeb4184b
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/aeb4184b
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/aeb4184b

Branch: refs/heads/master
Commit: aeb4184ba6d7104e21cd067fe585ded356588216
Parents: 89b5b07
Author: sunlan <su...@apache.org>
Authored: Sat Jun 24 20:45:46 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sat Jun 24 20:45:46 2017 +0800

----------------------------------------------------------------------
 .../groovy/ast/expr/EmptyExpression.java        | 94 ++++++++++++++++++++
 .../groovy/ast/stmt/EmptyStatement.java         | 70 +++++++++++++++
 .../groovy/control/StaticImportVisitor.java     |  2 +-
 .../AutoImplementASTTransformation.java         |  2 +-
 .../MapConstructorASTTransformation.java        |  4 +-
 .../TupleConstructorASTTransformation.java      |  4 +-
 .../stc/StaticTypeCheckingVisitor.java          |  2 +-
 .../markup/MarkupBuilderCodeTransformer.java    |  3 +-
 8 files changed, 172 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/aeb4184b/src/main/org/codehaus/groovy/ast/expr/EmptyExpression.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/ast/expr/EmptyExpression.java b/src/main/org/codehaus/groovy/ast/expr/EmptyExpression.java
index ae957a6..401f906 100644
--- a/src/main/org/codehaus/groovy/ast/expr/EmptyExpression.java
+++ b/src/main/org/codehaus/groovy/ast/expr/EmptyExpression.java
@@ -18,7 +18,14 @@
  */
 package org.codehaus.groovy.ast.expr;
 
+import org.codehaus.groovy.ast.ASTNode;
+import org.codehaus.groovy.ast.AnnotationNode;
+import org.codehaus.groovy.ast.ClassNode;
 import org.codehaus.groovy.ast.GroovyCodeVisitor;
+import org.codehaus.groovy.ast.NodeMetaDataHandler;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * This class is a place holder for an empty expression. 
@@ -33,6 +40,8 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
 public class EmptyExpression extends Expression {
     public static final EmptyExpression INSTANCE = new EmptyExpression();
 
+    private EmptyExpression() {}
+
     public Expression transformExpression(ExpressionTransformer transformer) {
         return this;
     }
@@ -40,4 +49,89 @@ public class EmptyExpression extends Expression {
     public void visit(GroovyCodeVisitor visitor) {
         return;
     }
+
+
+    @Override
+    public void setType(ClassNode t) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void addAnnotation(AnnotationNode value) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void addAnnotations(List<AnnotationNode> annotations) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setSynthetic(boolean synthetic) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setDeclaringClass(ClassNode declaringClass) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setHasNoRealSourcePosition(boolean value) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setLineNumber(int lineNumber) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setColumnNumber(int columnNumber) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setLastLineNumber(int lastLineNumber) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setLastColumnNumber(int lastColumnNumber) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setSourcePosition(ASTNode node) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void copyNodeMetaData(NodeMetaDataHandler other) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setNodeMetaData(Object key, Object value) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public Object putNodeMetaData(Object key, Object value) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void removeNodeMetaData(Object key) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setMetaDataMap(Map<?, ?> metaDataMap) {
+        throw createUnsupportedOperationException();
+    }
+
+    private UnsupportedOperationException createUnsupportedOperationException() {
+        return new UnsupportedOperationException("EmptyExpression.INSTANCE is immutable");
+    }
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/aeb4184b/src/main/org/codehaus/groovy/ast/stmt/EmptyStatement.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/ast/stmt/EmptyStatement.java b/src/main/org/codehaus/groovy/ast/stmt/EmptyStatement.java
index 6f44b1f..fa23659 100644
--- a/src/main/org/codehaus/groovy/ast/stmt/EmptyStatement.java
+++ b/src/main/org/codehaus/groovy/ast/stmt/EmptyStatement.java
@@ -18,7 +18,11 @@
  */
 package org.codehaus.groovy.ast.stmt;
 
+import org.codehaus.groovy.ast.ASTNode;
 import org.codehaus.groovy.ast.GroovyCodeVisitor;
+import org.codehaus.groovy.ast.NodeMetaDataHandler;
+
+import java.util.Map;
 
 /**
  * Represents an empty statement
@@ -28,6 +32,8 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
 public class EmptyStatement extends Statement {
     public static final EmptyStatement INSTANCE = new EmptyStatement();
+
+    private EmptyStatement() {}
     
     public void visit(GroovyCodeVisitor visitor) {
     }
@@ -35,4 +41,68 @@ public class EmptyStatement extends Statement {
     public boolean isEmpty() {
         return true;
     }
+
+    @Override
+    public void setStatementLabel(String label) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void addStatementLabel(String label) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setLineNumber(int lineNumber) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setColumnNumber(int columnNumber) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setLastLineNumber(int lastLineNumber) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setLastColumnNumber(int lastColumnNumber) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setSourcePosition(ASTNode node) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void copyNodeMetaData(NodeMetaDataHandler other) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setNodeMetaData(Object key, Object value) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public Object putNodeMetaData(Object key, Object value) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void removeNodeMetaData(Object key) {
+        throw createUnsupportedOperationException();
+    }
+
+    @Override
+    public void setMetaDataMap(Map<?, ?> metaDataMap) {
+        throw createUnsupportedOperationException();
+    }
+
+    private UnsupportedOperationException createUnsupportedOperationException() {
+        return new UnsupportedOperationException("EmptyStatement.INSTANCE is immutable");
+    }
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/aeb4184b/src/main/org/codehaus/groovy/control/StaticImportVisitor.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/control/StaticImportVisitor.java b/src/main/org/codehaus/groovy/control/StaticImportVisitor.java
index e055ebb..d4a2566 100644
--- a/src/main/org/codehaus/groovy/control/StaticImportVisitor.java
+++ b/src/main/org/codehaus/groovy/control/StaticImportVisitor.java
@@ -564,7 +564,7 @@ public class StaticImportVisitor extends ClassCodeExpressionTransformer {
     private Expression findStaticPropertyAccessorByFullName(ClassNode staticImportType, String accessorMethodName) {
         // anything will do as we only check size == 1
         ArgumentListExpression dummyArgs = new ArgumentListExpression();
-        dummyArgs.addExpression(new EmptyExpression());
+        dummyArgs.addExpression(EmptyExpression.INSTANCE);
         return findStaticMethod(staticImportType, accessorMethodName, (inLeftExpression ? dummyArgs : ArgumentListExpression.EMPTY_ARGUMENTS));
     }
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/aeb4184b/src/main/org/codehaus/groovy/transform/AutoImplementASTTransformation.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/AutoImplementASTTransformation.java b/src/main/org/codehaus/groovy/transform/AutoImplementASTTransformation.java
index 74124fd..592b2f2 100644
--- a/src/main/org/codehaus/groovy/transform/AutoImplementASTTransformation.java
+++ b/src/main/org/codehaus/groovy/transform/AutoImplementASTTransformation.java
@@ -85,7 +85,7 @@ public class AutoImplementASTTransformation extends AbstractASTTransformation {
             }
             createMethods(cNode, exception, message, (ClosureExpression) code);
             if (code != null) {
-                anno.setMember("code", new ClosureExpression(new Parameter[0], new EmptyStatement()));
+                anno.setMember("code", new ClosureExpression(new Parameter[0], EmptyStatement.INSTANCE));
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/groovy/blob/aeb4184b/src/main/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/MapConstructorASTTransformation.java b/src/main/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
index b5c5d1e..d5de8c1 100644
--- a/src/main/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
+++ b/src/main/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
@@ -108,10 +108,10 @@ public class MapConstructorASTTransformation extends AbstractASTTransformation {
 
             createConstructor(cNode, includeFields, includeProperties, includeSuperProperties, useSetters, excludes, includes, (ClosureExpression) pre, (ClosureExpression) post, source, allNames);
             if (pre != null) {
-                anno.setMember("pre", new ClosureExpression(new Parameter[0], new EmptyStatement()));
+                anno.setMember("pre", new ClosureExpression(new Parameter[0], EmptyStatement.INSTANCE));
             }
             if (post != null) {
-                anno.setMember("post", new ClosureExpression(new Parameter[0], new EmptyStatement()));
+                anno.setMember("post", new ClosureExpression(new Parameter[0], EmptyStatement.INSTANCE));
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/groovy/blob/aeb4184b/src/main/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java b/src/main/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
index 746eaf4..6ab0b96 100644
--- a/src/main/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
+++ b/src/main/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
@@ -138,10 +138,10 @@ public class TupleConstructorASTTransformation extends AbstractASTTransformation
                     callSuper, force, excludes, includes, useSetters, defaults, allNames, sourceUnit,
                     (ClosureExpression) pre, (ClosureExpression) post);
             if (pre != null) {
-                anno.setMember("pre", new ClosureExpression(new Parameter[0], new EmptyStatement()));
+                anno.setMember("pre", new ClosureExpression(new Parameter[0], EmptyStatement.INSTANCE));
             }
             if (post != null) {
-                anno.setMember("post", new ClosureExpression(new Parameter[0], new EmptyStatement()));
+                anno.setMember("post", new ClosureExpression(new Parameter[0], EmptyStatement.INSTANCE));
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/groovy/blob/aeb4184b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index c1548aa..b7f00b6 100644
--- a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -159,7 +159,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
     protected static final ClassNode MAP_ENTRY_TYPE = make(Map.Entry.class);
     protected static final ClassNode ENUMERATION_TYPE = make(Enumeration.class);
 
-    public static final Statement GENERATED_EMPTY_STATEMENT = new EmptyStatement();
+    public static final Statement GENERATED_EMPTY_STATEMENT = EmptyStatement.INSTANCE;
 
     public static final MethodNode CLOSURE_CALL_NO_ARG;
     public static final MethodNode CLOSURE_CALL_ONE_ARG;

http://git-wip-us.apache.org/repos/asf/groovy/blob/aeb4184b/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupBuilderCodeTransformer.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupBuilderCodeTransformer.java b/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupBuilderCodeTransformer.java
index b7537b6..69f2bb4 100644
--- a/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupBuilderCodeTransformer.java
+++ b/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupBuilderCodeTransformer.java
@@ -166,8 +166,7 @@ class MarkupBuilderCodeTransformer extends ClassCodeExpressionTransformer {
                 //  ...
                 // }
                 Map<String,ClassNode> modelTypes = extractModelTypesFromClosureExpression((ClosureExpression)right);
-                Expression result = new EmptyExpression();
-                result.setSourcePosition(bin);
+                Expression result = EmptyExpression.INSTANCE;
                 classNode.putNodeMetaData(MarkupTemplateEngine.MODELTYPES_ASTKEY, modelTypes);
                 return result;
             }