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 2024/06/21 21:19:23 UTC

(groovy) branch master updated: minor items

This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new e6415953ea minor items
e6415953ea is described below

commit e6415953ea9045750b33861fea613448dd6622cc
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Fri Jun 21 16:20:46 2024 -0500

    minor items
---
 .../codehaus/groovy/classgen/AsmClassGenerator.java | 21 ++++++---------------
 .../classgen/asm/sc/StaticTypesCallSiteWriter.java  | 10 ++++++----
 .../transform/stc/StaticTypeCheckingVisitor.java    | 11 ++++-------
 3 files changed, 16 insertions(+), 26 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
index 60dfc25210..dba0284fab 100644
--- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
@@ -260,7 +260,6 @@ public class AsmClassGenerator extends ClassGenerator {
     private static final MethodCaller createGroovyObjectWrapperMethod = MethodCaller.newStatic(ScriptBytecodeAdapter.class, "createGroovyObjectWrapper");
 
     private final Map<String,ClassNode> referencedClasses = new HashMap<>();
-    private boolean passingParams;
 
     public static final boolean CREATE_DEBUG_INFO = true;
     public static final boolean CREATE_LINE_NUMBER_INFO = true;
@@ -1390,12 +1389,12 @@ public class AsmClassGenerator extends ClassGenerator {
 
     @Override
     public void visitVariableExpression(final VariableExpression expression) {
-        final String variableName = expression.getName();
+        CompileStack compileStack = controller.getCompileStack();
 
         if (expression.isThisExpression()) {
             // "this" in static context is Class instance
-            if (controller.isStaticMethod() || controller.getCompileStack().isInSpecialConstructorCall()
-                    || (!controller.getCompileStack().isImplicitThis() && controller.isStaticContext())) {
+            if (controller.isStaticMethod() || compileStack.isInSpecialConstructorCall()
+                    || (!compileStack.isImplicitThis() && controller.isStaticContext())) {
                 classX(controller.getThisType()).visit(this);
             } else {
                 loadThis(expression);
@@ -1414,26 +1413,18 @@ public class AsmClassGenerator extends ClassGenerator {
             return;
         }
 
-        BytecodeVariable variable = controller.getCompileStack().getVariable(variableName, false);
+        BytecodeVariable variable = compileStack.getVariable(expression.getName(), /*throwIfMissing*/false);
         if (variable != null) {
             controller.getOperandStack().loadOrStoreVariable(variable, expression.isUseReferenceDirectly());
-        } else if (passingParams && controller.isInScriptBody()) {
-            MethodVisitor mv = controller.getMethodVisitor();
-            mv.visitTypeInsn(NEW, "org/codehaus/groovy/runtime/ScriptReference");
-            mv.visitInsn(DUP);
-            loadThisOrOwner();
-            mv.visitLdcInsn(variableName);
-            mv.visitMethodInsn(INVOKESPECIAL, "org/codehaus/groovy/runtime/ScriptReference", "<init>", "(Lgroovy/lang/Script;Ljava/lang/String;)V", false);
         } else {
-            PropertyExpression pexp = thisPropX(true, variableName);
-            pexp.getObjectExpression().setSourcePosition(expression);
+            PropertyExpression pexp = thisPropX(true, expression.getName());
             pexp.getProperty().setSourcePosition(expression);
             pexp.setType(expression.getType());
             pexp.copyNodeMetaData(expression);
             pexp.visit(this);
         }
 
-        if (!controller.getCompileStack().isLHS()) {
+        if (!compileStack.isLHS()) {
             controller.getAssertionWriter().record(expression);
         }
     }
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
index 51b7f7d358..6c1889ce3b 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
@@ -331,8 +331,7 @@ public class StaticTypesCallSiteWriter extends CallSiteWriter {
         if (field != null) {
             ClassNode classNode = controller.getClassNode();
             if (field.isPrivate() && !receiverType.equals(classNode)
-                    && (StaticInvocationWriter.isPrivateBridgeMethodsCallAllowed(receiverType, classNode)
-                        || StaticInvocationWriter.isPrivateBridgeMethodsCallAllowed(classNode, receiverType))) {
+                    && StaticInvocationWriter.isPrivateBridgeMethodsCallAllowed(receiverType, classNode)) {
                 Map<String, MethodNode> accessors = receiverType.redirect().getNodeMetaData(StaticCompilationMetadataKeys.PRIVATE_FIELDS_ACCESSORS);
                 if (accessors != null) {
                     MethodNode methodNode = accessors.get(fieldName);
@@ -355,12 +354,13 @@ public class StaticTypesCallSiteWriter extends CallSiteWriter {
             }
         } else if (implicitThis) {
             ClassNode outerClass = receiverType.getOuterClass();
-            if (outerClass != null && !receiverType.isStaticClass()) {
+            if (outerClass != null && (receiverType.getModifiers() & ACC_STATIC) == 0) {
                 Expression expr;
                 ClassNode thisType = outerClass;
                 if (controller.isInGeneratedFunction()) {
                     while (isGeneratedFunction(thisType)) {
                         thisType = thisType.getOuterClass();
+                        // TODO: stop if thisType is static?
                     }
 
                     MethodCallExpression call = callThisX("getThisObject");
@@ -383,9 +383,11 @@ public class StaticTypesCallSiteWriter extends CallSiteWriter {
 
     @Override
     public void makeGroovyObjectGetPropertySite(final Expression receiver, final String propertyName, final boolean safe, final boolean implicitThis) {
-        ClassNode receiverType = controller.getClassNode();
+        ClassNode receiverType;
         if (!isThisExpression(receiver) || controller.isInGeneratedFunction()) {
             receiverType = getPropertyOwnerType(receiver); // GROOVY-9967, et al.
+        } else {
+            receiverType = controller.getClassNode();
         }
 
         if (implicitThis && controller.getInvocationWriter() instanceof StaticInvocationWriter) {
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 d309551fdc..3d4fd070c7 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -685,9 +685,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
         } else if (accessedVariable instanceof FieldNode) {
             if (tryVariableExpressionAsProperty(vexp, name)) {
                 ClassNode temporaryType = getInferredTypeFromTempInfo(vexp, null); // GROOVY-9454
-                if (temporaryType == null) {
-                    storeType(vexp, getType(vexp));
-                } else if (!isObjectType(temporaryType)) {
+                if (temporaryType != null && !isObjectType(temporaryType)) {
                     vexp.putNodeMetaData(INFERRED_TYPE, temporaryType);
                 }
                 if (vexp.getAccessedVariable() != accessedVariable) { // GROOVY-11360: field hidden by dynamic property
@@ -753,9 +751,8 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
         PropertyExpression pexp = thisPropX(true, dynName);
         if (existsProperty(pexp, !typeCheckingContext.isTargetOfEnclosingAssignment(vexp))) {
             vexp.copyNodeMetaData(pexp.getObjectExpression());
-            for (Object key : new Object[]{IMPLICIT_RECEIVER, READONLY_PROPERTY, PV_FIELDS_ACCESS, PV_FIELDS_MUTATION, DECLARATION_INFERRED_TYPE, DIRECT_METHOD_CALL_TARGET}) {
-                Object val = pexp.getNodeMetaData(key);
-                if (val != null) vexp.putNodeMetaData(key, val);
+            for (Object key : new Object[]{IMPLICIT_RECEIVER, READONLY_PROPERTY, PV_FIELDS_ACCESS, PV_FIELDS_MUTATION, DIRECT_METHOD_CALL_TARGET}) {
+                vexp.putNodeMetaData(key, pexp.getNodeMetaData(key));
             }
             ClassNode type = pexp.getNodeMetaData(INFERRED_TYPE);
             if (vexp.isClosureSharedVariable()) {
@@ -1986,7 +1983,7 @@ out:    if ((samParameterTypes.length == 1 && isOrImplements(samParameterTypes[0
         if (delegationData != null) {
             expression.putNodeMetaData(IMPLICIT_RECEIVER, delegationData);
         }
-        if (Modifier.isFinal(property.getModifiers())) {
+        if (property.isFinal()) {
             expression.putNodeMetaData(READONLY_PROPERTY, Boolean.TRUE);
         } else {
             expression.removeNodeMetaData(READONLY_PROPERTY);