@@ -6985,23 +6985,31 @@ private SetterInfo(final ClassNode receiverType, final String name, final List<M
6985
6985
6986
6986
/**
6987
6987
* Wrapper for a Parameter so it can be treated like a VariableExpression
6988
- * and tracked in the ifElseForWhileAssignmentTracker.
6989
- * <p>
6990
- * This class purposely does not adhere to the normal equals and hashCode
6991
- * contract on the Object class and delegates those calls to the wrapped
6992
- * variable.
6988
+ * and tracked in the {@code ifElseForWhileAssignmentTracker}.
6993
6989
*/
6994
- private static class ParameterVariableExpression extends VariableExpression {
6990
+ private class ParameterVariableExpression extends VariableExpression {
6995
6991
6996
6992
private final Parameter parameter ;
6997
6993
6998
- ParameterVariableExpression (Parameter parameter ) {
6994
+ ParameterVariableExpression (final Parameter parameter ) {
6999
6995
super (parameter );
7000
6996
this .parameter = parameter ;
6997
+ /* GRECLIPSE edit -- GROOVY-10651
7001
6998
ClassNode inferred = parameter.getNodeMetaData(StaticTypesMarker.INFERRED_TYPE);
7002
6999
if (inferred == null) {
7003
7000
parameter.setNodeMetaData(StaticTypesMarker.INFERRED_TYPE, parameter.getOriginType());
7004
7001
}
7002
+ */
7003
+ ClassNode inferredType = getNodeMetaData (StaticTypesMarker .INFERRED_TYPE );
7004
+ if (inferredType == null ) {
7005
+ inferredType = typeCheckingContext .controlStructureVariables .get (parameter ); // for/catch/closure
7006
+ if (inferredType == null ) {
7007
+ TypeCheckingContext .EnclosingClosure enclosingClosure = typeCheckingContext .getEnclosingClosure ();
7008
+ if (enclosingClosure != null ) inferredType = getTypeFromClosureArguments (parameter , enclosingClosure );
7009
+ }
7010
+ setNodeMetaData (StaticTypesMarker .INFERRED_TYPE , inferredType != null ? inferredType : parameter .getType ());
7011
+ }
7012
+ // GRECLIPSE end
7005
7013
}
7006
7014
7007
7015
@ Override
@@ -7030,14 +7038,13 @@ public <T> T getNodeMetaData(Object key) {
7030
7038
}
7031
7039
7032
7040
@ Override
7041
+ /* GRECLIPSE edit
7033
7042
public void setNodeMetaData(Object key, Object value) {
7034
7043
parameter.setNodeMetaData(key, value);
7035
- }
7036
- // GRECLIPSE add
7037
- @ Override
7038
- public <T > T getNodeMetaData (Object key , java .util .function .Function <?, ? extends T > valFn ) {
7044
+ */
7045
+ public <T > T getNodeMetaData (Object key , Function <?, ? extends T > valFn ) {
7039
7046
return parameter .getNodeMetaData (key , valFn );
7040
- }
7041
7047
// GRECLIPSE end
7048
+ }
7042
7049
}
7043
7050
}
0 commit comments