diff --git a/checker/src/main/java/org/checkerframework/checker/resourceleak/MustCallConsistencyAnalyzer.java b/checker/src/main/java/org/checkerframework/checker/resourceleak/MustCallConsistencyAnalyzer.java index 3fba4cd6cfc..31a392ba70d 100644 --- a/checker/src/main/java/org/checkerframework/checker/resourceleak/MustCallConsistencyAnalyzer.java +++ b/checker/src/main/java/org/checkerframework/checker/resourceleak/MustCallConsistencyAnalyzer.java @@ -1488,7 +1488,7 @@ private void checkMustCall( cmAnno = typeFactory .getAnnotatedType(alias.reference.getElement()) - .getAnnotationInHierarchy(typeFactory.top); + .getEffectiveAnnotationInHierarchy(typeFactory.top); } if (calledMethodsSatisfyMustCall(mustCallValue, cmAnno)) { diff --git a/checker/tests/resourceleak/Issue4815.java b/checker/tests/resourceleak/Issue4815.java index c1b090a5768..0a2f9b5275b 100644 --- a/checker/tests/resourceleak/Issue4815.java +++ b/checker/tests/resourceleak/Issue4815.java @@ -1,5 +1,4 @@ // Test case for https://tinyurl.com/cfissue/4815 -// @skip-test until the bug is fixed. import java.util.List; import org.checkerframework.checker.mustcall.qual.MustCall; @@ -7,6 +6,8 @@ public class Issue4815 { public void initialize( + // This error is a false positive, so if the checker stops finding it that would be fine. + // :: error: (required.method.not.called) List list, @Owning @MustCall("initialize") T object) { object.initialize(); list.add(object);