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/ba3ad3a7 Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/ba3ad3a7 Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/ba3ad3a7 Branch: refs/heads/GROOVY_2_6_X Commit: ba3ad3a7ec1012b0c03ee07b984b12df16f48542 Parents: 4c09080 Author: sunlan <sun...@apache.org> Authored: Sat Jun 24 16:01:08 2017 +0800 Committer: sunlan <sun...@apache.org> Committed: Sat Jun 24 16:40:51 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/ba3ad3a7/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;