diff --git a/.gitignore b/.gitignore index e80e89ad772f..f519effebd54 100644 --- a/.gitignore +++ b/.gitignore @@ -98,13 +98,10 @@ docs/examples/BazelExample/bazel-testlogs docs/examples/BazelExample/Out.txt docs/examples/MavenExample/Out.txt docs/examples/MavenExample-framework-all/Out.txt -docs/examples/errorprone/.gradle/ docs/examples/errorprone/Out.txt -docs/examples/nullaway/.gradle/ +docs/examples/Wrong-Checker-Qual/Out.txt docs/examples/nullaway/Out.txt -docs/examples/jspecify/.gradle/ docs/examples/jspecify/Out.txt -docs/examples/lombok/.gradle/ docs/examples/lombok/Out.txt docs/examples/lombok/lombok.config docs/manual/*.png @@ -124,9 +121,9 @@ target/ *.ipr *.iws *.iml -/.gradle/ -# TODO: why this second gradle directory? -/buildSrc/.gradle/ + +# Gradle files +.gradle/ ## Tests diff --git a/docs/examples/Makefile b/docs/examples/Makefile index add989e5a4be..3cc843cc88c6 100644 --- a/docs/examples/Makefile +++ b/docs/examples/Makefile @@ -16,6 +16,8 @@ compile: $(MAKE) -C BazelExample $(MAKE) -C nullaway $(MAKE) -C jspecify + $(MAKE) -C mismatched-checker-qual + # TODO: type check the different files with the right checker; # some tests expect errors, compare against expected errors. @@ -31,3 +33,4 @@ clean: $(MAKE) -C BazelExample clean $(MAKE) -C nullaway clean $(MAKE) -C jspecify clean + $(MAKE) -C mismatched-checker-qual clean \ No newline at end of file diff --git a/docs/examples/mismatched-checker-qual/Makefile b/docs/examples/mismatched-checker-qual/Makefile new file mode 100644 index 000000000000..59e26350b2f2 --- /dev/null +++ b/docs/examples/mismatched-checker-qual/Makefile @@ -0,0 +1,17 @@ +JAVA_VER := $(shell java -version 2>&1 | head -1 | cut -d'"' -f2 | sed '/^1\./s///' | cut -d'.' -f1 | sed 's/-ea//' | sed 's/-beta//') + +.PHONY: all clean + +ifeq ($(shell test $(JAVA_VER) -lt 17; echo $$?),0) +all: + @echo "Skipping test because errorprone does not work under Java ${JAVA_VER}" +else +all: + - ../../../gradlew build > Out.txt 2>&1 + # Check for crash due to mismatched Checker Qualifiers + grep -qF "Exception: org.checkerframework.javacutil.BugInCF:" Out.txt +endif + +clean: + - ../../../gradlew clean + rm -f Out.txt diff --git a/docs/examples/mismatched-checker-qual/build.gradle b/docs/examples/mismatched-checker-qual/build.gradle new file mode 100644 index 000000000000..05e4698305b5 --- /dev/null +++ b/docs/examples/mismatched-checker-qual/build.gradle @@ -0,0 +1,40 @@ +// /////////////////////////////////////////////////////////////////////////// +// Checker Framework pluggable type-checking +// Mismatched Checker Qualifiers Example +// Having the Wrong qualifiers in the classpath will cause a crash +// + +plugins { + id 'java' + // Checker Framework pluggable type-checking + id 'org.checkerframework' version '0.6.53' apply false +} + +ext { + versions = [ + eisopVersion: '3.49.3-eisop1', + ] +} + +apply plugin: 'org.checkerframework' + +dependencies { + // Without the same checker qualifiers, Nullness Checker should gracefully issue warnings + // Use Typetools checker-qual (original) for qualifiers + compileOnly "org.checkerframework:checker-qual:3.49.1" + testCompileOnly "org.checkerframework:checker-qual:3.49.1" + checkerFramework "io.github.eisop:checker-qual:${versions.eisopVersion}" + checkerFramework "io.github.eisop:checker:${versions.eisopVersion}" +} + +repositories { + // mavenLocal() // Use local Maven repository first for testing + mavenCentral() +} + +checkerFramework { + checkers = [ + 'org.checkerframework.checker.nullness.NullnessChecker', + ] + extraJavacArgs = ['-Aversion'] +} \ No newline at end of file diff --git a/docs/examples/mismatched-checker-qual/settings.gradle b/docs/examples/mismatched-checker-qual/settings.gradle new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/docs/examples/mismatched-checker-qual/src/main/java/com/example/Demo.java b/docs/examples/mismatched-checker-qual/src/main/java/com/example/Demo.java new file mode 100644 index 000000000000..cde00ff54894 --- /dev/null +++ b/docs/examples/mismatched-checker-qual/src/main/java/com/example/Demo.java @@ -0,0 +1,10 @@ +package com.example; + +import java.util.Set; + +public class Demo { + void demo(Set s, short i) { + s.remove(i - 1); // Error Prone error + s.add(null); // Nullness Checker error + } +} diff --git a/docs/manual/contributors.tex b/docs/manual/contributors.tex index 34a589d819e8..b31c59bf773c 100644 --- a/docs/manual/contributors.tex +++ b/docs/manual/contributors.tex @@ -1,6 +1,7 @@ Abraham Lin, Adian Qian, Aditya Singh, +Ahnaf Shahriar, Akash Srivastava, Alex Cook, Alex Liu,