[groovy] branch GROOVY_2_5_X updated: GROOVY-9136: Refactor StaticTypeCheckingVisitor.checkOrMarkInnerPropertyOwnerAccess(closes #935)
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)
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); }