ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/build.xml
Revision: 1.327
Committed: Fri Nov 25 20:33:50 2022 UTC (16 months ago) by jsr166
Content type: text/xml
Branch: MAIN
Changes since 1.326: +7 -2 lines
Log Message:
beginnings of support for jdk20

File Contents

# Content
1 <project name="jsr166" default="usage"
2 xmlns:if="ant:if"
3 xmlns:unless="ant:unless"
4 xmlns:ivy="antlib:org.apache.ivy.ant">
5
6 <description>
7 ------------------------------------------------------------------------------
8 Build file for JSR-166
9
10 Usage: ant [target]
11
12 See http://gee.cs.oswego.edu/dl/concurrency-interest/index.html for
13 more details.
14
15 User-specific settings are read from user.properties.
16 See user.properties.sample for an explanation of some useful settings.
17
18 The repository contains all dependencies except for ant and the JDK
19 itself. Because the JDK version matters and because different
20 targets require different JDKs, we assume that users have created a
21 hierarchy containing:
22 $HOME/jdk/jdk17
23 $HOME/jdk/jdk19
24 where each of the above is a JDK or a symlink to same, and
25 $HOME/jdk/src/jdk17
26 where each of the above is a JDK source tree or a symlink to same.
27
28 Alternatively, define ant variables thus:
29 ant -Djdk$N.home=... -Djdk$N.src.home=...
30 for $N in 17 .. 19 ...
31
32 As of 2016-03, the sources in src/main are for jdk9+ only.
33 As of 2019-08, the sources in src/main are for jdk11+ only.
34 As of 2019-10, compatibility support for jdk8 is dropped entirely.
35 As of 2022-02, the sources in src/main are for jdk17+ only.
36 ------------------------------------------------------------------------------
37 </description>
38
39 <!-- Run 'ant -projecthelp' (default target) -->
40 <target name="usage">
41 <java classname="org.apache.tools.ant.Main">
42 <arg value="-projecthelp" />
43 </java>
44 </target>
45
46 <!-- HOWTO printf debug: <echo message="prop=${prop}"/> -->
47
48 <!-- User-specific settings -->
49 <property file="user.properties"/>
50
51
52 <!-- Compilation options -->
53 <property name="build.debug" value="true"/>
54 <property name="build.debuglevel" value="source,lines,vars"/>
55 <property name="build.deprecation" value="false"/>
56 <property name="build.javadoc.access" value="protected"/>
57
58 <!-- Build locations -->
59 <property name="build.dir" location="build"/>
60 <property name="build.classes.dir" location="${build.dir}/classes"/>
61 <property name="build.testcases.dir" location="${build.dir}/testcases"/>
62 <property name="build.loops.dir" location="${build.dir}/loops"/>
63
64 <!-- JDK locations -->
65 <property name="jdks.home" location="${user.home}/jdk"/>
66
67 <macrodef name="defjdklocations">
68 <attribute name="v"/>
69 <sequential>
70 <property name="jdk@{v}.home" location="${jdks.home}/jdk@{v}"/>
71 <property name="java@{v}" location="${jdk@{v}.home}/bin/java"/>
72 <property name="javac@{v}" location="${jdk@{v}.home}/bin/javac"/>
73 <property name="javadoc@{v}" location="${jdk@{v}.home}/bin/javadoc"/>
74 <property name="jdk@{v}.src.home" location="${jdks.home}/src/jdk@{v}"/>
75 <property name="jdk@{v}.src.dir" location="${jdk@{v}.src.home}/jdk/src/java.base/share/classes"/>
76 </sequential>
77 </macrodef>
78
79 <macrodef name="mirror-dir">
80 <attribute name="src"/>
81 <attribute name="dst"/>
82 <sequential>
83 <delete dir="@{dst}"/>
84 <mkdir dir="@{dst}"/>
85 <copy todir="@{dst}" preservelastmodified="true">
86 <fileset dir="@{src}"/>
87 </copy>
88 </sequential>
89 </macrodef>
90
91 <defjdklocations v="17"/>
92 <defjdklocations v="18"/>
93 <defjdklocations v="19"/>
94 <defjdklocations v="20"/>
95
96 <!-- Source locations -->
97 <property name="src.dir" location="${basedir}/src/main"/>
98 <property name="test.src.dir" location="${basedir}/src/test"/>
99 <property name="loops.src.dir" location="${basedir}/src/loops"/>
100 <property name="tck.src.dir" location="${test.src.dir}/tck"/>
101 <property name="jtreg17.src.dir" location="${test.src.dir}/jtreg"/>
102 <property name="jtreg18.src.dir" location="${test.src.dir}/jtreg"/>
103 <property name="jtreg19.src.dir" location="${test.src.dir}/jtreg"/>
104 <property name="jtreg20.src.dir" location="${test.src.dir}/jtreg"/>
105 <property name="jtreg.src.dir" location="${jtreg17.src.dir}"/>
106 <property name="lib.dir" location="${basedir}/lib"/>
107 <property name="dist.dir" location="${basedir}/dist"/>
108 <property name="topsrc.dir" location="${basedir}/src"/>
109
110 <!-- Javadoc locations -->
111 <property name="docs.dir" location="${build.dir}/docs"/>
112 <property name="dist.docs.dir" location="${dist.dir}/docs"/>
113
114 <!-- Jar locations -->
115 <property name="product.jar" location="${build.dir}/jsr166.jar"/>
116 <property name="junit.jar" location="${lib.dir}/junit.jar"/>
117
118 <!-- Canonical location of jdk docs root, to use with javadoc -Xdocrootparent flag -->
119 <!-- Switched to https: in 2017-10 - JDK-8190312 -->
120 <property name="java17.docroot.url" value="https://docs.oracle.com/en/java/javase/17/docs"/>
121 <property name="java18.docroot.url" value="https://docs.oracle.com/en/java/javase/18/docs"/>
122 <property name="java19.docroot.url" value="https://docs.oracle.com/en/java/javase/19/docs"/>
123 <property name="java20.docroot.url" value="https://download.java.net/java/early_access/jdk20/docs"/>
124 <!-- Default jdk doc location (latest stable LTS release seems best) -->
125 <property name="java.docroot.url" value="${java17.docroot.url}"/>
126
127 <!-- Canonical location of jdk API docs, to use with javadoc link attribute -->
128 <property name="java17.api.url" value="${java17.docroot.url}/api/"/>
129 <property name="java18.api.url" value="${java18.docroot.url}/api/"/>
130 <property name="java19.api.url" value="${java19.docroot.url}/api/"/>
131 <property name="java20.api.url" value="${java20.docroot.url}/api/"/>
132 <property name="java.api.url" value="${java.docroot.url}/api/"/>
133
134 <!-- Define the "jtreg" task -->
135 <!-- See the docs in "jtreg -onlineHelp" -->
136 <taskdef name="jtreg" classname="com.sun.javatest.regtest.Main$$Ant"
137 classpath="${lib.dir}/jtreg.jar" />
138
139 <!-- Tck configuration options; see JSR166TestCase.java
140 To profile a single tck test class:
141 ant -Djsr166.profileTests=true -Djsr166.profileThreshold=10 -Djsr166.tckTestClass=CompletableFutureTest tck
142 To stress test a single tck test class:
143 ant -Djsr166.tckTestClass=CountedCompleterTest -Djsr166.runsPerTest=100 tck
144 To stress test a single tck test method:
145 ant -Djsr166.tckTestClass=RecursiveTaskTest -Djsr166.runsPerTest=1000 -Djsr166.methodFilter=testAbnormalInvokeAll3 tck
146 -->
147 <property name="jsr166.tckTestClass" value="JSR166TestCase"/>
148 <macrodef name="run-tck-tests">
149 <attribute name="tck.src.dir" default="${tck.src.dir}"/>
150 <attribute name="target"/>
151 <attribute name="compile-target" default="@{target}"/>
152 <attribute name="workdir"/>
153 <attribute name="classes"/>
154 <!--
155 <attribute name="jvmflags" default="-XX:+UseParallelGC -XX:-UseBiasedLocking -ea -esa -Djsr166.testImplementationDetails=true"/>
156 -->
157 <attribute name="jvmflags" default="-ea -esa -Djsr166.testImplementationDetails=true"/>
158 <element name="javac-elements" optional="true"/>
159
160 <sequential>
161
162 <mkdir dir="@{workdir}/tck-classes"/>
163
164 <javac srcdir="@{tck.src.dir}"
165 destdir="@{workdir}/tck-classes"
166 debug="${build.debug}"
167 debuglevel="${build.debuglevel}"
168 deprecation="${build.deprecation}"
169 source="@{compile-target}"
170 target="@{compile-target}"
171 classpath="${junit.jar}"
172 includeAntRuntime="false"
173 includeJavaRuntime="false"
174 encoding="ASCII"
175 executable="${javac@{compile-target}}"
176 fork="true">
177
178 <include name="*.java"/>
179 <compilerarg value="-XDignore.symbol.file=true"/>
180 <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial,-deprecation,-try"/>
181 <compilerarg value="-Xdoclint:reference/private"/>
182 <compilerarg value="--patch-module=java.base=@{classes}"/>
183 <compilerarg line="${build.args}"/>
184 <javac-elements/>
185
186 </javac>
187
188 <java classname="${jsr166.tckTestClass}"
189 failonerror="true"
190 jvm="${java@{target}}"
191 fork="true">
192 <jvmarg value="--patch-module=java.base=@{classes}"/>
193 <jvmarg value="--add-opens=java.base/java.lang=ALL-UNNAMED"/>
194 <jvmarg value="--add-opens=java.base/java.util=ALL-UNNAMED"/>
195 <jvmarg value="--add-opens=java.base/java.util.concurrent=ALL-UNNAMED"/>
196 <jvmarg value="--add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED"/>
197 <jvmarg value="--add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED"/>
198 <jvmarg line="@{jvmflags}"/>
199 <!-- ant -Dvmoptions="-Xmx8m" -Djsr166.tckTestClass=CompletableFutureTest tck -->
200 <jvmarg line="${vmoptions}" if:set="vmoptions"/>
201
202 <!-- ant -Djava.util.concurrent.ForkJoinPool.common.parallelism=1 tck -->
203 <syspropertyset id="system-properties-used-by-tck">
204 <propertyref prefix="java.util.concurrent.ForkJoinPool"/>
205 <propertyref prefix="jsr166."/>
206 <propertyref name="test.timeout.factor"/>
207 </syspropertyset>
208
209 <classpath>
210 <pathelement location="${junit.jar}"/>
211 <pathelement location="@{workdir}/tck-classes"/>
212 </classpath>
213 </java>
214
215 </sequential>
216 </macrodef>
217
218 <!-- Define jtreg test sets for different jdk versions -->
219 <!-- ant -Djtreg.test.pattern="**/ConcurrentHashMap/" -->
220 <!-- ant -Djtreg.test.pattern="**/ToArray.java" -->
221 <property name="jtreg.test.pattern" value="**/*.java"/>
222 <macrodef name="defjtregtests">
223 <attribute name="v"/>
224 <sequential>
225 <fileset dir="${jtreg@{v}.src.dir}">
226 <patternset id="jdk@{v}.jtreg.tests">
227 <include name="${jtreg.test.pattern}"/>
228 </patternset>
229 </fileset>
230 </sequential>
231 </macrodef>
232
233 <defjtregtests v="17"/>
234 <defjtregtests v="18"/>
235 <defjtregtests v="19"/>
236 <defjtregtests v="20"/>
237
238 <!-- ant -Djtreg.flags=-timeoutFactor:4 -->
239 <property name="jtreg.flags" value=""/>
240
241 <macrodef name="run-jtreg-tests">
242 <attribute name="target"/>
243 <attribute name="workdir"/>
244 <attribute name="classes"/>
245 <attribute name="verbose" default="${jtreg.verbose}"/>
246 <attribute name="jtregflags" default=""/>
247 <element name="jtreg-elements" optional="true"/>
248
249 <sequential>
250
251 <!-- ant -Djtreg.verbose=time,fail,error jtreg -->
252 <property name="jtreg.verbose" value="nopass,fail,error"/>
253
254 <!-- concurrency > 1 mitigates slowness of some jtreg tests -->
255 <!-- BUT concurrency:auto starts "too many" VMs; just 1 free core each -->
256 <!-- In 2020 concurrency:3 seems like a sweet spot -->
257 <!-- Override using: ant -Djtreg.concurrency="N" jtreg -->
258 <property name="jtreg.concurrency" value="3"/>
259
260 <delete dir="@{workdir}/JTwork" quiet="true"/>
261 <jtreg dir="${jtreg@{target}.src.dir}"
262 jdk="${jdk@{target}.home}"
263 workDir="@{workdir}/JTwork">
264 <patternset refid="jdk@{target}.jtreg.tests"/>
265 <arg value="-javacoption:--patch-module=java.base=@{classes}"/>
266 <arg value="-vmoption:--patch-module=java.base=@{classes}"/>
267 <arg value="-vmoption:-Xmx256m"/>
268 <arg value="-concurrency:${jtreg.concurrency}"/>
269 <arg value="-vmoptions:-esa -ea"/>
270 <arg value="-vmoptions:${vmoptions}" if:set="vmoptions"/>
271 <arg value="-agentvm"/>
272 <arg value="-noreport"/>
273 <arg value="-verbose:@{verbose}"/>
274 <arg value="-automatic"/>
275 <arg value="-k:!ignore"/>
276 <arg line="@{jtregflags}"/>
277 <arg line="${jtreg.flags}"/>
278 <jtreg-elements/>
279 </jtreg>
280 </sequential>
281 </macrodef>
282
283 <!-- ALoops classpath -->
284 <path id="loops.classpath">
285 <pathelement location="${build.loops.dir}"/>
286 </path>
287
288 <!-- Support @jls tag, used in jdk8+ javadoc -->
289 <!-- TODO: switch to @jls taglet, as supported by jdk14+ javadoc -->
290 <property name="javadoc.jls.cite" value="The Java&amp;trade; Language Specification"/>
291 <property name="javadoc.jls.option" value="jls:a:See &lt;cite&gt;${javadoc.jls.cite}&lt;/cite&gt;:"/>
292
293 <!-- Main targets -->
294
295 <!-- Default values: may seem strange ... -->
296 <!-- At runtime, target latest, but build for current LTS -->
297 <property name="java.runtime.target" value="19"/>
298 <property name="build.main.java" value="${java17}"/>
299 <property name="build.main.javac" value="${javac17}"/>
300 <property name="build.main.javadoc" value="${javadoc19}"/>
301 <property name="build.main.javadoc.source" value="${java.runtime.target}"/>
302
303 <target name="dists"
304 depends="dist"
305 description="Builds all public jars and docs"/>
306
307 <target name="compile"
308 depends="configure-compiler"
309 description="Compiles src/main sources to build dir">
310
311 <local name="destdir"/>
312 <property name="destdir" value="${build.classes.dir}/java.base"/>
313
314 <mkdir dir="${destdir}"/>
315
316 <javac srcdir="${src.dir}"
317 destdir="${destdir}"
318 debug="${build.debug}"
319 debuglevel="${build.debuglevel}"
320 deprecation="${build.deprecation}"
321 classpath=""
322 includeAntRuntime="false"
323 includeJavaRuntime="false"
324 encoding="ASCII"
325 executable="${build.main.javac}"
326 fork="true">
327
328 <include name="**/*.java"/>
329 <compilerarg value="--patch-module=java.base=${src.dir}"/>
330 <compilerarg value="-Xprefer:source"/>
331 <compilerarg value="-XDignore.symbol.file=true"/>
332 <compilerarg value="-Xlint:all"/>
333 <compilerarg value="-Xdoclint:all/protected"/>
334 <compilerarg value="-Xdoclint/package:java.util.*"/>
335 <compilerarg value="-Werror"/>
336 <compilerarg line="-Xmaxerrs 1000 -Xmaxwarns 1000"/>
337 <compilerarg line="${build.args}"/>
338 </javac>
339 </target>
340
341 <target name="jar"
342 depends="compile"
343 description="Builds library jar for src/main from compiled sources">
344 <local name="subdir"/>
345 <available property="subdir" file="${build.classes.dir}/java.base" type="dir" value="/java.base"/>
346 <jar destfile="${product.jar}">
347 <fileset dir="${build.classes.dir}${subdir}"/>
348 <manifest>
349 <attribute name="Built-By" value="${user.name}"/>
350 <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
351 </manifest>
352 </jar>
353 </target>
354
355
356 <target name="docs"
357 description="Builds javadocs for src/main to dist dir">
358 <delete dir="${docs.dir}" quiet="true"/>
359 <mkdir dir="${docs.dir}"/>
360 <javadoc destdir="${docs.dir}"
361 packagenames="none"
362 link="${java.api.url}"
363 overview="${src.dir}/intro.html"
364 access="${build.javadoc.access}"
365 sourcepath="${src.dir}"
366 classpath=""
367 source="${build.main.javadoc.source}"
368 executable="${build.main.javadoc}">
369 <fileset dir="${src.dir}" defaultexcludes="yes">
370 <include name="java/**/*.java"/>
371 </fileset>
372 <arg line="-Xdocrootparent ${java.docroot.url}"/>
373 <arg line="-Xmaxerrs 1000 -Xmaxwarns 1000"/>
374 <arg line="-Xmaxerrs 1000 -Xmaxwarns 1"/>
375 <arg value="-quiet"/>
376 <arg value="-XDignore.symbol.file=true"/>
377 <arg value="-html5"/>
378 <arg value="-Xdoclint:all,-missing"/>
379 <arg value="--patch-module=java.base=${src.dir}"/>
380 <arg value="--frames" if:set="use-frames"/>
381 <arg value="--override-methods=summary"/>
382 <arg value="-tag"/> <arg value="${javadoc.jls.option}"/>
383 <arg value="-tag"/> <arg value="implSpec:a:Implementation Requirements:"/>
384 <arg value="-tag"/> <arg value="implNote:a:Implementation Note:"/>
385 <arg value="-tag"/> <arg value="apiNote:a:API Note:"/>
386 </javadoc>
387 </target>
388
389 <target name="dist"
390 depends="dist-clean, dist-jar, dist-docs"
391 description="Puts all distributable products in single hierarchy"/>
392
393 <target name="clean"
394 description="Removes all build products">
395 <delete dir="${build.dir}"/>
396 </target>
397
398 <target name="dist-clean"
399 description="Removes all build and distribution products">
400 <delete dir="${build.dir}"/>
401 <delete dir="${dist.dir}"/>
402 </target>
403
404 <target name="dist-jar"
405 depends="clean, jar">
406 <copy file="${product.jar}" todir="${dist.dir}"/>
407 </target>
408
409 <target name="dist-docs"
410 depends="clean, docs">
411 <mirror-dir src="${docs.dir}" dst="${dist.docs.dir}"/>
412 </target>
413
414 <target name="tck"
415 depends="jar"
416 description="Runs tck tests for src/main directly">
417 <run-tck-tests
418 target="${java.runtime.target}"
419 workdir="${build.dir}"
420 classes="${product.jar}">
421 <javac-elements>
422 <!-- <compilerarg value="-Werror"/> -->
423 </javac-elements>
424 </run-tck-tests>
425 </target>
426
427 <target name="tck-parallelism-1"
428 description="Runs tck with common pool parallelism 1">
429 <antcall target="tck">
430 <param name="java.util.concurrent.ForkJoinPool.common.parallelism" value="1"/>
431 </antcall>
432 </target>
433
434 <target name="tck-parallelism-0"
435 description="Runs tck with common pool parallelism 0">
436 <antcall target="tck">
437 <param name="java.util.concurrent.ForkJoinPool.common.parallelism" value="0"/>
438 </antcall>
439 </target>
440
441 <target name="tck-security-manager"
442 description="Runs tck with a security manager">
443 <antcall target="tck">
444 <param name="jsr166.useSecurityManager" value="true"/>
445 </antcall>
446 </target>
447
448 <target name="jtreg"
449 depends="jar"
450 description="Runs jtreg tests for src/main using the jtreg ant task">
451 <run-jtreg-tests
452 target="${java.runtime.target}"
453 workdir="${build.dir}"
454 classes="${product.jar}"/>
455 </target>
456
457 <target name="test"
458 depends="tck, tck-parallelism-1, tck-parallelism-0, jtreg"
459 description="Runs tck and jtreg tests for src/main"/>
460
461 <target name="test-version-permutations"
462 depends="test17, test19, clean, test, docs"
463 description="Runs tck and jtreg tests for various build-time and runtime java versions"/>
464
465
466 <target name="test17">
467 <antcall>
468 <param name="java.runtime.target" value="17"/>
469 <param name="build.main.javac" value="${javac17}"/>
470 <param name="build.main.javadoc" value="${javadoc17}"/>
471 <param name="build.main.javadoc.source" value="17"/>
472 <target name="clean"/>
473 <target name="test"/>
474 <target name="docs"/>
475 </antcall>
476 </target>
477 <target name="test19">
478 <antcall>
479 <param name="java.runtime.target" value="19"/>
480 <param name="build.main.javac" value="${javac19}"/>
481 <param name="build.main.javadoc" value="${javadoc19}"/>
482 <param name="build.main.javadoc.source" value="19"/>
483 <target name="clean"/>
484 <target name="test"/>
485 <target name="docs"/>
486 </antcall>
487 </target>
488
489
490 <target name="configure-compiler">
491 <fail message="ant version too old">
492 <condition> <not> <antversion atleast="1.9.1"/> </not> </condition>
493 </fail>
494
495 <property name="unchecked.option" value="-Xlint:unchecked"/>
496
497 <condition property="warnunchecked.arg" value="${unchecked.option}">
498 <istrue value="${build.warnunchecked}"/>
499 </condition>
500
501 <property name="warnunchecked.arg" value=""/>
502
503
504 <!-- Common options in javac invocations -->
505 <property name="build.args" value="${warnunchecked.arg}"/>
506
507 </target>
508
509
510 <target name="compile-test-loops" depends="jar"
511 description="Compiles all the perf tests in src/test/loops">
512
513 <mkdir dir="${build.dir}/test/loops"/>
514
515 <javac srcdir="${basedir}/src/test/loops"
516 destdir="${build.dir}/test/loops"
517 debug="${build.debug}"
518 debuglevel="${build.debuglevel}"
519 deprecation="${build.deprecation}"
520 includeAntRuntime="false"
521 includeJavaRuntime="false"
522 encoding="ASCII"
523 executable="${build.main.javac}"
524 fork="true">
525
526 <include name="*.java"/>
527 <compilerarg value="-XDignore.symbol.file=true"/>
528 <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial,-deprecation"/>
529 <compilerarg value="--patch-module=java.base=${src.dir}"/>
530 <compilerarg line="${build.args}"/>
531 </javac>
532 </target>
533
534
535 <!-- old branches no longer maintained. build support deleted -->
536 <!-- jsr166 4jdk8; (no longer maintained as of 2019-10) -->
537 <!-- jsr166 4jdk7 (no longer maintained) -->
538 <!-- jsr166x (no longer maintained) -->
539 <!-- jsr166y (no longer maintained) -->
540 <!-- extra166y (no longer maintained) -->
541 <!-- jsr166e (no longer maintained) -->
542
543 <!-- Find buglets that can be detected by static build tools -->
544
545 <!-- <target name="lint"> -->
546 <!-- <antcall target="dists"> -->
547 <!-- <param name="build.javadoc.access" value="protected"/> -->
548 <!-- </antcall> -->
549 <!-- </target> -->
550
551 <!-- Generates all doclint warnings, even for private methods (rarely useful) -->
552 <target name="doclint-private">
553 <antcall target="dist">
554 <param name="build.javadoc.access" value="private"/>
555 </antcall>
556 </target>
557
558
559 <!-- ==============================================================
560 Experimental errorprone support
561 https://errorprone.info
562 https://errorprone.info/docs/installation
563 https://github.com/google/error-prone/issues/1143
564 =================================================================== -->
565 <path id="errorprone.processorpath.path">
566 <pathelement location="${lib.dir}/error_prone_core-2.3.4-with-dependencies.jar"/>
567 <pathelement location="${lib.dir}/dataflow-2.5.7.jar"/>
568 <pathelement location="${lib.dir}/javacutil-2.5.7.jar"/>
569 <pathelement location="${lib.dir}/jFormatString-3.0.0.jar"/>
570 <pathelement location="${lib.dir}/caffeine-2.8.0.jar"/>
571 </path>
572 <property name="errorprone.processorpath" refid="errorprone.processorpath.path" />
573 <property name="errorprone.jsr166.user.flags" value=""/>
574 <property name="errorprone.jsr166.flags"
575 value="-Xep:HashtableContains:OFF
576 -Xep:PreferJavaTimeOverload:OFF
577 -Xep:JdkObsolete:OFF
578 -Xep:MissingOverride:OFF
579 -Xep:MissingFail:OFF
580 -Xep:ThreadPriorityCheck:OFF
581 -Xep:MixedArrayDimensions:ERROR
582 -Xep:RemoveUnusedImports:ERROR
583 -Xep:EmptyIf:ERROR
584 -Xep:MultipleTopLevelClasses:ERROR
585 -Xep:ClassName:ERROR
586 -Xep:LongLiteralLowerCaseSuffix:ERROR
587 -Xep:RedundantThrows:ERROR
588 -Xep:IdentityBinaryExpression:WARN
589 -Xep:ConstructorInvokesOverridable:WARN
590 -Xep:MethodCanBeStatic:WARN
591 ${errorprone.jsr166.user.flags}"/>
592 <!-- -Xep:WildcardImport:ERROR -->
593 <property name="errorprone.jsr166.test.flags"
594 value="-Xep:StringSplitter:OFF
595 -Xep:BoxedPrimitiveConstructor:OFF
596 -Xep:UnnecessaryParentheses:OFF
597 -Xep:ModifyingCollectionWithItself:OFF"/>
598 <!-- ant -emacs errorprone |& grep -EA1 '(warning|error):|warnings' -->
599 <target name="errorprone"
600 depends="clean, configure-compiler"
601 description="Run errorprone over jsr166 source code (experimental)">
602
603 <local name="destdir"/>
604 <property name="destdir" value="${build.classes.dir}/java.base"/>
605 <mkdir dir="${destdir}"/>
606
607 <javac srcdir="${src.dir}"
608 destdir="${destdir}"
609 debug="${build.debug}"
610 debuglevel="${build.debuglevel}"
611 deprecation="${build.deprecation}"
612 classpath=""
613 includeAntRuntime="false"
614 includeJavaRuntime="false"
615 encoding="ASCII"
616 executable="${build.main.javac}"
617 fork="true">
618
619 <include name="**/*.java"/>
620 <!-- Needed to silence -Xep:FutureReturnValueIgnored -->
621 <compilerarg value="-J--illegal-access=permit"/>
622 <compilerarg value="-XDcompilePolicy=simple"/>
623 <compilerarg value="-processorpath"/>
624 <compilerarg pathref="errorprone.processorpath.path"/>
625 <compilerarg value="-Xplugin:ErrorProne
626 ${errorprone.jsr166.flags}"/>
627 <compilerarg value="--patch-module=java.base=${src.dir}"/>
628 <compilerarg value="-Xprefer:source"/>
629 <compilerarg value="-XDignore.symbol.file=true"/>
630 <compilerarg value="-Xlint:all"/>
631 <compilerarg value="-Xdoclint:all/protected,reference/private"/>
632 <!-- <compilerarg line="-Xmaxerrs 3000 -Xmaxwarns 3000"/> -->
633 <compilerarg line="-Xmaxerrs 3000 -Xmaxwarns 1"/>
634 <compilerarg line="${build.args}"/>
635 </javac>
636
637 <jar destfile="${product.jar}">
638 <fileset dir="${destdir}"/>
639 </jar>
640
641 <run-tck-tests
642 target="${java.runtime.target}"
643 workdir="${build.dir}"
644 classes="${product.jar}">
645 <javac-elements>
646 <!-- Needed to silence -Xep:FutureReturnValueIgnored -->
647 <compilerarg value="-J--illegal-access=permit"/>
648 <compilerarg value="-XDcompilePolicy=simple"/>
649 <compilerarg line="-processorpath ${errorprone.processorpath}"/>
650 <compilerarg value="-Xplugin:ErrorProne
651 ${errorprone.jsr166.flags}
652 ${errorprone.jsr166.test.flags}"/>
653 <!-- <compilerarg line="-Xmaxerrs 3000 -Xmaxwarns 3000"/> -->
654 <compilerarg line="-Xmaxerrs 3000 -Xmaxwarns 1"/>
655 </javac-elements>
656 </run-tck-tests>
657 </target>
658
659 <!-- ant -emacs errorprone-jtreg |& grep -EA1 '(warning|error):' -->
660 <!-- -XDcompilePolicy=simple or byfile avoids confusing UnusedImports -->
661 <target name="errorprone-jtreg"
662 depends="jar"
663 description="Run errorprone over jtreg tests (experimental)">
664
665 <run-jtreg-tests
666 target="${java.runtime.target}"
667 workdir="${build.dir}"
668 classes="${product.jar}"
669 verbose="all">
670 <jtreg-elements>
671 <arg value="-javacoption:-XDcompilePolicy=simple"/>
672 <arg value="-javacoption:-processorpath"/>
673 <arg value="-javacoption:${errorprone.processorpath}"/>
674 <arg value="-javacoption:-Xplugin:ErrorProne
675 ${errorprone.jsr166.flags}
676 ${errorprone.jsr166.test.flags}
677 -Xep:MultipleTopLevelClasses:WARN
678 -Xep:NonAtomicVolatileUpdate:OFF"/>
679 </jtreg-elements>
680 </run-jtreg-tests>
681 </target>
682
683
684 <!-- ==============================================================
685 Running guava tests against jsr166 code
686 =================================================================== -->
687
688 <!-- <ivy:cachepath pathid="lib.path.id" inline="true" conf="*" -->
689 <!-- organisation="com.google.guava" module="guava-testlib" revision="21.0"/> -->
690 <!-- <property name="guava.version" value="21.0"/> -->
691
692 <!-- HOWTO debug print a path id -->
693 <!-- <pathconvert property="guava.testlib.classpath" refid="guava.testlib.classpath" /> -->
694 <!-- <echo message="guava.testlib.classpath=${guava.testlib.classpath}"/> -->
695
696 <!-- <ivy:retrieve pathid="guava.tests.classpath" type="jar" inline="true" conf="*" pattern="${lib.dir}/[type]/[artifact].[ext]" -->
697 <!-- organisation="com.google.guava" module="guava-tests"/> -->
698 <!-- <get src="http://repo2.maven.org/maven2/com/google/guava/guava-tests/${guava.version}/guava-tests-${guava.version}-tests.jar" -->
699 <!-- dest="${lib.dir}/jar/guava-tests-tests.jar" usetimestamp="true"/> -->
700 <!-- <ivy:cachepath pathid="lib.path.id" inline="true" conf="*" type="*" -->
701 <!-- organisation="com.google.guava" module="guava-testlib" revision="${guava.version}"/> -->
702
703 <!-- <test name="com.google.common.collect.testing.TestsForQueuesInJavaUtil"/> -->
704 <!-- <test name="com.google.common.collect.testing.TestsForListsInJavaUtil"/> -->
705 <!-- <test name="com.google.common.collect.testing.TestsForSetsInJavaUtil"/> -->
706 <!-- <test name="com.google.common.collect.testing.TestsForMapsInJavaUtil"/> -->
707
708 <!-- <ivy:retrieve pathid="guava.testlib.classpath" -->
709 <!-- type="*" inline="true" conf="*(private),*(public)" -->
710 <!-- pattern="${guava.dir}/[artifact].[ext]" -->
711 <!-- organisation="com.google.guava" module="guava-testlib"/> -->
712
713 <!-- Work around bug below by downloading guava-testlib-tests.jar "by hand": -->
714 <!-- https://issues.apache.org/jira/browse/IVY-1444 -->
715 <!-- maven tests artifacts cannot be downloaded because they are mapped to private configurations -->
716
717 <target name="init-ivy">
718 <get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/2.4.0/ivy-2.4.0.jar"
719 dest="${build.dir}/ivy.jar" usetimestamp="true" skipexisting="true"/>
720 <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant"
721 classpath="${build.dir}/ivy.jar"/>
722 </target>
723
724 <target name="guava-tests" depends="jar, init-ivy"
725 description="Guava tests run against jsr166 collections">
726 <property name="guava.dir" value="${build.dir}/guava-testlib"/>
727 <mkdir dir="${guava.dir}"/>
728 <ivy:retrieve pathid="guava.testlib.classpath"
729 type="jar,bundle" inline="true" conf="default,master"
730 pattern="${guava.dir}/[artifact].[ext]"
731 organisation="com.google.guava" module="guava-testlib"/>
732 <property name="guava.version" value="21.0"/>
733 <get src="http://repo2.maven.org/maven2/com/google/guava/guava-testlib/${guava.version}/guava-testlib-${guava.version}-tests.jar"
734 dest="${guava.dir}/guava-testlib-tests.jar" usetimestamp="true"/>
735 <junit printsummary="true" showoutput="true" haltonfailure="true"
736 jvm="${build.main.java}" fork="true">
737 <jvmarg line="-ea -esa --patch-module=java.base=${product.jar}"/>
738 <formatter type="brief"/>
739 <classpath>
740 <pathelement location="${guava.dir}/guava-testlib-tests.jar"/>
741 <path refid="guava.testlib.classpath"/>
742 </classpath>
743
744 <!-- "6" in "OpenJdk6Tests" misleadingly means "6+" -->
745 <test name="com.google.common.collect.testing.OpenJdk6Tests"/>
746 </junit>
747 </target>
748
749 </project>