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"/>