[groovy] branch GROOVY_2_5_X updated: GROOVY-9136: Refactor StaticTypeCheckingVisitor.checkOrMarkInnerPropertyOwnerAccess(closes #935)

2019-05-25 Thread sunlan
This is an automated email from the ASF dual-hosted git repository.

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


The following commit(s) were added to refs/heads/GROOVY_2_5_X by this push:
 new e62ecfb  GROOVY-9136: Refactor 
StaticTypeCheckingVisitor.checkOrMarkInnerPropertyOwnerAccess(closes #935)
e62ecfb is described below

commit e62ecfb2981929d42aa75af1be690b3187269d9f
Author: Eric Milles 
AuthorDate: Sun May 26 01:51:34 2019 +0800

GROOVY-9136: Refactor 
StaticTypeCheckingVisitor.checkOrMarkInnerPropertyOwnerAccess(closes #935)

(cherry picked from commit 18c8b08a471b112762b0e91d961db72f63d96548)
---
 .../transform/stc/StaticTypeCheckingVisitor.java| 21 +
 1 file changed, 9 insertions(+), 12 deletions(-)

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 c23824a..3579f18 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -517,18 +517,13 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
 /**
  * Checks valid cases for accessing a field from an inner class.
  */
-private String checkOrMarkInnerPropertyOwnerAccess(Expression source, 
FieldNode fn, boolean lhsOfAssignment, String delegationData) {
-if (fn != null && !fn.isStatic() && !fn.isPrivate() && 
!"delegate".equals(delegationData) &&
-source instanceof PropertyExpression && 
typeCheckingContext.getEnclosingClosureStack().size() == 1) {
-PropertyExpression pe = (PropertyExpression) source;
-boolean ownerProperty = !("this".equals(pe.getPropertyAsString()));
-// check for reference to method, closure, for loop or catch block 
parameter
-if (ownerProperty && pe.getObjectExpression() instanceof 
VariableExpression) {
-ownerProperty = !(((VariableExpression) 
pe.getObjectExpression()).getAccessedVariable() instanceof Parameter);
-}
-if (ownerProperty) {
+private String checkOrMarkInnerPropertyOwnerAccess(PropertyExpression 
source, boolean lhsOfAssignment, String delegationData) {
+// check for reference to method, closure, for loop, try with, or 
catch block parameter from a non-nested closure
+if (typeCheckingContext.getEnclosingClosureStack().size() == 1 && 
!"this".equals(source.getPropertyAsString())) {
+if (!(source.getObjectExpression() instanceof VariableExpression &&
+((VariableExpression) 
source.getObjectExpression()).getAccessedVariable() instanceof Parameter)) {
 delegationData = "owner";
-
pe.getObjectExpression().putNodeMetaData(StaticTypesMarker.IMPLICIT_RECEIVER, 
delegationData);
+
source.getObjectExpression().putNodeMetaData(StaticTypesMarker.IMPLICIT_RECEIVER,
 delegationData);
 }
 }
 return delegationData;
@@ -1745,7 +1740,9 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
 if (visitor != null) visitor.visitField(field);
 storeWithResolve(field.getOriginType(), receiver, 
field.getDeclaringClass(), field.isStatic(), expressionToStoreOn);
 checkOrMarkPrivateAccess(expressionToStoreOn, field, lhsOfAssignment);
-delegationData = 
checkOrMarkInnerPropertyOwnerAccess(expressionToStoreOn, field, 
lhsOfAssignment, delegationData);
+if (field != null && !field.isStatic() && !field.isPrivate() && 
!"delegate".equals(delegationData)) {
+delegationData = 
checkOrMarkInnerPropertyOwnerAccess(expressionToStoreOn, lhsOfAssignment, 
delegationData);
+}
 if (delegationData != null) {
 
expressionToStoreOn.putNodeMetaData(StaticTypesMarker.IMPLICIT_RECEIVER, 
delegationData);
 }



[groovy] branch master updated: GROOVY-9136: Refactor StaticTypeCheckingVisitor.checkOrMarkInnerPropertyOwnerAccess(closes #935)

2019-05-25 Thread sunlan
This is an automated email from the ASF dual-hosted git repository.

sunlan 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 18c8b08  GROOVY-9136: Refactor 
StaticTypeCheckingVisitor.checkOrMarkInnerPropertyOwnerAccess(closes #935)
18c8b08 is described below

commit 18c8b08a471b112762b0e91d961db72f63d96548
Author: Eric Milles 
AuthorDate: Sun May 26 01:51:34 2019 +0800

GROOVY-9136: Refactor 
StaticTypeCheckingVisitor.checkOrMarkInnerPropertyOwnerAccess(closes #935)
---
 .../transform/stc/StaticTypeCheckingVisitor.java| 21 +
 1 file changed, 9 insertions(+), 12 deletions(-)

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 bc2027b..16a44f4 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -529,18 +529,13 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
 /**
  * Checks valid cases for accessing a field from an inner class.
  */
-private String checkOrMarkInnerPropertyOwnerAccess(Expression source, 
FieldNode fn, boolean lhsOfAssignment, String delegationData) {
-if (fn != null && !fn.isStatic() && !fn.isPrivate() && 
!"delegate".equals(delegationData) &&
-source instanceof PropertyExpression && 
typeCheckingContext.getEnclosingClosureStack().size() == 1) {
-PropertyExpression pe = (PropertyExpression) source;
-boolean ownerProperty = !("this".equals(pe.getPropertyAsString()));
-// check for reference to method, closure, for loop or catch block 
parameter
-if (ownerProperty && pe.getObjectExpression() instanceof 
VariableExpression) {
-ownerProperty = !(((VariableExpression) 
pe.getObjectExpression()).getAccessedVariable() instanceof Parameter);
-}
-if (ownerProperty) {
+private String checkOrMarkInnerPropertyOwnerAccess(PropertyExpression 
source, boolean lhsOfAssignment, String delegationData) {
+// check for reference to method, closure, for loop, try with, or 
catch block parameter from a non-nested closure
+if (typeCheckingContext.getEnclosingClosureStack().size() == 1 && 
!"this".equals(source.getPropertyAsString())) {
+if (!(source.getObjectExpression() instanceof VariableExpression &&
+((VariableExpression) 
source.getObjectExpression()).getAccessedVariable() instanceof Parameter)) {
 delegationData = "owner";
-
pe.getObjectExpression().putNodeMetaData(StaticTypesMarker.IMPLICIT_RECEIVER, 
delegationData);
+
source.getObjectExpression().putNodeMetaData(StaticTypesMarker.IMPLICIT_RECEIVER,
 delegationData);
 }
 }
 return delegationData;
@@ -1851,7 +1846,9 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
 if (visitor != null) visitor.visitField(field);
 storeWithResolve(field.getOriginType(), receiver, 
field.getDeclaringClass(), field.isStatic(), expressionToStoreOn);
 checkOrMarkPrivateAccess(expressionToStoreOn, field, lhsOfAssignment);
-delegationData = 
checkOrMarkInnerPropertyOwnerAccess(expressionToStoreOn, field, 
lhsOfAssignment, delegationData);
+if (field != null && !field.isStatic() && !field.isPrivate() && 
!"delegate".equals(delegationData)) {
+delegationData = 
checkOrMarkInnerPropertyOwnerAccess(expressionToStoreOn, lhsOfAssignment, 
delegationData);
+}
 if (delegationData != null) {
 
expressionToStoreOn.putNodeMetaData(StaticTypesMarker.IMPLICIT_RECEIVER, 
delegationData);
 }