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 <[email protected]>
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());

Reply via email to