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 2019/08/06 05:52:33 UTC
[groovy] branch GROOVY_2_5_X updated: GROOVY-9153: follow-up
refactor - further cases which could cause issues down the track (port to
2_5_X)
This is an automated email from the ASF dual-hosted git repository.
paulk pushed a commit to branch GROOVY_2_5_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_2_5_X by this push:
new c0f07e8 GROOVY-9153: follow-up refactor - further cases which could cause issues down the track (port to 2_5_X)
c0f07e8 is described below
commit c0f07e88b2abc0125918f2430279fe16a2efcfae
Author: Paul King <pa...@asert.com.au>
AuthorDate: Tue Aug 6 15:50:11 2019 +1000
GROOVY-9153: follow-up refactor - further cases which could cause issues down the track (port to 2_5_X)
---
src/main/groovy/groovy/util/logging/Commons.java | 4 +++-
src/main/groovy/groovy/util/logging/Log.java | 4 +++-
src/main/groovy/groovy/util/logging/Log4j.java | 4 +++-
src/main/groovy/groovy/util/logging/Log4j2.java | 4 +++-
src/main/groovy/groovy/util/logging/Slf4j.java | 4 +++-
.../java/org/codehaus/groovy/antlr/AntlrParserPlugin.java | 8 +++++---
.../java/org/codehaus/groovy/ast/decompiled/Annotations.java | 4 +++-
.../groovy/ast/decompiled/MemberSignatureParser.java | 4 +++-
.../java/org/codehaus/groovy/ast/stmt/AssertStatement.java | 12 ++++++++----
.../java/org/codehaus/groovy/ast/stmt/ReturnStatement.java | 4 +++-
.../java/org/codehaus/groovy/ast/tools/GeneralUtils.java | 4 ++++
.../org/codehaus/groovy/classgen/asm/AssertionWriter.java | 11 +++++++----
.../groovy/classgen/asm/sc/StaticInvocationWriter.java | 3 ++-
.../groovy/transform/AutoCloneASTTransformation.java | 5 +++--
.../codehaus/groovy/transform/FieldASTTransformation.java | 3 ++-
.../org/codehaus/groovy/transform/LazyASTTransformation.java | 3 ++-
.../groovy/transform/TupleConstructorASTTransformation.java | 11 +++++++++--
.../groovy/transform/stc/StaticTypeCheckingVisitor.java | 1 -
src/main/java/org/codehaus/groovy/vmplugin/v5/Java5.java | 4 +++-
19 files changed, 69 insertions(+), 28 deletions(-)
diff --git a/src/main/groovy/groovy/util/logging/Commons.java b/src/main/groovy/groovy/util/logging/Commons.java
index 6148740..7f2a846 100644
--- a/src/main/groovy/groovy/util/logging/Commons.java
+++ b/src/main/groovy/groovy/util/logging/Commons.java
@@ -38,6 +38,8 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Locale;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
+
/**
* This local transform adds a logging ability to your program using
* Apache Commons logging. Every method call on a unbound variable named <i>log</i>
@@ -102,7 +104,7 @@ public @interface Commons {
return new TernaryExpression(
new BooleanExpression(condition),
originalExpression,
- ConstantExpression.NULL);
+ nullX());
}
}
}
diff --git a/src/main/groovy/groovy/util/logging/Log.java b/src/main/groovy/groovy/util/logging/Log.java
index 1a4e554..d34bb5b 100644
--- a/src/main/groovy/groovy/util/logging/Log.java
+++ b/src/main/groovy/groovy/util/logging/Log.java
@@ -41,6 +41,8 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Locale;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
+
/**
* This local transform adds a logging ability to your program using
* java.util.logging. Every method call on a unbound variable named <i>log</i>
@@ -113,7 +115,7 @@ public @interface Log {
return new TernaryExpression(
new BooleanExpression(condition),
originalExpression,
- ConstantExpression.NULL);
+ nullX());
}
}
diff --git a/src/main/groovy/groovy/util/logging/Log4j.java b/src/main/groovy/groovy/util/logging/Log4j.java
index 28633b5..1cf20df 100644
--- a/src/main/groovy/groovy/util/logging/Log4j.java
+++ b/src/main/groovy/groovy/util/logging/Log4j.java
@@ -39,6 +39,8 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Locale;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
+
/**
* This local transform adds a logging ability to your program using
* Log4j logging. Every method call on a unbound variable named <i>log</i>
@@ -113,7 +115,7 @@ public @interface Log4j {
return new TernaryExpression(
new BooleanExpression(condition),
originalExpression,
- ConstantExpression.NULL);
+ nullX());
}
}
}
diff --git a/src/main/groovy/groovy/util/logging/Log4j2.java b/src/main/groovy/groovy/util/logging/Log4j2.java
index a53874c..ff46ee8 100644
--- a/src/main/groovy/groovy/util/logging/Log4j2.java
+++ b/src/main/groovy/groovy/util/logging/Log4j2.java
@@ -38,6 +38,8 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Locale;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
+
/**
* This local transform adds a logging ability to your program using
* Log4j2 logging. Every method call on a unbound variable named <i>log</i>
@@ -101,7 +103,7 @@ public @interface Log4j2 {
return new TernaryExpression(
new BooleanExpression(condition),
originalExpression,
- ConstantExpression.NULL);
+ nullX());
}
}
}
diff --git a/src/main/groovy/groovy/util/logging/Slf4j.java b/src/main/groovy/groovy/util/logging/Slf4j.java
index 7561cf7..1e96b4c 100644
--- a/src/main/groovy/groovy/util/logging/Slf4j.java
+++ b/src/main/groovy/groovy/util/logging/Slf4j.java
@@ -38,6 +38,8 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Locale;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
+
/**
* This local transform adds a logging ability to your program using
* LogBack logging. Every method call on a unbound variable named <i>log</i>
@@ -101,7 +103,7 @@ public @interface Slf4j {
return new TernaryExpression(
new BooleanExpression(condition),
originalExpression,
- ConstantExpression.NULL);
+ nullX());
}
}
diff --git a/src/main/java/org/codehaus/groovy/antlr/AntlrParserPlugin.java b/src/main/java/org/codehaus/groovy/antlr/AntlrParserPlugin.java
index dee0a95..4b44eae 100644
--- a/src/main/java/org/codehaus/groovy/antlr/AntlrParserPlugin.java
+++ b/src/main/java/org/codehaus/groovy/antlr/AntlrParserPlugin.java
@@ -131,6 +131,8 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Set;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
+
/**
* A parser plugin which adapts the JSR Antlr Parser to the Groovy runtime
*/
@@ -1444,7 +1446,7 @@ public class AntlrParserPlugin extends ASTHelper implements ParserPlugin, Groovy
if (node != null) {
messageExpression = expression(node);
} else {
- messageExpression = ConstantExpression.NULL;
+ messageExpression = nullX();
}
AssertStatement assertStatement = new AssertStatement(booleanExpression, messageExpression);
configureAST(assertStatement, assertNode);
@@ -1618,7 +1620,7 @@ public class AntlrParserPlugin extends ASTHelper implements ParserPlugin, Groovy
//if (exprNode == null) {
// exprNode = node.getNextSibling();
//}
- Expression expression = exprNode == null ? ConstantExpression.NULL : expression(exprNode);
+ Expression expression = exprNode == null ? nullX() : expression(exprNode);
ReturnStatement returnStatement = new ReturnStatement(expression);
configureAST(returnStatement, node);
return returnStatement;
@@ -2811,7 +2813,7 @@ public class AntlrParserPlugin extends ASTHelper implements ParserPlugin, Groovy
protected Expression blockExpression(AST node) {
AST codeNode = node.getFirstChild();
- if (codeNode == null) return ConstantExpression.NULL;
+ if (codeNode == null) return nullX();
if (codeNode.getType() == EXPR && codeNode.getNextSibling() == null) {
// Simplify common case of {expr} to expr.
return expression(codeNode);
diff --git a/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java b/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java
index 07f0f63..9415ddc 100644
--- a/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java
+++ b/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java
@@ -33,6 +33,8 @@ import java.lang.reflect.Array;
import java.util.List;
import java.util.Map;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
+
class Annotations {
static AnnotationNode createAnnotationNode(AnnotationStub annotation, AsmReferenceResolver resolver) {
ClassNode classNode = resolver.resolveClassNullable(Type.getType(annotation.className).getClassName());
@@ -70,7 +72,7 @@ class Annotations {
if (value instanceof AnnotationStub) {
AnnotationNode annotationNode = createAnnotationNode((AnnotationStub) value, resolver);
- return annotationNode != null ? new AnnotationConstantExpression(annotationNode) : ConstantExpression.NULL;
+ return annotationNode != null ? new AnnotationConstantExpression(annotationNode) : nullX();
}
if (value != null && value.getClass().isArray()) {
diff --git a/src/main/java/org/codehaus/groovy/ast/decompiled/MemberSignatureParser.java b/src/main/java/org/codehaus/groovy/ast/decompiled/MemberSignatureParser.java
index 0cefbe2..dd73433 100644
--- a/src/main/java/org/codehaus/groovy/ast/decompiled/MemberSignatureParser.java
+++ b/src/main/java/org/codehaus/groovy/ast/decompiled/MemberSignatureParser.java
@@ -34,6 +34,8 @@ import org.objectweb.asm.signature.SignatureVisitor;
import java.util.List;
import java.util.Map;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
+
/**
* Utility methods for lazy class loading
*/
@@ -134,7 +136,7 @@ class MemberSignatureParser {
result.setAnnotationDefault(true);
} else {
// Seems wrong but otherwise some tests fail (e.g. TestingASTTransformsTest)
- result.setCode(new ReturnStatement(ConstantExpression.NULL));
+ result.setCode(new ReturnStatement(nullX()));
}
}
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/AssertStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/AssertStatement.java
index 2adab38..363e5ac 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/AssertStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/AssertStatement.java
@@ -23,6 +23,8 @@ import org.codehaus.groovy.ast.expr.BooleanExpression;
import org.codehaus.groovy.ast.expr.ConstantExpression;
import org.codehaus.groovy.ast.expr.Expression;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
+
/**
* Represents an assert statement.
* E.g.:
@@ -34,16 +36,16 @@ public class AssertStatement extends Statement {
private BooleanExpression booleanExpression;
private Expression messageExpression;
-
+
public AssertStatement(BooleanExpression booleanExpression) {
- this(booleanExpression, ConstantExpression.NULL);
+ this(booleanExpression, nullX());
}
-
+
public AssertStatement(BooleanExpression booleanExpression, Expression messageExpression) {
this.booleanExpression = booleanExpression;
this.messageExpression = messageExpression;
}
-
+
public void visit(GroovyCodeVisitor visitor) {
visitor.visitAssertStatement(this);
}
@@ -55,9 +57,11 @@ public class AssertStatement extends Statement {
public BooleanExpression getBooleanExpression() {
return booleanExpression;
}
+
public void setBooleanExpression(BooleanExpression booleanExpression) {
this.booleanExpression = booleanExpression;
}
+
public void setMessageExpression(Expression messageExpression) {
this.messageExpression = messageExpression;
}
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/ReturnStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/ReturnStatement.java
index bfa34d8..432fe63 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/ReturnStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/ReturnStatement.java
@@ -22,6 +22,8 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
import org.codehaus.groovy.ast.expr.ConstantExpression;
import org.codehaus.groovy.ast.expr.Expression;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
+
/**
* A return statement
*/
@@ -30,7 +32,7 @@ public class ReturnStatement extends Statement {
* Only used for synthetic return statements emitted by the compiler.
* For comparisons use isReturningNullOrVoid() instead.
*/
- public static final ReturnStatement RETURN_NULL_OR_VOID = new ReturnStatement(ConstantExpression.NULL);
+ public static final ReturnStatement RETURN_NULL_OR_VOID = new ReturnStatement(nullX());
private Expression expression;
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java b/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
index 2acdef6..adc9716 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
@@ -682,6 +682,10 @@ public class GeneralUtils {
return new BinaryExpression(lhv, NE, rhv);
}
+ public static Expression nullX() {
+ return new ConstantExpression(null);
+ }
+
public static BooleanExpression notNullX(Expression argExpr) {
return new BooleanExpression(new BinaryExpression(argExpr, NE, new ConstantExpression(null)));
}
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/AssertionWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/AssertionWriter.java
index 2200c30..b25fed6 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/AssertionWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/AssertionWriter.java
@@ -67,10 +67,9 @@ public class AssertionWriter {
public void writeAssertStatement(AssertStatement statement) {
MethodVisitor mv = controller.getMethodVisitor();
OperandStack operandStack = controller.getOperandStack();
-
- boolean rewriteAssert = true;
+
// don't rewrite assertions with message
- rewriteAssert = statement.getMessageExpression() == ConstantExpression.NULL;
+ boolean rewriteAssert = isNull(statement.getMessageExpression());
AssertionTracker oldTracker = assertionTracker;
Janitor janitor = new Janitor();
final Label tryStart = new Label();
@@ -149,7 +148,11 @@ public class AssertionWriter {
// power asserts
janitor.cleanup();
}
-
+
+ private boolean isNull(Expression messageExpression) {
+ return messageExpression instanceof ConstantExpression && ((ConstantExpression) messageExpression).isNullExpression();
+ }
+
private void writeSourcelessAssertText(AssertStatement statement) {
MethodVisitor mv = controller.getMethodVisitor();
OperandStack operandStack = controller.getOperandStack();
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticInvocationWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticInvocationWriter.java
index 01e8b13..065220c 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticInvocationWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticInvocationWriter.java
@@ -75,6 +75,7 @@ import static org.apache.groovy.ast.tools.ClassNodeUtils.samePackageName;
import static org.codehaus.groovy.ast.ClassHelper.CLOSURE_TYPE;
import static org.codehaus.groovy.ast.ClassHelper.OBJECT_TYPE;
import static org.codehaus.groovy.ast.ClassHelper.getWrapper;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
import static org.codehaus.groovy.transform.sc.StaticCompilationMetadataKeys.PRIVATE_BRIDGE_METHODS;
import static org.objectweb.asm.Opcodes.ACONST_NULL;
import static org.objectweb.asm.Opcodes.ALOAD;
@@ -257,7 +258,7 @@ public class StaticInvocationWriter extends InvocationWriter {
}
}
}
- ArgumentListExpression newArgs = new ArgumentListExpression(target.isStatic()?new ConstantExpression(null):fixedReceiver);
+ ArgumentListExpression newArgs = new ArgumentListExpression(target.isStatic() ? nullX() : fixedReceiver);
for (Expression expression : args.getExpressions()) {
newArgs.addExpression(expression);
}
diff --git a/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java
index fd967dc..4e5809e 100644
--- a/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java
@@ -73,6 +73,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.ifS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.isInstanceOfX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.isOrImplements;
import static org.codehaus.groovy.ast.tools.GeneralUtils.localVarX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
@@ -216,11 +217,11 @@ public class AutoCloneASTTransformation extends AbstractASTTransformation {
}
private static Expression callCloneDynamicX(Expression target) {
- return callX(INVOKER_TYPE, "invokeMethod", args(target, constX("clone"), ConstantExpression.NULL));
+ return callX(INVOKER_TYPE, "invokeMethod", args(target, constX("clone"), nullX()));
}
private static Expression callCloneDirectX(Expression direct) {
- return ternaryX(equalsNullX(direct), ConstantExpression.NULL, callX(direct, "clone"));
+ return ternaryX(equalsNullX(direct), nullX(), callX(direct, "clone"));
}
private static void createSimpleClone(ClassNode cNode, List<FieldNode> fieldNodes, List<String> excludes) {
diff --git a/src/main/java/org/codehaus/groovy/transform/FieldASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/FieldASTTransformation.java
index 0cb9515..cac9101 100644
--- a/src/main/java/org/codehaus/groovy/transform/FieldASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/FieldASTTransformation.java
@@ -58,6 +58,7 @@ import static org.apache.groovy.ast.tools.ClassNodeUtils.addGeneratedConstructor
import static org.codehaus.groovy.ast.ClassHelper.make;
import static org.codehaus.groovy.ast.tools.GeneralUtils.assignX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.block;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
@@ -171,7 +172,7 @@ public class FieldASTTransformation extends ClassCodeExpressionTransformer imple
// TODO make EmptyExpression work
// partially works but not if only thing in script
// return EmptyExpression.INSTANCE;
- return new ConstantExpression(null);
+ return nullX();
}
addError("Annotation " + MY_TYPE_NAME + " can only be used within a Script body.", expr);
return expr;
diff --git a/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java
index 06ec761..96deaf0 100644
--- a/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java
@@ -54,6 +54,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.declS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.ifElseS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.localVarX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.notNullX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
@@ -68,7 +69,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
public class LazyASTTransformation extends AbstractASTTransformation {
private static final ClassNode SOFT_REF = makeWithoutCaching(SoftReference.class, false);
- private static final Expression NULL_EXPR = ConstantExpression.NULL;
+ private static final Expression NULL_EXPR = nullX();
public void visit(ASTNode[] nodes, SourceUnit source) {
init(nodes, source);
diff --git a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
index 8dd0f7a..1422fe7 100644
--- a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
@@ -33,6 +33,7 @@ import org.codehaus.groovy.ast.ConstructorNode;
import org.codehaus.groovy.ast.FieldNode;
import org.codehaus.groovy.ast.Parameter;
import org.codehaus.groovy.ast.PropertyNode;
+import org.codehaus.groovy.ast.expr.BooleanExpression;
import org.codehaus.groovy.ast.expr.ClosureExpression;
import org.codehaus.groovy.ast.expr.ConstantExpression;
import org.codehaus.groovy.ast.expr.Expression;
@@ -73,6 +74,8 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.equalsNullX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.getAllProperties;
import static org.codehaus.groovy.ast.tools.GeneralUtils.ifElseS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.ifS;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.isNullX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
@@ -298,14 +301,18 @@ public class TupleConstructorASTTransformation extends AbstractASTTransformation
}
private static Expression providedOrDefaultInitialValue(FieldNode fNode) {
- Expression initialExp = fNode.getInitialExpression() != null ? fNode.getInitialExpression() : ConstantExpression.NULL;
+ Expression initialExp = fNode.getInitialExpression() != null ? fNode.getInitialExpression() : nullX();
final ClassNode paramType = fNode.getType();
- if (ClassHelper.isPrimitiveType(paramType) && initialExp.equals(ConstantExpression.NULL)) {
+ if (ClassHelper.isPrimitiveType(paramType) && isNull(initialExp)) {
initialExp = primitivesInitialValues.get(paramType.getTypeClass());
}
return initialExp;
}
+ private static boolean isNull(Expression exp) {
+ return exp instanceof ConstantExpression && ((ConstantExpression) exp).isNullExpression();
+ }
+
public static void addSpecialMapConstructors(int modifiers, ClassNode cNode, String message, boolean addNoArg) {
Parameter[] parameters = params(new Parameter(LHMAP_TYPE, "__namedArgs"));
BlockStatement code = new BlockStatement();
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index 3579f18..9eaf802 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -311,7 +311,6 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
protected final ReturnAdder.ReturnStatementListener returnListener = new ReturnAdder.ReturnStatementListener() {
public void returnStatementAdded(final ReturnStatement returnStatement) {
- if (returnStatement.getExpression() == ConstantExpression.NULL) return;
if (isNullConstant(returnStatement.getExpression())) return;
checkReturnType(returnStatement);
if (typeCheckingContext.getEnclosingClosure() != null) {
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v5/Java5.java b/src/main/java/org/codehaus/groovy/vmplugin/v5/Java5.java
index 44d18ee..fcb4dfd 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v5/Java5.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v5/Java5.java
@@ -56,6 +56,8 @@ import java.lang.reflect.TypeVariable;
import java.lang.reflect.WildcardType;
import java.util.List;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
+
/**
* java 5 based functions
*/
@@ -353,7 +355,7 @@ public class Java5 implements VMPlugin {
private static void setMethodDefaultValue(MethodNode mn, Method m) {
Object defaultValue = m.getDefaultValue();
- ConstantExpression cExp = ConstantExpression.NULL;
+ ConstantExpression cExp = (ConstantExpression) nullX();
if (defaultValue!=null) cExp = new ConstantExpression(defaultValue);
mn.setCode(new ReturnStatement(cExp));
mn.setAnnotationDefault(true);