We are working on adding instructions to the SPARTA manual on how to use it with the Android plugin for Gradle. Below are instructions on how to do so. Please let us know whether they work for you or not. Thanks!
configurations {
checkerFrameworkJavac {
description = 'a customization of the Open JDK javac compiler with additional support for type annotations'
}
checkerFrameworkAnnotatedJDK {
description = 'a copy of JDK classes with Checker Framework type qualifers inserted'
}
checkerFramework {
description = 'The Checker Framework: custom pluggable types for Java'
}
sparta
}
def typecheck = project.properties['typecheck'] ?: false
allprojects {
if (typecheck) {
gradle.projectsEvaluated {
tasks.withType(JavaCompile).all { JavaCompile compile ->
compile.options.compilerArgs = [
'-processor', 'sparta.checkers.FlowChecker',
'-processorpath', "${configurations.sparta.asPath}:${configurations.checkerFramework.asPath}",
// uncomment to turn Checker Framework errors into warnings
//'-Awarns',
"-AprintErrorStack"
]
compile.options.compilerArgs += ['-source', '7', '-target', '7']
options.bootClasspath = "${configurations.checkerFrameworkJavac.asPath}:" + System.getProperty("sun.boot.class.path") + ":" + options.bootClasspath
options.fork = true
options.forkOptions.jvmArgs += ["-Xbootclasspath/p:${configurations.checkerFrameworkJavac.asPath}"]
}
}
}
}
dependencies {
ext.checkerFrameworkVersion = '1.9.11'
ext.jdkVersion = JavaVersion.current().isJava7() ? 'jdk7' : 'jdk8'
checkerFrameworkAnnotatedJDK "org.checkerframework:${jdkVersion}:${checkerFrameworkVersion}"
checkerFrameworkJavac "org.checkerframework:compiler:${checkerFrameworkVersion}"
checkerFramework "org.checkerframework:checker:${checkerFrameworkVersion}"
compile "org.checkerframework:checker-qual:${checkerFrameworkVersion}"
sparta fileTree(dir: "$System.env.SPARTA_CODE", include: ['*.jar'])
if (typecheck) {
compile fileTree(dir: "$System.env.SPARTA_CODE", include: ['*.jar'])
}
....Other dependencies....
}
Any Flow Checker option you wish to use can be added to compile.options.compilerArgs: For example, you can use the flowPolicy option like so:
compile.options.compilerArgs = [
'-processor', 'sparta.checkers.FlowChecker',
'-processorpath', "${configurations.sparta.asPath}:${configurations.checkerFramework.asPath}",
`-AflowPolicy=pathToFlowPolicy"
]
Thanks,
Suzanne