Checker Framework integration (#126)
This commit is contained in:
70
gradle/checkerframework.gradle
Normal file
70
gradle/checkerframework.gradle
Normal file
@@ -0,0 +1,70 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
/// Checker Framework pluggable type-checking
|
||||
///
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
configurations {
|
||||
checkerFrameworkCheckerJar {
|
||||
description = 'the Checker Framework, including the Type Annotations compiler'
|
||||
}
|
||||
|
||||
checkerFrameworkAnnotatedJDK {
|
||||
description = 'a copy of JDK classes with Checker Framework type qualifers inserted'
|
||||
}
|
||||
}
|
||||
|
||||
// By default, use Checker Framework from Maven Central.
|
||||
// Pass -PcfLocal to use a locally-built version of the Checker Framework.
|
||||
dependencies {
|
||||
if (!rootProject.hasProperty('cfLocal')) {
|
||||
checkerFrameworkAnnotatedJDK "org.checkerframework:jdk8:${checkerFrameworkVersion}"
|
||||
checkerFrameworkCheckerJar "org.checkerframework:checker:${checkerFrameworkVersion}"
|
||||
implementation "org.checkerframework:checker-qual:${checkerFrameworkVersion}"
|
||||
} else if (System.getenv("CHECKERFRAMEWORK") == null) {
|
||||
throw new GradleException("Environment variable CHECKERFRAMEWORK is not set")
|
||||
} else if (! file(System.getenv("CHECKERFRAMEWORK")).exists()) {
|
||||
throw new GradleException("Environment variable CHECKERFRAMEWORK is set to non-existent directory " + System.getenv("CHECKERFRAMEWORK"));
|
||||
} else {
|
||||
ext.checkerframeworkdist = "$System.env.CHECKERFRAMEWORK/checker/dist"
|
||||
checkerFrameworkAnnotatedJDK fileTree(dir: "${ext.checkerframeworkdist}", include: "jdk8.jar")
|
||||
checkerFrameworkCheckerJar fileTree(dir: "${ext.checkerframeworkdist}", include: 'checker.jar')
|
||||
implementation fileTree(dir: "${ext.checkerframeworkdist}", include: 'checker-qual.jar')
|
||||
}
|
||||
}
|
||||
|
||||
// // To type-check all projects.
|
||||
// allprojects {
|
||||
// tasks.withType(JavaCompile).all { JavaCompile compile ->
|
||||
// compile.doFirst {
|
||||
// compile.options.compilerArgs = [
|
||||
// '-processor', 'org.checkerframework.checker.formatter.FormatterChecker,org.checkerframework.checker.index.IndexChecker,org.checkerframework.checker.lock.LockChecker,org.checkerframework.checker.nullness.NullnessChecker,org.checkerframework.checker.signature.SignatureChecker',
|
||||
// '-Xmaxerrs', '10000',
|
||||
// '-Awarns', // -Awarns turns Checker Framework errors into warnings
|
||||
// '-AcheckPurityAnnotations',
|
||||
// '-processorpath', "${configurations.checkerFrameworkCheckerJar.asPath}",
|
||||
// "-Xbootclasspath/p:${configurations.checkerFrameworkAnnotatedJDK.asPath}",
|
||||
// "-Astubs=$System.env.CHECKERFRAMEWORK/checker/resources/javadoc.astub" // TODO: does not work when downloading from Maven Central
|
||||
// ]
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// To typecheck only the current project's main source set (in a multi-project
|
||||
// build), use this instead:
|
||||
compileJava {
|
||||
doFirst {
|
||||
options.compilerArgs = [
|
||||
'-processor', 'org.checkerframework.checker.nullness.NullnessChecker',
|
||||
'-processor', 'org.checkerframework.checker.optional.OptionalChecker',
|
||||
'-Xmaxerrs', '10000',
|
||||
'-Xmaxwarns', '10000',
|
||||
// '-Awarns', // -Awarns turns Checker Framework errors into warnings
|
||||
//'-AcheckPurityAnnotations', // Disabled for Velocity, wish we could do better
|
||||
'-processorpath', "${configurations.checkerFrameworkCheckerJar.asPath}",
|
||||
"-Xbootclasspath/p:${configurations.checkerFrameworkAnnotatedJDK.asPath}"
|
||||
]
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user