You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2023/03/13 22:54:32 UTC
[groovy] 01/01: fix for NPE
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_2_5_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit f80d4981b035a0e0492cb1619067b2f9419e1e52
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Mon Mar 13 17:54:17 2023 -0500
fix for NPE
---
.../java/org/codehaus/groovy/ast/expr/FieldExpression.java | 14 ++++++++------
.../groovy/classgen/InnerClassCompletionVisitor.java | 8 ++++----
2 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/FieldExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/FieldExpression.java
index 67350ff2e1..78a4c028a3 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/FieldExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/FieldExpression.java
@@ -22,6 +22,8 @@ import org.codehaus.groovy.ast.ClassNode;
import org.codehaus.groovy.ast.FieldNode;
import org.codehaus.groovy.ast.GroovyCodeVisitor;
+import static java.util.Objects.requireNonNull;
+
/**
* Represents a field access such as the expression "this.foo".
*/
@@ -30,17 +32,17 @@ public class FieldExpression extends Expression {
private final FieldNode field;
private boolean useRef;
- public FieldExpression(FieldNode field) {
- this.field = field;
+ public FieldExpression(final FieldNode field) {
+ this.field = requireNonNull(field);
}
@Override
- public void visit(GroovyCodeVisitor visitor) {
+ public void visit(final GroovyCodeVisitor visitor) {
visitor.visitFieldExpression(this);
}
@Override
- public Expression transformExpression(ExpressionTransformer transformer) {
+ public Expression transformExpression(final ExpressionTransformer transformer) {
return this;
}
@@ -63,7 +65,7 @@ public class FieldExpression extends Expression {
}
@Override
- public void setType(ClassNode type) {
+ public void setType(final ClassNode type) {
super.setType(type);
field.setType(type);
}
@@ -76,7 +78,7 @@ public class FieldExpression extends Expression {
return useRef;
}
- public void setUseReferenceDirectly(boolean useRef) {
+ public void setUseReferenceDirectly(final boolean useRef) {
this.useRef = useRef;
}
diff --git a/src/main/java/org/codehaus/groovy/classgen/InnerClassCompletionVisitor.java b/src/main/java/org/codehaus/groovy/classgen/InnerClassCompletionVisitor.java
index 445ed0a82b..ee77db0d0c 100644
--- a/src/main/java/org/codehaus/groovy/classgen/InnerClassCompletionVisitor.java
+++ b/src/main/java/org/codehaus/groovy/classgen/InnerClassCompletionVisitor.java
@@ -52,7 +52,7 @@ public class InnerClassCompletionVisitor extends InnerClassVisitorHelper impleme
private final SourceUnit sourceUnit;
private ClassNode classNode;
- private FieldNode thisField = null;
+ private FieldNode thisField;
private static final String
CLOSURE_INTERNAL_NAME = BytecodeHelper.getClassInternalName(ClassHelper.CLOSURE_TYPE),
@@ -71,8 +71,9 @@ public class InnerClassCompletionVisitor extends InnerClassVisitorHelper impleme
public void visitClass(ClassNode node) {
classNode = node;
thisField = null;
+ if (node.isEnum() || node.isInterface()) return;
InnerClassNode innerClass = null;
- if (!node.isEnum() && !node.isInterface() && node instanceof InnerClassNode) {
+ if (node instanceof InnerClassNode) {
innerClass = (InnerClassNode) node;
thisField = innerClass.getField("this$0");
if (innerClass.getVariableScope() == null && innerClass.getDeclaredConstructors().isEmpty()) {
@@ -80,7 +81,6 @@ public class InnerClassCompletionVisitor extends InnerClassVisitorHelper impleme
addGeneratedConstructor(innerClass, ACC_PUBLIC, Parameter.EMPTY_ARRAY, null, null);
}
}
- if (node.isEnum() || node.isInterface()) return;
// use Iterator.hasNext() to check for available inner classes
if (node.getInnerClasses().hasNext()) addDispatcherMethods(node);
if (innerClass == null) return;
@@ -419,7 +419,7 @@ public class InnerClassCompletionVisitor extends InnerClassVisitorHelper impleme
block = (BlockStatement) code;
}
BlockStatement newCode = new BlockStatement();
- addFieldInit(thisPara, thisField, newCode);
+ if (thisField != null) addFieldInit(thisPara, thisField, newCode);
ConstructorCallExpression cce = getFirstIfSpecialConstructorCall(block);
if (cce == null) {
cce = new ConstructorCallExpression(ClassNode.SUPER, new TupleExpression());