ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/build.xml
Revision: 1.328
Committed: Sat Jan 7 16:30:33 2023 UTC (15 months, 1 week ago) by jsr166
Content type: text/xml
Branch: MAIN
CVS Tags: HEAD
Changes since 1.327: +5 -0 lines
Log Message:
jdk21

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