Skip to content

Commit b96e777

Browse files
authored
Capture the type of field accesses
1 parent 3b03b37 commit b96e777

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

framework/src/main/java/org/checkerframework/framework/type/TypeFromExpressionVisitor.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -271,11 +271,11 @@ public AnnotatedTypeMirror visitMemberSelect(MemberSelectTree tree, AnnotatedTyp
271271
return AnnotatedTypes.asSuper(
272272
f, thisType, AnnotatedTypeMirror.createType(superTypeMirror, f, false));
273273
} else {
274-
// tree must be a field access, so get the type of the expression, and then call
274+
// tree must be a field access, so get the type of the (receiver) expression, and then call
275275
// asMemberOf.
276-
AnnotatedTypeMirror t = f.getAnnotatedType(tree.getExpression());
277-
t = f.applyCaptureConversion(t);
278-
return AnnotatedTypes.asMemberOf(f.types, f, t, elt).asUse();
276+
AnnotatedTypeMirror typeOfReceiver = f.getAnnotatedType(tree.getExpression());
277+
typeOfReceiver = f.applyCaptureConversion(typeOfReceiver);
278+
return f.applyCaptureConversion(AnnotatedTypes.asMemberOf(f.types, f, typeOfReceiver, elt));
279279
}
280280
}
281281

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
@SuppressWarnings("all") // Just check for crashes.
2+
public class Issue6825 {
3+
static class ClassA<T extends Number> {}
4+
5+
public static boolean flag;
6+
ClassA<? super Number> f;
7+
8+
void method(Number n) {
9+
var y = flag ? f : new ClassA<Number>();
10+
var x = flag ? this.f : new ClassA<Number>();
11+
}
12+
}

0 commit comments

Comments
 (0)