Make EmptyExpression.INSTANCE immutable (cherry picked from commit 7e6ff28)
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/343e6143 Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/343e6143 Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/343e6143 Branch: refs/heads/GROOVY_2_5_X Commit: 343e6143b3cdfd1ca344a04e2807340ab7834d8a Parents: e01601e Author: sunlan <sun...@apache.org> Authored: Sat Jun 24 16:01:08 2017 +0800 Committer: sunlan <sun...@apache.org> Committed: Sat Jun 24 16:43:25 2017 +0800 ---------------------------------------------------------------------- .../groovy/ast/expr/EmptyExpression.java | 40 +++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/groovy/blob/343e6143/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 4de4193..6c3daf1 100644 --- a/src/main/org/codehaus/groovy/ast/expr/EmptyExpression.java +++ b/src/main/org/codehaus/groovy/ast/expr/EmptyExpression.java @@ -18,8 +18,12 @@ */ package org.codehaus.groovy.ast.expr; +import org.codehaus.groovy.ast.AnnotationNode; +import org.codehaus.groovy.ast.ClassNode; import org.codehaus.groovy.ast.GroovyCodeVisitor; +import java.util.List; + /** * This class is a place holder for an empty expression. * Empty expression are used in closures lists like (;). During @@ -30,7 +34,41 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor; * @see org.codehaus.groovy.ast.stmt.EmptyStatement */ public class EmptyExpression extends Expression { - public static final EmptyExpression INSTANCE = new EmptyExpression(); + public static final EmptyExpression INSTANCE = new EmptyExpression() { + @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(); + } + + private UnsupportedOperationException createUnsupportedOperationException() { + return new UnsupportedOperationException("EmptyExpression.INSTANCE is immutable"); + } + }; public Expression transformExpression(ExpressionTransformer transformer) { return this;