Compile using Error Prone (when using Java 8)

Move all <javac> to the <gwt.javac> preset,
remove legacy build.jvm.is1? Ant properties.

Change-Id: I3be370a153a6f783f9200592d0dc097902447a27
diff --git a/common.ant.xml b/common.ant.xml
index f3a9b6e..b77ea2a 100755
--- a/common.ant.xml
+++ b/common.ant.xml
@@ -1,4 +1,4 @@
-<project name="common">
+<project name="common" xmlns:if="ant:if">
   <!-- 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
@@ -64,6 +64,12 @@
   <property name="javac.source" value="1.7"/>
   <property name="javac.target" value="1.7"/>
   <property name="javac.nowarn" value="true"/>
+  <condition property="javac.fork" value="true" else="false">
+    <isfalse value="${isJava8}"/>
+  </condition>
+  <condition property="javac.compiler" value="modern" else="com.google.errorprone.ErrorProneAntCompilerAdapter">
+    <isfalse value="${isJava8}"/>
+  </condition>
   <property name="junit.out" location="${project.build}/test"/>
   <property name="emma.dir" value="${gwt.tools.redist}/emma"/>
   <property name="emma.filter.exclude" value=""/>
@@ -104,15 +110,6 @@
   </condition>
   <fail unless="build.host.platform" message="Building on ${os.name} is not supported"/>
 
-  <!-- JVM -->
-  <condition property="build.jvm.is15">
-    <equals arg1="${ant.java.version}" arg2="1.5"/>
-  </condition>
-
-  <condition property="build.jvm.is16">
-    <equals arg1="${ant.java.version}" arg2="1.6"/>
-  </condition>
-
   <!-- JUnit support -->
   <property name="gwt.junit.port" value="8888"/>
   <property name="gwt.junit.testcase.includes" value="**/*Suite.class"/>
@@ -157,8 +154,12 @@
   <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}" fork="true"
-           memoryMaximumSize="1024m" includeantruntime="false"/>
+           nowarn="${javac.nowarn}" encoding="${javac.encoding}"
+           includeantruntime="false" fork="${javac.fork}" compiler="${javac.compiler}">
+      <compilerclasspath if:true="${isJava8}">
+        <pathelement location="${gwt.tools.lib}/errorprone/error_prone_ant-2.0.19.jar"/>
+      </compilerclasspath>
+    </javac>
   </presetdef>
 
   <macrodef name="gwt.jar">
diff --git a/dev/build.xml b/dev/build.xml
index b2092f6..e138569 100755
--- a/dev/build.xml
+++ b/dev/build.xml
@@ -26,6 +26,12 @@
     <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"/>
       <classpath>
         <pathelement location="${javac.out}"/>
         <pathelement location="${alldeps.jar}"/>
@@ -36,6 +42,10 @@
                excludes="**/EmulatedCharset.java,**/HashCodes.java,**/ConsoleLogger.java,**/SuperDevModeLogger.java">
       <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"/>
@@ -201,6 +211,10 @@
       <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-1.6.5.jar"/>
         <pathelement location="${gwt.tools.lib}/colt/colt-1.2.jar"/>
@@ -227,6 +241,10 @@
           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"/>
       <classpath>
         <pathelement location="${alldeps.jar}"/>
       </classpath>
diff --git a/dev/codeserver/build.xml b/dev/codeserver/build.xml
index e40b48b..ef45007 100755
--- a/dev/codeserver/build.xml
+++ b/dev/codeserver/build.xml
@@ -17,7 +17,7 @@
   <target name="compile.tests" depends="compile"
           description="Compile tests java source">
     <mkdir dir="${javac.junit.out}" />
-    <javac destdir="${javac.junit.out}">
+    <gwt.javac srcdir="" destdir="${javac.junit.out}">
       <src path="java" />
       <src path="javatests" />
       <classpath>
@@ -26,7 +26,7 @@
         <pathelement location="${gwt.dev.jar}" />
         <pathelement location="${gwt.tools.lib}/junit/junit-4.8.2.jar" />
       </classpath>
-    </javac>
+    </gwt.javac>
   </target>
 
   <target name="build" depends="compile" description="builds gwt-codeserver.jar">
diff --git a/tools/cldr-import/build.xml b/tools/cldr-import/build.xml
index 41c69ac..2c95558 100644
--- a/tools/cldr-import/build.xml
+++ b/tools/cldr-import/build.xml
@@ -45,13 +45,9 @@
 
   <target name="compile" description="Compile java source">
     <mkdir dir="${javac.out}" />
-    <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">
+    <gwt.javac>
       <classpath refid="project.class.path"/>
-    </javac>
+    </gwt.javac>
     <copy todir="${javac.out}">
       <fileset dir="src" excludes="**/*.java"/>
     </copy>
@@ -59,16 +55,13 @@
 
   <target name="compile.tests" description="Compile java source">
     <mkdir dir="${javac.junit.out}" />
-    <javac srcdir="test" destdir="${javac.junit.out}"
-        debug="${javac.debug}" debuglevel="${javac.debuglevel}"
-        source="${javac.source}" target="${javac.target}"
-        nowarn="${javac.nowarn}" encoding="${javac.encoding}">
+    <gwt.javac srcdir="test" destdir="${javac.junit.out}">
       <classpath>
         <pathelement location="${javac.out}"/>
-      <path refid="project.class.path"/>
+        <path refid="project.class.path"/>
         <pathelement location="${gwt.tools.lib}/junit/junit-4.8.2.jar" />
       </classpath>
-    </javac>
+    </gwt.javac>
     <copy todir="${javac.junit.out}">
       <fileset dir="src" excludes="**/*.java"/>
     </copy>
diff --git a/user/build.xml b/user/build.xml
index b67bac4..738eb86 100755
--- a/user/build.xml
+++ b/user/build.xml
@@ -100,6 +100,12 @@
     <mkdir dir="${javac.out}"/>
     <gwt.javac excludes="**/EmulatedCharset.java,**/HashCodes.java,**/ConsoleLogger.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"/>
       <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"/>
@@ -145,6 +151,16 @@
     <mkdir dir="${javac.junit.out}"/>
     <gwt.javac srcdir="test" destdir="${javac.junit.out}"
                excludes="com/google/gwt/langtest/**,**/super/**,**/java8/**,**/*Java8Suite.java">
+      <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"/>
       <classpath>
         <pathelement location="${javac.out}"/>
         <pathelement location="${gwt.tools.lib}/junit/junit-4.8.2.jar"/>
@@ -159,6 +175,12 @@
   <target name="-compile.tests.java8" if="isJava8" depends="-compile.tests.java7">
     <gwt.javac srcdir="test" destdir="${javac.junit.out}" source="1.8" target="1.8"
                includes="**/java8/**,**/*Java8Suite.java">
+      <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"/>
       <classpath>
         <pathelement location="${javac.junit.out}"/>
         <pathelement location="${javac.out}"/>