Update to errorprone 2.9.0, using -Xplugin to pass it to javac
The gwt.javac presetdef is now a macrodef, to allow for appending
instead of replacing the -Xplugin arguments and processorpath
references, and the output directory is created as-needed as part
of gwt.javac instead of requiring an extra call for it.
Change-Id: Id47397d70f11b9d11615232449bdac46ce0fe870
diff --git a/build_tools/doctool/build.xml b/build_tools/doctool/build.xml
index c8d5d79..abd3026 100644
--- a/build_tools/doctool/build.xml
+++ b/build_tools/doctool/build.xml
@@ -6,7 +6,6 @@
<property.ensure name="java.tools.path" location="${java.home}/../lib/tools.jar" unless="build.host.ismac" message="Cannot find ${java.home}/../lib/tools.jar; please use a JDK when building doc rather than a JRE." />
<target name="compile" description="Compiles this project">
- <mkdir dir="${javac.out}" />
<gwt.javac>
<classpath>
<pathelement location="${java.tools.path}" />
diff --git a/common.ant.xml b/common.ant.xml
index 9c19fa8..7c5d26e 100755
--- a/common.ant.xml
+++ b/common.ant.xml
@@ -1,4 +1,4 @@
-<project name="common" xmlns:if="ant:if">
+<project name="common" xmlns:if="ant:if" xmlns:unless="ant:unless">
<!-- it's okay for this not to exist, but it gives a place to store
personal property settings, if any, persistently. For example, you
might use it to set gwt.junit.testcase.includes to a narrower subset
@@ -66,6 +66,14 @@
<property name="javac.target" value="8"/>
<property name="javac.nowarn" value="true"/>
+ <!-- javac and errorprone instructions from https://errorprone.info/docs/installation#ant -->
+ <property name="errorprone.javac.jar" location="${gwt.tools.lib}/errorprone/javac-9+181-r4173-1.jar"/>
+ <path id="errorprone.processorpath.ref">
+ <pathelement location="${gwt.tools.lib}/errorprone/error_prone_core-2.9.0-with-dependencies.jar"/>
+ <pathelement location="${gwt.tools.lib}/errorprone/jFormatString-3.0.0.jar"/>
+ <pathelement location="${gwt.tools.lib}/errorprone/dataflow-errorprone-3.15.0.jar"/>
+ </path>
+
<property name="junit.out" location="${project.build}/test"/>
<property name="emma.dir" value="${gwt.tools.redist}/emma"/>
<property name="emma.filter.exclude" value=""/>
@@ -147,13 +155,45 @@
</ant>
</presetdef>
- <presetdef name="gwt.javac">
- <javac srcdir="src" destdir="${javac.out}" debug="${javac.debug}"
- debuglevel="${javac.debuglevel}" source="${javac.source}" target="${javac.target}"
- nowarn="${javac.nowarn}" encoding="${javac.encoding}"
- includeantruntime="false" fork="true" compiler="modern">
- </javac>
- </presetdef>
+ <macrodef name="gwt.javac">
+ <attribute name="srcdir" default="src" />
+ <attribute name="destdir" default="${javac.out}" />
+ <attribute name="source" default="${javac.source}" />
+ <attribute name="target" default="${javac.target}" />
+ <attribute name="excludes" default="" />
+ <attribute name="processorpath" default="" />
+ <attribute name="errorprone.args" default="" />
+ <element name="javaccontents" implicit="true" optional="true" />
+
+ <sequential>
+ <path id="mergedprocessorpath.ref">
+ <path refid="errorprone.processorpath.ref"/>
+ <path refid="@{processorpath}" unless:blank="@{processorpath}" />
+ </path>
+ <mkdir dir="@{destdir}"/>
+ <javac srcdir="@{srcdir}" sourcepath="@{srcdir}" destdir="@{destdir}" debug="${javac.debug}"
+ debuglevel="${javac.debuglevel}" source="@{source}" target="@{target}"
+ nowarn="${javac.nowarn}" encoding="${javac.encoding}" includeantruntime="false"
+ fork="true" compiler="modern" excludes="@{excludes}">
+ <compilerarg value="-J-Xbootclasspath/p:${errorprone.javac.jar}" if:true="${isJava8}"/>
+ <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED" unless:true="${isJava8}"/>
+ <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED" unless:true="${isJava8}"/>
+ <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED" unless:true="${isJava8}"/>
+ <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED" unless:true="${isJava8}"/>
+ <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED" unless:true="${isJava8}"/>
+ <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED" unless:true="${isJava8}"/>
+ <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED" unless:true="${isJava8}"/>
+ <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED" unless:true="${isJava8}"/>
+ <compilerarg value="-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED" unless:true="${isJava8}"/>
+ <compilerarg value="-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED" unless:true="${isJava8}"/>
+ <compilerarg value="-XDcompilePolicy=simple"/>
+ <compilerarg value="-processorpath"/>
+ <compilerarg pathref="mergedprocessorpath.ref"/>
+ <compilerarg value="-Xplugin:ErrorProne @{errorprone.args}" />
+ <javaccontents />
+ </javac>
+ </sequential>
+ </macrodef>
<macrodef name="gwt.jar">
<attribute name="destfile" default="${project.lib}"/>
diff --git a/dev/build.xml b/dev/build.xml
index e65df23..69962fd 100755
--- a/dev/build.xml
+++ b/dev/build.xml
@@ -22,16 +22,17 @@
<target name="compile.tests" depends="build, compile.emma.if.enabled, build.alldeps.jar"
description="Compiles the test code for this project">
- <mkdir dir="${javac.junit.out}"/>
- <gwt.javac srcdir="" destdir="${javac.junit.out}">
- <src path="core/src"/>
- <src path="core/test"/>
- <compilerarg value="-Xep:MissingCasesInEnumSwitch:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:FallThrough:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:ReturnValueIgnored:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:EqualsIncompatibleType:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:SelfComparison:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:SelfEquals:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
+ <gwt.javac srcdir="" destdir="${javac.junit.out}" errorprone.args="
+ -Xep:MissingCasesInEnumSwitch:OFF
+ -Xep:FallThrough:OFF
+ -Xep:ReturnValueIgnored:OFF
+ -Xep:EqualsIncompatibleType:OFF
+ -Xep:SelfComparison:OFF
+ -Xep:SelfEquals:OFF
+ -Xep:ComparableType:OFF
+ ">
+ <src path="core/src"/>
+ <src path="core/test"/>
<classpath>
<pathelement location="${javac.out}"/>
<pathelement location="${alldeps.jar}"/>
@@ -39,13 +40,15 @@
</classpath>
</gwt.javac>
<gwt.javac srcdir="" destdir="${javac.junit.out}"
- excludes="**/EmulatedCharset.java,**/HashCodes.java,**/ConsoleLogger.java,**/NativeRegExp.java,**/SuperDevModeLogger.java">
+ excludes="**/EmulatedCharset.java,**/HashCodes.java,**/ConsoleLogger.java,**/NativeRegExp.java,**/SuperDevModeLogger.java"
+ errorprone.args="
+ -Xep:MissingCasesInEnumSwitch:OFF
+ -Xep:FallThrough:OFF
+ -Xep:ReturnValueIgnored:OFF
+ -Xep:EqualsIncompatibleType:OFF
+ ">
<src path="${gwt.root}/user/src" />
<src path="${gwt.root}/user/super/com/google/gwt/emul/javaemul/internal"/>
- <compilerarg value="-Xep:MissingCasesInEnumSwitch:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:FallThrough:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:ReturnValueIgnored:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:EqualsIncompatibleType:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
<classpath>
<pathelement location="${javac.out}"/>
<pathelement location="${gwt.tools.lib}/gss/2015-11-04/closure-stylesheets-library-20151104-rebased.jar"/>
@@ -64,7 +67,6 @@
<pathelement location="${gwt.tools.lib}/jsinterop/jsinterop-annotations-2.0.0.jar"/>
</classpath>
</gwt.javac>
-
</target>
<target name="build.alldeps.jar" description="Merges all dependency jars into a single jar">
@@ -199,7 +201,12 @@
description="Validates that the standalone gwt-compiler project can build.">
<mkdir dir="${javac.out}"/>
<gwt.javac srcdir="core/super" excludes="com/google/gwt/dev/jjs/intrinsic/"/>
- <gwt.javac srcdir="core/src">
+ <gwt.javac srcdir="core/src" errorprone.args="
+ -Xep:MissingCasesInEnumSwitch:OFF
+ -Xep:FallThrough:OFF
+ -Xep:ReturnValueIgnored:OFF
+ -Xep:EqualsIncompatibleType:OFF
+ ">
<include name="com/google/gwt/core/ext/**"/>
<include name="com/google/gwt/core/linker/**"/>
<include name="com/google/gwt/dev/About.java"/>
@@ -216,10 +223,6 @@
<include name="com/google/gwt/soyc/**"/>
<include name="com/google/gwt/util/**"/>
<include name="org/eclipse/jdt/**"/>
- <compilerarg value="-Xep:MissingCasesInEnumSwitch:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:FallThrough:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:ReturnValueIgnored:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:EqualsIncompatibleType:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
<classpath>
<pathelement location="${gwt.tools.lib}/apache/ant-zipscanner/ant-zipscanner-1.6.5-1-rebased.jar"/>
<pathelement location="${gwt.tools.lib}/colt/colt-1.2.jar"/>
@@ -246,12 +249,12 @@
<target name="compile" depends="compiler.standalone, build.alldeps.jar"
description="Compiles this project">
- <gwt.javac srcdir="" excludes="${filter.pattern}">
- <src path="core/src"/>
- <compilerarg value="-Xep:MissingCasesInEnumSwitch:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:FallThrough:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:ReturnValueIgnored:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:EqualsIncompatibleType:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
+ <gwt.javac srcdir="core/src" excludes="${filter.pattern}" errorprone.args="
+ -Xep:MissingCasesInEnumSwitch:OFF
+ -Xep:FallThrough:OFF
+ -Xep:ReturnValueIgnored:OFF
+ -Xep:EqualsIncompatibleType:OFF
+ ">
<classpath>
<pathelement location="${alldeps.jar}"/>
</classpath>
diff --git a/dev/codeserver/build.xml b/dev/codeserver/build.xml
index 7277f67..2d59a7e 100755
--- a/dev/codeserver/build.xml
+++ b/dev/codeserver/build.xml
@@ -6,7 +6,6 @@
<property.ensure name="gwt.dev.jar" location="${gwt.build.lib}/gwt-dev.jar" />
<target name="compile">
- <mkdir dir="${javac.out}" />
<gwt.javac srcdir="java">
<classpath>
<pathelement location="${gwt.dev.jar}" />
@@ -16,7 +15,6 @@
<target name="compile.tests" depends="compile"
description="Compile tests java source">
- <mkdir dir="${javac.junit.out}" />
<gwt.javac srcdir="" destdir="${javac.junit.out}">
<src path="java" />
<src path="javatests" />
diff --git a/tools/api-checker/build.xml b/tools/api-checker/build.xml
index 5f63f66..7349ad1 100755
--- a/tools/api-checker/build.xml
+++ b/tools/api-checker/build.xml
@@ -12,7 +12,6 @@
<property.ensure name="gwt.user.jar" location="${gwt.build.lib}/gwt-user.jar" />
<target name="compile" description="Compile all class files">
- <mkdir dir="${javac.out}" />
<gwt.javac>
<classpath>
<pathelement location="${gwt.dev.jar}" />
@@ -31,7 +30,6 @@
<target name="compile.tests"
depends="compile.dev.tests, compile.emma.if.enabled"
description="Compiles the test code for this project">
- <mkdir dir="${javac.junit.out}" />
<gwt.javac srcdir="test" destdir="${javac.junit.out}">
<classpath>
<pathelement location="${javac.out}" />
diff --git a/tools/cldr-import/build.xml b/tools/cldr-import/build.xml
index 2c95558..9535445 100644
--- a/tools/cldr-import/build.xml
+++ b/tools/cldr-import/build.xml
@@ -44,9 +44,8 @@
</path>
<target name="compile" description="Compile java source">
- <mkdir dir="${javac.out}" />
<gwt.javac>
- <classpath refid="project.class.path"/>
+ <classpath refid="project.class.path" />
</gwt.javac>
<copy todir="${javac.out}">
<fileset dir="src" excludes="**/*.java"/>
@@ -54,7 +53,6 @@
</target>
<target name="compile.tests" description="Compile java source">
- <mkdir dir="${javac.junit.out}" />
<gwt.javac srcdir="test" destdir="${javac.junit.out}">
<classpath>
<pathelement location="${javac.out}"/>
diff --git a/user/build.xml b/user/build.xml
index 615ea77..1c5aa2e 100755
--- a/user/build.xml
+++ b/user/build.xml
@@ -101,15 +101,17 @@
<target name="compile" description="Compile all class files"
unless="compile.complete">
- <mkdir dir="${javac.out}"/>
- <gwt.javac excludes="**/EmulatedCharset.java,**/HashCodes.java,**/ConsoleLogger.java,**/NativeRegExp.java,**/SuperDevModeLogger.java">
- <src path="super/com/google/gwt/emul/javaemul/internal"/>
- <compilerarg value="-Xep:MissingCasesInEnumSwitch:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:SelfComparison:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:SelfEquals:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:FallThrough:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:ReturnValueIgnored:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:EqualsIncompatibleType:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
+ <gwt.javac
+ excludes="**/EmulatedCharset.java,**/HashCodes.java,**/ConsoleLogger.java,**/NativeRegExp.java,**/SuperDevModeLogger.java"
+ errorprone.args="
+ -Xep:MissingCasesInEnumSwitch:OFF
+ -Xep:SelfComparison:OFF
+ -Xep:SelfEquals:OFF
+ -Xep:FallThrough:OFF
+ -Xep:ReturnValueIgnored:OFF
+ -Xep:EqualsIncompatibleType:OFF
+ ">
+ <src path="super/com/google/gwt/emul/javaemul/internal" />
<classpath>
<pathelement location="${gwt.tools.lib}/gss/2015-10-07/closure-stylesheets-library-20151007-rebased.jar"/>
<pathelement location="${gwt.tools.lib}/gss/2015-11-04/closure-stylesheets-library-20151104-rebased.jar"/>
@@ -153,19 +155,27 @@
</target>
<target name="-compile.tests.java8" if="isJava8" depends="compile.dev.tests, compile.emma.if.enabled">
- <mkdir dir="${javac.junit.out}"/>
<gwt.javac srcdir="test" destdir="${javac.junit.out}"
- excludes="com/google/gwt/langtest/**,**/super/**">
- <compilerarg value="-Xep:MissingCasesInEnumSwitch:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:SelfComparison:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:SelfEquals:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:FallThrough:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:ReturnValueIgnored:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:EqualsIncompatibleType:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:IdentityBinaryExpression:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:LoopConditionChecker:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:JUnitAssertSameCheck:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
- <compilerarg value="-Xep:CollectionIncompatibleType:OFF" compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"/>
+ excludes="com/google/gwt/langtest/**,**/super/**"
+ processorpath="test.extraclasspath"
+ errorprone.args="
+ -Xep:SelfAssignment:OFF
+ -Xep:MissingCasesInEnumSwitch:OFF
+ -Xep:SelfComparison:OFF
+ -Xep:SelfEquals:OFF
+ -Xep:FallThrough:OFF
+ -Xep:ReturnValueIgnored:OFF
+ -Xep:EqualsIncompatibleType:OFF
+ -Xep:IdentityBinaryExpression:OFF
+ -Xep:LoopConditionChecker:OFF
+ -Xep:JUnitAssertSameCheck:OFF
+ -Xep:CollectionIncompatibleType:OFF
+ -Xep:DeadThread:OFF
+ -Xep:ComplexBooleanConstant:OFF
+ -Xep:ComparableType:OFF
+ -Xep:DoNotCall:OFF
+ -Xep:BadAnnotationImplementation:OFF
+ ">
<classpath>
<pathelement location="${javac.out}"/>
<pathelement location="${gwt.tools.lib}/junit/junit-4.8.2.jar"/>