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;
}