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 2022/02/19 16:33:14 UTC
[groovy] 01/02: GROOVY-8448: "this.name" from anon. inner class
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 38c9bd5ae655fbb3449003ed91274cf2caa2c51f
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Fri Feb 18 16:12:40 2022 -0600
GROOVY-8448: "this.name" from anon. inner class
Conflicts:
src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
---
.../org/codehaus/groovy/classgen/AsmClassGenerator.java | 9 +++++++--
src/test/gls/innerClass/InnerClassTest.groovy | 15 +++++++++++++++
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
index 3a9f58a..707695d 100644
--- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
@@ -1044,8 +1044,14 @@ public class AsmClassGenerator extends ClassGenerator {
}
}
}
+ // GROOVY-8448: "this.name" from anon. inner class
+ if (field != null && !expression.isImplicitThis()
+ && (field.getModifiers() & ACC_SYNTHETIC) != 0
+ && field.getType().equals(ClassHelper.REFERENCE_TYPE)) {
+ field = null;
+ }
+ // GROOVY-5259, GROOVY-9501, GROOVY-9569, GROOVY-9650, GROOVY-9655, GROOVY-9665, GROOVY-9683, GROOVY-9695
if (field == null && !isFieldDirectlyAccessible(classNode.getField(name), classNode)) {
- // GROOVY-5259, GROOVY-9501, GROOVY-9569
if (checkStaticOuterField(expression, name)) return;
}
}
@@ -1189,7 +1195,6 @@ public class AsmClassGenerator extends ClassGenerator {
int mark = operandStack.getStackLength()-1;
MethodCallerMultiAdapter adapter;
if (controller.getCompileStack().isLHS()) {
- //operandStack.box();
adapter = setProperty;
if (isGroovyObject(objectExpression)) adapter = setGroovyObjectProperty;
if (isThisOrSuperInStaticContext(objectExpression)) adapter = setProperty;
diff --git a/src/test/gls/innerClass/InnerClassTest.groovy b/src/test/gls/innerClass/InnerClassTest.groovy
index 64bce3e..362947a 100644
--- a/src/test/gls/innerClass/InnerClassTest.groovy
+++ b/src/test/gls/innerClass/InnerClassTest.groovy
@@ -49,6 +49,21 @@ final class InnerClassTest {
'''
}
+ @Test // GROOVY-8448
+ void testAccessLocalVariableVsGetterInAIC() {
+ assertScript '''
+ def x = 'local' // shared variable written as field in AIC
+ def c = new java.util.concurrent.Callable<String>() {
+ def getX() { 'getter' }
+ @Override String call() {
+ x + ' then ' + this.x
+ }
+ }
+ String result = c()
+ assert result == 'local then getter'
+ '''
+ }
+
@Test
void testAccessLocalVariableFromClosureInAIC() {
assertScript '''