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);