diff --git a/checker/tests/nullness/java17/InstanceOfPatternVariable.java b/checker/tests/nullness/java17/InstanceOfPatternVariable.java new file mode 100644 index 00000000000..0c9e300c473 --- /dev/null +++ b/checker/tests/nullness/java17/InstanceOfPatternVariable.java @@ -0,0 +1,16 @@ +// @below-java17-jdk-skip-test +// Test case for https://github.com/typetools/checker-framework/issues/5240 + +import java.util.Map; +import org.checkerframework.checker.nullness.qual.KeyFor; + +public class InstanceOfPatternVariable { + + public void doSomething(final Object x) { + if (x instanceof Map, ?> m) { + // final var ct = (ClassOrInterfaceType) type; + + @KeyFor("m") Object y = m.keySet().iterator().next(); + } + } +} diff --git a/javacutil/src/main/java/org/checkerframework/javacutil/ElementUtils.java b/javacutil/src/main/java/org/checkerframework/javacutil/ElementUtils.java index 8d508883c52..0c8f24c07d6 100644 --- a/javacutil/src/main/java/org/checkerframework/javacutil/ElementUtils.java +++ b/javacutil/src/main/java/org/checkerframework/javacutil/ElementUtils.java @@ -787,14 +787,14 @@ public static boolean isTypeDeclaration(Element elt) { /** * Return true if the element is a binding variable. * - *
Note: This is to conditionally support Java 15 instanceof pattern matching. When available, - * this should use {@code ElementKind.BINDING_VARIABLE} directly. + *
This implementation compiles under JDK 8 and 11 as well as versions that contain {@code
+ * ElementKind.BINDING_VARIABLE}.
*
* @param element the element to test
* @return true if the element is a binding variable
*/
public static boolean isBindingVariable(Element element) {
- return "BINDING_VARIABLE".equals(element.getKind().name());
+ return SystemUtil.jreVersion >= 16 && "BINDING_VARIABLE".equals(element.getKind().name());
}
/**
diff --git a/javacutil/src/main/java/org/checkerframework/javacutil/Resolver.java b/javacutil/src/main/java/org/checkerframework/javacutil/Resolver.java
index 9a0dc5e5af5..8663d77df07 100644
--- a/javacutil/src/main/java/org/checkerframework/javacutil/Resolver.java
+++ b/javacutil/src/main/java/org/checkerframework/javacutil/Resolver.java
@@ -245,11 +245,26 @@ public Env