Skip to content

Commit 5d64fb8

Browse files
committed
GROOVY-8965, GROOVY-10180, GROOVY-10668
1 parent 1ff1120 commit 5d64fb8

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

base/org.codehaus.groovy25/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java

+8-2
Original file line numberDiff line numberDiff line change
@@ -4470,12 +4470,16 @@ protected List<Receiver<String>> makeOwnerList(final Expression objectExpression
44704470
List<Receiver<String>> owners = new ArrayList<>();
44714471
if (typeCheckingContext.delegationMetadata != null
44724472
&& objectExpression instanceof VariableExpression
4473-
&& ((VariableExpression) objectExpression).getName().equals("owner")
4473+
&& ((Variable) objectExpression).getName().equals("owner")
44744474
&& /*isNested:*/typeCheckingContext.delegationMetadata.getParent() != null) {
44754475
List<Receiver<String>> enclosingClass = Collections.singletonList(
44764476
Receiver.<String>make(typeCheckingContext.getEnclosingClassNode()));
44774477
addReceivers(owners, enclosingClass, typeCheckingContext.delegationMetadata.getParent(), "owner.");
44784478
} else {
4479+
// GRECLIPSE add -- GROOVY-8965, GROOVY-10180, GROOVY-10668
4480+
List<ClassNode> temporaryTypes = getTemporaryTypesForExpression(objectExpression);
4481+
if (asBoolean(temporaryTypes)) owners.add(Receiver.make(lowestUpperBound(temporaryTypes)));
4482+
// GRECLIPSE end
44794483
if (isClassClassNodeWrappingConcreteType(receiver)) {
44804484
ClassNode staticType = receiver.getGenericsTypes()[0].getType();
44814485
owners.add(Receiver.<String>make(staticType)); // Type from Class<Type>
@@ -4489,6 +4493,7 @@ protected List<Receiver<String>> makeOwnerList(final Expression objectExpression
44894493
owners.add(Receiver.<String>make(OBJECT_TYPE));
44904494
}
44914495
}
4496+
/* GRECLIPSE edit
44924497
if (!typeCheckingContext.temporaryIfBranchTypeInformation.isEmpty()) {
44934498
List<ClassNode> potentialReceiverType = getTemporaryTypesForExpression(objectExpression);
44944499
if (potentialReceiverType != null && !potentialReceiverType.isEmpty()) {
@@ -4497,9 +4502,10 @@ protected List<Receiver<String>> makeOwnerList(final Expression objectExpression
44974502
}
44984503
}
44994504
}
4505+
*/
45004506
if (typeCheckingContext.lastImplicitItType != null
45014507
&& objectExpression instanceof VariableExpression
4502-
&& ((VariableExpression) objectExpression).getName().equals("it")) {
4508+
&& ((Variable) objectExpression).getName().equals("it")) {
45034509
owners.add(Receiver.<String>make(typeCheckingContext.lastImplicitItType));
45044510
}
45054511
}

base/org.codehaus.groovy30/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -4185,12 +4185,16 @@ protected List<Receiver<String>> makeOwnerList(final Expression objectExpression
41854185
List<Receiver<String>> owners = new ArrayList<>();
41864186
if (typeCheckingContext.delegationMetadata != null
41874187
&& objectExpression instanceof VariableExpression
4188-
&& ((VariableExpression) objectExpression).getName().equals("owner")
4188+
&& ((Variable) objectExpression).getName().equals("owner")
41894189
&& /*isNested:*/typeCheckingContext.delegationMetadata.getParent() != null) {
41904190
List<Receiver<String>> enclosingClass = Collections.singletonList(
41914191
Receiver.make(typeCheckingContext.getEnclosingClassNode()));
41924192
addReceivers(owners, enclosingClass, typeCheckingContext.delegationMetadata.getParent(), "owner.");
41934193
} else {
4194+
// GRECLIPSE add -- GROOVY-8965, GROOVY-10180, GROOVY-10668
4195+
List<ClassNode> temporaryTypes = getTemporaryTypesForExpression(objectExpression);
4196+
if (asBoolean(temporaryTypes)) owners.add(Receiver.make(lowestUpperBound(temporaryTypes)));
4197+
// GRECLIPSE end
41944198
if (isClassClassNodeWrappingConcreteType(receiver)) {
41954199
ClassNode staticType = receiver.getGenericsTypes()[0].getType();
41964200
owners.add(Receiver.make(staticType)); // Type from Class<Type>
@@ -4209,6 +4213,7 @@ protected List<Receiver<String>> makeOwnerList(final Expression objectExpression
42094213
&& ((Variable) objectExpression).getName().equals("it")) {
42104214
owners.add(Receiver.make(typeCheckingContext.lastImplicitItType));
42114215
}
4216+
/* GRECLIPSE edit
42124217
if (!typeCheckingContext.temporaryIfBranchTypeInformation.isEmpty()) {
42134218
List<ClassNode> instanceofTypes = getTemporaryTypesForExpression(objectExpression);
42144219
if (instanceofTypes != null && !instanceofTypes.isEmpty()) {
@@ -4217,6 +4222,7 @@ protected List<Receiver<String>> makeOwnerList(final Expression objectExpression
42174222
owners.add(Receiver.make(instanceofType));
42184223
}
42194224
}
4225+
*/
42204226
}
42214227
return owners;
42224228
}

base/org.codehaus.groovy40/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -3804,12 +3804,13 @@ protected List<Receiver<String>> makeOwnerList(final Expression objectExpression
38043804
List<Receiver<String>> owners = new ArrayList<>();
38053805
if (typeCheckingContext.delegationMetadata != null
38063806
&& objectExpression instanceof VariableExpression
3807-
&& ((VariableExpression) objectExpression).getName().equals("owner")
3807+
&& ((Variable) objectExpression).getName().equals("owner")
38083808
&& /*isNested:*/typeCheckingContext.delegationMetadata.getParent() != null) {
38093809
List<Receiver<String>> enclosingClass = Collections.singletonList(
38103810
Receiver.make(typeCheckingContext.getEnclosingClassNode()));
38113811
addReceivers(owners, enclosingClass, typeCheckingContext.delegationMetadata.getParent(), "owner.");
38123812
} else {
3813+
/* GRECLIPSE edit -- GROOVY-8965, GROOVY-10180, GROOVY-10668
38133814
if (!typeCheckingContext.temporaryIfBranchTypeInformation.isEmpty()) {
38143815
List<ClassNode> potentialReceiverType = getTemporaryTypesForExpression(objectExpression);
38153816
if (potentialReceiverType != null && !potentialReceiverType.isEmpty()) {
@@ -3818,9 +3819,13 @@ protected List<Receiver<String>> makeOwnerList(final Expression objectExpression
38183819
}
38193820
}
38203821
}
3822+
*/
3823+
List<ClassNode> temporaryTypes = getTemporaryTypesForExpression(objectExpression);
3824+
if (asBoolean(temporaryTypes)) owners.add(Receiver.make(lowestUpperBound(temporaryTypes)));
3825+
// GRECLIPSE end
38213826
if (typeCheckingContext.lastImplicitItType != null
38223827
&& objectExpression instanceof VariableExpression
3823-
&& ((VariableExpression) objectExpression).getName().equals("it")) {
3828+
&& ((Variable) objectExpression).getName().equals("it")) {
38243829
owners.add(Receiver.make(typeCheckingContext.lastImplicitItType));
38253830
}
38263831
if (isClassClassNodeWrappingConcreteType(receiver)) {

0 commit comments

Comments
 (0)