diff --git a/checker/tests/nullness/java-unsound/Figure3.java b/checker/tests/nullness/java-unsound/Figure3.java index f5e3c37f17f..6e3a6529df8 100644 --- a/checker/tests/nullness/java-unsound/Figure3.java +++ b/checker/tests/nullness/java-unsound/Figure3.java @@ -12,7 +12,6 @@ A coerce(B b) { // extends @Initialized @Nullable Object super @Initialized @NonNull Void]] // method return type: A[ extends @Initialized @Nullable Object super @Initialized // @NonNull Void] - // :: error: (return) return pair(this.bad(), b).value; } } diff --git a/checker/tests/nullness/java-unsound/Figure3NC.java b/checker/tests/nullness/java-unsound/Figure3NC.java index 0b49748136b..f579d7932ed 100644 --- a/checker/tests/nullness/java-unsound/Figure3NC.java +++ b/checker/tests/nullness/java-unsound/Figure3NC.java @@ -11,7 +11,6 @@ class Constraint extends Type {} } A coerce(B b) { - // :: error: (return) return pair(this.bad(), b).value; } } diff --git a/framework/src/main/java/org/checkerframework/framework/type/TypeFromExpressionVisitor.java b/framework/src/main/java/org/checkerframework/framework/type/TypeFromExpressionVisitor.java index fd82764403f..116a4e92428 100644 --- a/framework/src/main/java/org/checkerframework/framework/type/TypeFromExpressionVisitor.java +++ b/framework/src/main/java/org/checkerframework/framework/type/TypeFromExpressionVisitor.java @@ -326,7 +326,7 @@ public AnnotatedTypeMirror visitNewClass(NewClassTree node, AnnotatedTypeFactory public AnnotatedTypeMirror visitMethodInvocation( MethodInvocationTree node, AnnotatedTypeFactory f) { AnnotatedExecutableType ex = f.methodFromUse(node).executableType; - return ex.getReturnType().asUse(); + return f.applyCaptureConversion(ex.getReturnType().asUse()); } @Override diff --git a/framework/tests/all-systems/Issue4829.java b/framework/tests/all-systems/Issue4829.java new file mode 100644 index 00000000000..00b215349c4 --- /dev/null +++ b/framework/tests/all-systems/Issue4829.java @@ -0,0 +1,18 @@ +import java.util.concurrent.Future; +import org.checkerframework.checker.nullness.qual.Nullable; + +@SuppressWarnings("all") // Just check for crashes. +public class Issue4829 { + + interface ListenableFuture extends Future {} + + enum E {} + + ListenableFuture f(E e) { + return g(e); + } + + ListenableFuture g(E e) { + throw new AssertionError(); + } +}