• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright (C) 2007 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//      http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15//
16// Definitions for building the Android core library and associated tests.
17//
18
19// The Android core library provides low-level APIs for use by the rest of the
20// Android software stack. It is made up of various parts, some of which can be
21// found in libcore/ and other parts that can be found in various external/
22// directories.
23//
24// libcore has some sub-directories that follow a common structure:
25// e.g. dalvik, dom, harmony-tests, json, jsr166-tests, luni, libart, ojluni,
26// support, xml, xmlpull.
27//
28// The structure of these is generally:
29//
30//   src/
31//       main/               # To be shipped on every device.
32//            java/          # Java source for library code.
33//            native/        # C/C++ source for library code.
34//            resources/     # Support files.
35//       test/               # Built only on demand, for testing.
36//            java/          # Java source for tests.
37//            native/        # C/C++ source for tests (rare).
38//            resources/     # Support files.
39//
40// All subdirectories are optional.
41
42build = [
43    "openjdk_java_files.bp",
44    "non_openjdk_java_files.bp",
45]
46
47// The Java files and their associated resources.
48filegroup {
49    name: "core-luni-resources",
50    visibility: [
51        "//libcore:__subpackages__",
52    ],
53    path: "luni/src/main/java/",
54    srcs: [
55        "luni/src/main/java/java/util/logging/logging.properties",
56        "luni/src/main/java/java/security/security.properties",
57    ],
58}
59
60filegroup {
61    name: "core-ojluni-resources",
62    visibility: [
63        "//libcore:__subpackages__",
64    ],
65    path: "ojluni/src/main/resources/",
66    srcs: [
67        "ojluni/src/main/resources/**/*",
68    ],
69}
70
71core_resources = [
72    ":core-luni-resources",
73    ":core-ojluni-resources",
74]
75
76// The source files that go into core-oj.
77filegroup {
78    name: "core_oj_java_files",
79    visibility: [
80        "//libcore:__subpackages__",
81    ],
82    srcs: [":openjdk_java_files"],
83}
84
85// OpenJDK source is not annotated with @hide so we need this separate
86// filegroup for just the parts that contribute to the API.
87filegroup {
88    name: "core_oj_api_files",
89    srcs: [":openjdk_javadoc_files"],
90}
91
92// The source files that go into core-libart.
93filegroup {
94    name: "core_libart_java_files",
95    visibility: [
96        "//libcore:__subpackages__",
97    ],
98    srcs: [
99        ":non_openjdk_java_files",
100    ],
101}
102
103// Some parts of libart are not annotated with @hide so we need this separate
104// filegroup for just the parts that contribute to the API.
105filegroup {
106    name: "core_libart_api_files",
107    srcs: [
108        ":non_openjdk_javadoc_files",
109    ],
110}
111
112// The set of files for the ART module that contribute to one or more API
113// surfaces. This includes files that are in the public API as well as those
114// that are not but which have been marked up with @hide plus one or more of
115// the API defining annotations.
116//
117// Some source files in :core_oj_api_files and :openjdk_mmodule_extra_files are
118// annotated by applying annotations to the .annotated.java stubs files in
119// ojluni/annotated/mmodules and rather than in the original source. See the comments
120// in openjdk_java_files.bp for more details.
121filegroup {
122    name: "art_module_api_files",
123    visibility: [
124        "//libcore:__subpackages__",
125    ],
126    srcs: [
127        ":apache-xml_api_files",
128        ":bouncycastle_java_files",
129        ":core_oj_api_files",
130        ":core_libart_api_files",
131        ":okhttp_api_files",
132        ":openjdk_mmodule_extra_files",
133    ],
134}
135
136java_defaults {
137    name: "libcore_java_defaults",
138    javacflags: [
139        //"-Xlint:all",
140        //"-Xlint:-serial,-deprecation,-unchecked",
141    ],
142    dxflags: ["--core-library"],
143    errorprone: {
144        javacflags: [
145            "-Xep:MissingOverride:OFF", // Ignore missing @Override.
146            "-Xep:ConstantOverflow:WARN", // Known constant overflow in SplittableRandom
147        ],
148    },
149}
150
151//
152// Build for the target (device).
153//
154
155// A target used to bootstrap compilation for the core library.
156//
157// See core-all-system-modules for more details.
158java_library {
159    name: "core-all",
160    defaults: ["libcore_java_defaults"],
161
162    srcs: [
163        // Use the source code for the I18N module intra core API as using the
164        // compiled version does not work due to limitations in either soong or the javac
165        // toolchain. See http://b/142056316 for more details.
166        ":i18n-module-intra-core-api-stubs-source",
167        ":core_oj_java_files",
168        ":core_libart_java_files",
169        ":openjdk_lambda_stub_files",
170        ":openjdk_generated_annotation_stub_files",
171        ":app-compat-annotations-source",
172    ],
173
174    sdk_version: "none",
175    system_modules: "none",
176    patch_module: "java.base",
177    openjdk9: {
178        srcs: ["luni/src/module/java/module-info.java"],
179    },
180
181    java_resources: core_resources,
182    java_version: "1.9",
183
184    installable: false,
185
186    plugins: [
187        "compat-changeid-annotation-processor",
188        "unsupportedappusage-annotation-processor",
189    ],
190}
191
192platform_compat_config {
193    name: "libcore-platform-compat-config",
194    src: ":core-all",
195}
196
197// A system modules definition for use by core library targets only. It only
198// contains the core-all jar, which contains the classes that end up in core-oj,
199// core-libart as well as the lambda stubs needed to compile Java lambda code.
200// It does not contain other parts of core library like conscrypt, bouncycastle,
201// etc. This system_modules definition is used to bootstrap compilation for
202// other parts of the core library like core-oj, core-libart, conscrypt,
203// bouncycastle, etc.
204java_system_modules {
205    name: "core-all-system-modules",
206
207    // Visibility is deliberately restricted to a small set of build modules that
208    // the core library team control.
209    visibility: [
210        "//external/apache-harmony:__subpackages__",
211        "//external/apache-xml",
212        "//external/okhttp",
213        "//libcore:__subpackages__",
214    ],
215
216    libs: ["core-all"],
217}
218
219// Contains the parts of core library associated with OpenJDK.
220java_library {
221    name: "core-oj",
222    visibility: [
223        "//art/build/apex",
224        "//external/wycheproof",
225        "//libcore/benchmarks",
226    ],
227    apex_available: [
228        "com.android.art.release",
229        "com.android.art.debug",
230    ],
231    defaults: ["libcore_java_defaults"],
232    installable: true,
233    hostdex: true,
234
235    srcs: [":core_oj_java_files"],
236    java_resources: core_resources,
237
238    sdk_version: "none",
239    system_modules: "core-all-system-modules",
240    patch_module: "java.base",
241
242    jacoco: {
243        exclude_filter: [
244            "java.lang.Class",
245            "java.lang.Long",
246            "java.lang.Number",
247            "java.lang.Object",
248            "java.lang.String",
249            "java.lang.invoke.MethodHandle",
250            "java.lang.ref.Reference",
251            "java.lang.reflect.Proxy",
252            "java.util.AbstractMap",
253            "java.util.HashMap",
254            "java.util.HashMap$Node",
255            "java.util.Map",
256        ],
257    },
258
259    notice: "ojluni/NOTICE",
260
261}
262
263// Contains parts of core library not associated with OpenJDK. Contains not
264// just java.*, javax.* code but also android.system.* and various internal
265// libcore.* packages.
266java_library {
267    name: "core-libart",
268    visibility: [
269        "//art/build/apex",
270        "//external/robolectric-shadows",
271        "//external/wycheproof",
272        "//libcore/benchmarks",
273        "//frameworks/layoutlib",
274    ],
275    apex_available: [
276        "com.android.art.release",
277        "com.android.art.debug",
278    ],
279    defaults: ["libcore_java_defaults"],
280    installable: true,
281    hostdex: true,
282
283    srcs: [":core_libart_java_files"],
284    java_version: "1.9",
285
286    sdk_version: "none",
287    system_modules: "core-all-system-modules",
288    patch_module: "java.base",
289
290    jacoco: {
291        exclude_filter: [
292            "java.lang.DexCache",
293            "dalvik.system.ClassExt",
294        ],
295    },
296
297    target: {
298        hostdex: {
299            required: [
300                // Files used to simulate the /system, runtime APEX and tzdata
301                // APEX dir structure on host.
302                "icu_tzdata.dat_host_tzdata_apex",
303                "tzdata_host",
304                "tzdata_host_tzdata_apex",
305                "tzlookup.xml_host_tzdata_apex",
306                "tz_version_host",
307                "tz_version_host_tzdata_apex",
308            ],
309        },
310    },
311}
312
313// Provided solely to contribute information about which hidden parts of the
314// core-oj API are used by apps.
315//
316// The build system determines that this library provides hiddenapi information
317// for the core-oj bootjar because its name is of the form <x>-hiddenapi, where
318// <x> is the name of a boot jar. That triggers the generation of a flags.csv
319// file which encapsulates information extracted from the UnsupportedAppUsage
320// annotations in the dex. The information from that file is then encoded into
321// the core-oj file.
322//
323// Usually, e.g. for core-libart, the UnsupportedAppUsage annotations are
324// added to the source that is compiled directly into the bootjar and the build
325// system extracts the information about UnsupportedAppUsage directly from
326// there.
327//
328// This approach of having separate annotated source and a separate build
329// target was taken for ojluni to avoid having to maintain local patches in the
330// ojluni source for UnsupportedAppUsage annotations as that would make it more
331// difficult to pull down changes from upstream.
332//
333java_library {
334    name: "core-oj-hiddenapi",
335    // Do not allow this to be accessed from outside this directory.
336    visibility: ["//visibility:private"],
337    defaults: ["libcore_java_defaults"],
338    compile_dex: true,
339
340    srcs: [":openjdk_hiddenapi_javadoc_files"],
341
342    sdk_version: "none",
343    system_modules: "core-all-system-modules",
344    patch_module: "java.base",
345    plugins: ["unsupportedappusage-annotation-processor"],
346}
347
348//
349// Guaranteed unstripped versions of core-oj and core-libart.
350//
351// The build system may or may not strip the core-oj and core-libart jars,
352// but these will not be stripped. See b/24535627.
353//
354
355java_library {
356    name: "core-oj-testdex",
357    installable: true,
358    static_libs: ["core-oj"],
359    sdk_version: "none",
360    system_modules: "core-all-system-modules",
361    dxflags: ["--core-library"],
362    dex_preopt: {
363        enabled: false,
364    },
365    java_version: "1.9",
366    notice: "ojluni/NOTICE",
367}
368
369java_library {
370    name: "core-libart-testdex",
371    installable: true,
372    static_libs: ["core-libart"],
373    sdk_version: "none",
374    system_modules: "core-all-system-modules",
375    dxflags: ["--core-library"],
376    dex_preopt: {
377        enabled: false,
378    },
379    notice: "ojluni/NOTICE",
380}
381
382java_defaults {
383    name: "core_lambda_stubs_defaults",
384    defaults: ["libcore_java_defaults"],
385    hostdex: true,
386
387    sdk_version: "none",
388    system_modules: "core-all-system-modules",
389    patch_module: "java.base",
390
391    notice: "ojluni/NOTICE",
392
393    installable: false,
394    include_srcs: true,
395}
396
397// Creates a jar that exists to satisfy javac when compiling source code that
398// contains lambdas. This contains all classes / methods required by javac
399// when generating invoke-dynamic lambda implementation code, even those that
400// are also in the public SDK API from API level 26 onwards.
401java_library {
402    name: "core-lambda-stubs",
403    visibility: ["//visibility:public"],
404    defaults: ["core_lambda_stubs_defaults"],
405    srcs: [
406        ":openjdk_lambda_stub_files",
407        ":openjdk_lambda_duplicate_stub_files",
408    ],
409    // This jar is packaged as part of the SDK, use -target 8 so that it works
410    // with old JDKs.
411    java_version: "1.8",
412}
413
414// An alternative to core-lambda-stubs that omits openjdk_lambda_duplicate_stub_files
415// because those classes are also part of the core library public SDK API
416// (since API level 26).
417java_library {
418    name: "core-lambda-stubs-for-system-modules",
419    visibility: [
420        "//libcore/mmodules/core_platform_api",
421    ],
422    defaults: ["core_lambda_stubs_defaults"],
423    srcs: [
424        ":openjdk_lambda_stub_files",
425    ],
426    include_srcs: true,
427}
428
429// Creates a jar that exists to satisfy javac when compiling source code that
430// contains @Generated annotations, which are produced by some code generation
431// tools (notably dagger) but aren't part of the Android API.
432// See http://b/123891440.
433java_library {
434    name: "core-generated-annotation-stubs",
435    visibility: [
436        "//libcore/mmodules/core_platform_api",
437    ],
438    defaults: ["libcore_java_defaults"],
439    srcs: [
440        ":openjdk_generated_annotation_stub_files",
441    ],
442    hostdex: true,
443    sdk_version: "none",
444    system_modules: "core-all-system-modules",
445    patch_module: "java.base",
446    notice: "ojluni/NOTICE",
447    installable: false,
448    include_srcs: true,
449}
450
451// Builds libcore test rules
452java_library_static {
453    name: "core-test-rules",
454    visibility: [
455        "//art/build/sdk",
456        "//external/conscrypt",
457        "//external/conscrypt/apex/tests",
458        "//frameworks/base/location/tests/locationtests",
459        "//frameworks/base/core/tests/coretests",
460        "//frameworks/base/wifi/tests",
461        "//cts/tests/tests/util",
462    ],
463    hostdex: true,
464    srcs: [
465        "dalvik/test-rules/src/main/**/*.java",
466        "test-rules/src/main/**/*.java",
467    ],
468    static_libs: ["junit"],
469
470    sdk_version: "none",
471    system_modules: "core-all-system-modules",
472}
473
474// Builds platform_compat test rules
475java_library_static {
476    name: "core-compat-test-rules",
477    visibility: [
478        "//art/build/sdk",
479        "//frameworks/base/tests/PlatformCompatGating/test-rules",
480    ],
481    srcs: [
482        "luni/src/main/java/android/compat/**/*.java",
483        "test-rules/src/platform_compat/**/*.java",
484        "luni/src/main/java/libcore/api/CorePlatformApi.java",
485        "luni/src/main/java/libcore/api/IntraCoreApi.java",
486    ],
487    static_libs: [
488        "junit",
489        "guava",
490    ],
491    sdk_version: "none",
492    system_modules: "core-all-system-modules",
493    // This builds classes that are in the java.base Java module:
494    patch_module: "java.base",
495    hostdex: true,
496}
497
498// Builds the core-tests-support library used by various tests.
499java_library_static {
500    name: "core-tests-support",
501    visibility: [
502        "//art/build/sdk",
503        "//cts/apps/CtsVerifier",
504        "//cts/tests/tests/keystore",
505        "//cts/tests/tests/net",
506        "//cts/tests/tests/net/api23Test",
507        "//external/apache-harmony",
508        "//frameworks/base/core/tests/coretests",
509        "//libcore/benchmarks",
510        "//packages/apps/KeyChain/tests",
511        "//system/timezone/distro/core",
512    ],
513    hostdex: true,
514    srcs: ["support/src/test/java/**/*.java"],
515
516    sdk_version: "core_platform",
517    libs: ["junit"],
518    static_libs: [
519        "bouncycastle-unbundled",
520        "bouncycastle-bcpkix-unbundled",
521        "bouncycastle-ocsp-unbundled",
522    ],
523}
524
525// Builds the jsr166-tests library.
526java_test {
527    name: "jsr166-tests",
528    visibility: [
529        "//cts/tests/libcore/jsr166",
530    ],
531    srcs: ["jsr166-tests/src/test/java/**/*.java"],
532    sdk_version: "none",
533    system_modules: "core-all-system-modules",
534    libs: [
535        "junit",
536    ],
537}
538
539// A filegroup that provides access to a source file for a toolchain test that
540// checks Java 9 language features are handled properly by JarJar.
541filegroup {
542    name: "core-java-9-language-features-source",
543    srcs: ["luni/src/main/java/libcore/internal/Java9LanguageFeatures.java"],
544    visibility: ["//libcore/luni/src/test/java9language"],
545}
546
547genrule {
548    name: "core-tests-smali-dex",
549    srcs: ["luni/src/test/java/**/*.smali"],
550    cmd: "$(location smali) ass --api 28 -o $(out) $(in)",
551    out: ["core-tests-smali.dex"],
552    tools: ["smali"],
553}
554
555// Builds the core-tests library.
556java_test {
557    name: "core-tests",
558    visibility: [
559        "//cts/tests/libcore/luni",
560    ],
561    defaults: ["libcore_java_defaults"],
562    hostdex: true,
563    srcs: [
564        "dalvik/src/test/java/**/*.java",
565        "dalvik/test-rules/src/test/java/**/*.java",
566        "dom/src/test/java/**/*.java",
567        "harmony-tests/src/test/java/**/*.java",
568        "json/src/test/java/**/*.java",
569        "luni/src/test/java/**/*.java",
570        "test-rules/src/test/java/**/*.java",
571        "xml/src/test/java/**/*.java",
572    ],
573    exclude_srcs: [
574        "harmony-tests/src/test/java/org/apache/harmony/tests/javax/net/ssl/*.java",
575        "luni/src/test/java/libcore/java/util/zip/Zip64Test.java",
576        "luni/src/test/java/libcore/java/util/zip/Zip64FileTest.java",
577        "luni/src/test/java/libcore/javax/crypto/**/*.java",
578        "luni/src/test/java/libcore/javax/net/ssl/**/*.java",
579        "luni/src/test/java/org/apache/harmony/crypto/**/*.java",
580    ],
581
582    java_resource_dirs: [
583        "*/src/test/java",
584        "*/src/test/resources",
585    ],
586    exclude_java_resource_dirs: [
587        "ojluni/src/test/java",
588        "ojluni/src/test/resources",
589    ],
590
591    java_resources: [
592        ":annotations-test",
593        ":filesystemstest",
594        ":parameter-metadata-test",
595        ":core-tests-smali-dex",
596    ],
597
598    sdk_version: "none",
599    system_modules: "core-all-system-modules",
600    libs: [
601        "okhttp",
602        "bouncycastle",
603    ],
604
605    static_libs: [
606        "core-compat-test-rules",
607        "core-java-9-language-tests",
608        "core-test-rules",
609        "core-tests-support",
610        "junit-params",
611        "libcore-crypto-tests",
612        "mockftpserver",
613        "mockito-target",
614        "mockwebserver",
615        "nist-pkix-tests",
616        "slf4j-jdk14",
617        "sqlite-jdbc",
618        "tzdata-testing",
619        "truth-prebuilt-jar",
620    ],
621
622    errorprone: {
623        javacflags: [
624            "-Xep:TryFailThrowable:ERROR",
625            "-Xep:ComparisonOutOfRange:ERROR",
626        ],
627    },
628
629    test_config: "AndroidTest-core-tests.xml",
630}
631
632java_test {
633    name: "libcore-crypto-tests",
634
635    visibility: [
636        "//art/build/sdk",
637        "//external/conscrypt/apex/tests",
638    ],
639    srcs: [
640        "harmony-tests/src/test/java/org/apache/harmony/tests/javax/net/ssl/*.java",
641        "luni/src/test/java/libcore/javax/crypto/**/*.java",
642        "luni/src/test/java/libcore/javax/net/ssl/**/*.java",
643        "luni/src/test/java/org/apache/harmony/crypto/**/*.java",
644    ],
645    exclude_srcs: [
646        "luni/src/test/java/org/apache/harmony/crypto/tests/javax/crypto/SealedObjectTest.java",
647    ],
648
649    java_resource_dirs: [
650        "luni/src/test/java",
651        "luni/src/test/resources",
652        "support/src/test/java",
653    ],
654
655    sdk_version: "none",
656    system_modules: "core-all-system-modules",
657
658    static_libs: [
659        "core-test-rules",
660        "core-tests-support",
661        "junit-params",
662        "mockito-target",
663    ],
664}
665
666// Builds the core-ojtests library that contains test code from OpenJDK.
667java_test {
668    name: "core-ojtests",
669    defaults: ["libcore_java_defaults"],
670    hostdex: true,
671
672    srcs: [
673        "ojluni/src/test/java/**/*.java",
674    ],
675    java_resource_dirs: [
676        "ojluni/src/test/java",
677        "ojluni/src/test/resources",
678    ],
679
680    sdk_version: "none",
681    system_modules: "core-all-system-modules",
682    libs: [
683        "okhttp",
684        "bouncycastle",
685    ],
686
687    static_libs: ["testng"],
688
689    // ojluni/src/test/java/util/stream/{bootlib,boottest}
690    // contains tests that are in packages from java.base;
691    // By default, OpenJDK 9's javac will only compile such
692    // code if it's declared to also be in java.base at
693    // compile time.
694    //
695    // For now, we use patch_module to put all sources
696    // and dependencies from this make target into java.base;
697    // other source directories in this make target are in
698    // packages not from java.base; if this becomes a problem
699    // in future, this could be addressed eg. by splitting
700    // boot{lib,test} out into a separate make target,
701    // deleting those tests or moving them to a different
702    // package.
703    patch_module: "java.base",
704}
705
706// Builds the core-ojtests-public library. Excludes any private API tests.
707// Like core-ojtests but smaller.
708java_test {
709    name: "core-ojtests-public",
710    visibility: [
711        "//cts/tests/libcore/ojluni",
712    ],
713    defaults: ["libcore_java_defaults"],
714    srcs: [
715        "ojluni/src/test/java/**/*.java",
716    ],
717    // Filter out the following:
718    // 1.) DeserializeMethodTest and SerializedLambdaTest, because they depends on stub classes
719    //     and won't actually run, and
720    // 2.) util/stream/boot*. Those directories contain classes in the package java.util.stream;
721    //     excluding them means we don't need patch_module: "java.base"
722    exclude_srcs: [
723        "**/DeserializeMethodTest.java",
724        "**/SerializedLambdaTest.java",
725        "ojluni/src/test/java/util/stream/boot*/**/*",
726    ],
727    java_resource_dirs: [
728        "ojluni/src/test/java",
729        "ojluni/src/test/resources",
730        // Include source code as part of JAR
731        "ojluni/src/test/dist",
732    ],
733
734    sdk_version: "none",
735    system_modules: "core-all-system-modules",
736    libs: [
737        "bouncycastle",
738        "okhttp",
739        "testng",
740    ],
741}
742
743// Exports annotated stubs source files in ojluni/annotations/sdk to make them
744// available to metalava. Used for nullability annotations in OpenJDK source.
745droiddoc_exported_dir {
746    name: "ojluni-annotated-sdk-stubs",
747    path: "ojluni/annotations/sdk",
748}
749
750droiddoc_exported_dir {
751    name: "ojluni-annotated-nullability-stubs",
752    path: "ojluni/annotations/sdk/nullability",
753}
754
755// Exports annotated stubs source files in ojluni/annotations/mmodules to make
756// them available to metalava. Used for core platform API and intra-core API
757// annotations in OpenJDK source.
758droiddoc_exported_dir {
759    name: "ojluni-annotated-mmodule-stubs",
760    visibility: [
761        "//libcore/mmodules/core_platform_api",
762        "//libcore/mmodules/intracoreapi",
763    ],
764    path: "ojluni/annotations/mmodule",
765}
766
767// A file containing the list of tags that are "known" to us from the OpenJdk
768// source code and so should not cause an error or warning.
769filegroup {
770    name: "known-oj-tags",
771    visibility: [
772        "//frameworks/base",
773    ],
774    srcs: [
775        "known_oj_tags.txt",
776    ],
777}
778
779// A special set of stubs containing the minimal set of self consistent
780// classes for which a system module can be created. Every system module must
781// contain the java.lang classes so the set was constructed by starting with
782// the java.lang classes and then adding their transitive dependencies without
783// splitting packages. So, if one class from a package is used then all classes
784// in that package were added to the set.
785//
786// Needed for java-current-stubs-system-modules.
787droidstubs {
788    name: "java-current-stubs-source",
789    srcs: [
790        ":core_oj_api_files",
791        ":core_libart_api_files",
792    ],
793    java_version: "1.9",
794    installable: false,
795    sdk_version: "none",
796    system_modules: "none",
797
798    args: "--stub-packages java.*:javax.*:org.w3c.dom.*:org.xml.sax.*",
799}
800
801java_library {
802    name: "java.current.stubs",
803    srcs: [":java-current-stubs-source"],
804    errorprone: {
805        javacflags: [
806            "-Xep:MissingOverride:OFF",
807        ],
808    },
809    patch_module: "java.base",
810    sdk_version: "none",
811    system_modules: "none",
812}
813
814// A special set of system modules needed to build art.module.public.api.stubs
815// that contain nullability annotations when targeting java language level 1.9
816// and above.
817java_system_modules {
818    name: "java-current-stubs-system-modules",
819    libs: [
820        // Minimal set of classes required for a system module.
821        "java.current.stubs",
822
823        // The nullability annotations used by the generated stubs.
824        "stub-annotations",
825    ],
826}
827
828// http://b/129765390 Rewrite links to "platform" or "technotes" folders
829// which are siblings (and thus outside of) {@docRoot}.
830//
831// We have to escape \ as \\ and $ as $$ here because they get resolved by
832// different layers of the build tooling. The arguments are wrapped in '' so
833// that the shell doesn't add yet another level of escaping.
834rewrite_openjdk_doc_args = "--replace-documentation " +
835    // packages whose descendants to apply replacement to (all packages from
836    // libcore/ojluni/src/main/java that contribute to documentation).
837    "com.sun:java:javax:jdk.net:sun " +
838    // regex of the string to replace
839    "'(<a\\s+href\\s?=[\\*\\s]*\")(?:(?:\\{@docRoot\\}/\\.\\./)|(?:(?:\\.\\./)+))((?:platform|technotes).+)\">' " +
840    // replacement (with $1, $2 backreferences to the regex groups)
841    "'$$1https://docs.oracle.com/javase/8/docs/$$2\">' "
842
843// Generates stubs for the parts of the public SDK API provided by the ART module.
844//
845// Only for use by art.module.public.api.stubs target below and the building of the
846// public API.
847droidstubs {
848    name: "art-module-public-api-stubs-source",
849    visibility: [
850        "//frameworks/base",
851    ],
852    srcs: [
853        ":core_oj_api_files",
854        ":core_libart_api_files",
855    ],
856    java_version: "1.9",
857    installable: false,
858    sdk_version: "none",
859    system_modules: "java-current-stubs-system-modules",
860    libs: [
861        // Provide access to I18N constants that are used to initialize
862        // constants in the public API. i.e. to allow the value of the
863        // java.text.CollectionElementIterator.NULLORDER to be initialized from
864        // android.icu.text.CollationElementIterator.NULLORDER.
865        "i18n.module.intra.core.api.stubs",
866    ],
867
868    args: rewrite_openjdk_doc_args,
869
870    create_doc_stubs: true,
871
872    // Emit nullability annotations from the source to the stub files.
873    annotations_enabled: true,
874
875    merge_annotations_dirs: [
876        "ojluni-annotated-sdk-stubs",
877    ],
878}
879
880// A stubs target containing the parts of the public SDK API provided by the ART module.
881java_library {
882    name: "art.module.public.api.stubs",
883    srcs: [":art-module-public-api-stubs-source"],
884    errorprone: {
885        javacflags: [
886            "-Xep:MissingOverride:OFF",
887        ],
888    },
889    patch_module: "java.base",
890    sdk_version: "none",
891    system_modules: "java-current-stubs-system-modules",
892}
893
894// Used when compiling higher-level code against art.module.public.api.stubs.
895//
896// This is only intended for use within core libraries and must not be used
897// from outside.
898java_system_modules {
899    name: "art-module-public-api-stubs-system-modules",
900    visibility: [
901        "//art/build/sdk",
902        "//external/conscrypt",
903        "//external/icu/android_icu4j",
904        "//external/wycheproof",
905    ],
906    libs: [
907        "art.module.public.api.stubs",
908        // This one is not on device but it's needed when javac compiles code
909        // containing lambdas.
910        "core-lambda-stubs-for-system-modules",
911        // This one is not on device but it's needed when javac compiles code
912        // containing @Generated annotations produced by some code generation
913        // tools.
914        // See http://b/123891440.
915        "core-generated-annotation-stubs",
916
917        // Ensure that core libraries that depend on the public API can access
918        // the UnsupportedAppUsage, CorePlatformApi and IntraCoreApi
919        // annotations.
920        "art.module.api.annotations.for.system.modules",
921
922        // Make nullability annotations available when compiling public stubs.
923        // They are provided as a separate library because while the
924        // annotations are not themselves part of the public API provided by
925        // this module they are used in the stubs.
926        "stub-annotations",
927    ],
928}
929
930// A stubs target containing the parts of the public SDK API provided by the
931// core library.
932//
933// Don't use this directly, use "sdk_version: core_current".
934java_library {
935    name: "core.current.stubs",
936    visibility: ["//visibility:public"],
937    static_libs: [
938        "art.module.public.api.stubs",
939        "conscrypt.module.public.api.stubs",
940        "i18n.module.public.api.stubs",
941    ],
942    sdk_version: "none",
943    system_modules: "none",
944
945    dist: {
946        targets: [
947            "sdk",
948            "win_sdk",
949        ],
950    },
951}
952
953// Distributed with the SDK for turning into system modules to compile apps
954// against.
955java_library {
956    name: "core-current-stubs-for-system-modules",
957    visibility: ["//development/sdk"],
958    static_libs: [
959        "core.current.stubs",
960        // This one is not on device but it's needed when javac compiles code
961        // containing lambdas.
962        "core-lambda-stubs-for-system-modules",
963        // This one is not on device but it's needed when javac compiles code
964        // containing @Generated annotations produced by some code generation
965        // tools.
966        // See http://b/123891440.
967        "core-generated-annotation-stubs",
968    ],
969    sdk_version: "none",
970    system_modules: "none",
971    dist: {
972        dest: "core-for-system-modules.jar",
973        targets: [
974            "sdk",
975            "win_sdk",
976        ],
977    },
978}
979
980// Used when compiling higher-level code against core.current.stubs.
981java_system_modules {
982    name: "core-current-stubs-system-modules",
983    visibility: ["//visibility:public"],
984    libs: [
985        "core-current-stubs-for-system-modules",
986    ],
987}
988
989// Target for validating nullability annotations for correctness and
990// completeness. To check that there are no nullability errors:
991//   m art-module-public-api-stubs-nullability-validation
992// To check that there are only the expected nullability warnings:
993//   m art-module-public-api-stubs-nullability-validation-check-nullability-warnings
994// (If that check fails, it will provide instructions on how to proceed,
995// including the command to run to update the expected warnings file.)
996droidstubs {
997    name: "art-module-public-api-stubs-nullability-validation",
998    srcs: [":art_module_api_files"],
999    installable: false,
1000    sdk_version: "none",
1001    system_modules: "none",
1002    annotations_enabled: true,
1003    args: "--hide-annotation libcore.api.Hide " +
1004        "--validate-nullability-from-merged-stubs ",
1005    merge_inclusion_annotations_dirs: ["ojluni-annotated-mmodule-stubs"],
1006    merge_annotations_dirs: [
1007        // N.B. Stubs in this filegroup will be validated:
1008        "ojluni-annotated-nullability-stubs",
1009    ],
1010    // The list of classes which have nullability annotations included in the source.
1011    // (This is in addition to those which have annotations in the merged stubs.)
1012    validate_nullability_from_list: "nullability_annotated_classes.txt",
1013    // The expected set of warnings about missing annotations:
1014    check_nullability_warnings: "nullability_warnings.txt",
1015}
1016
1017// A host library containing time zone related classes. Used for
1018// host-side tools and tests that have to deal with Android
1019// time zone data.
1020java_library_host {
1021    name: "timezone-host",
1022    visibility: [
1023        "//art/build/sdk",
1024        "//system/timezone/distro/core",
1025    ],
1026    srcs: [":timezone_host_files"],
1027}
1028
1029// A special set of system modules for building the following library for use
1030// in the art-module-public-api-system-modules.
1031java_system_modules {
1032    name: "api-annotations-system-modules",
1033    libs: [
1034        "art.module.public.api.stubs",
1035    ],
1036}
1037
1038// A library that contains annotations that define API surfaces (core
1039// platform, intra core and the hidden API) along with some supporting
1040// constants. The annotations are source only and do not introduce any runtime
1041// dependencies. Specially built for use in system modules definitions to
1042// avoid introducing compile time cycles.
1043java_library {
1044    name: "art.module.api.annotations.for.system.modules",
1045    srcs: [
1046        ":api_surface_annotation_files",
1047    ],
1048
1049    installable: false,
1050    sdk_version: "none",
1051    system_modules: "api-annotations-system-modules",
1052    patch_module: "java.base",
1053}
1054
1055// Create a library containing the api surface annotations, built against
1056// core_current for use by the annotation processor in frameworks/base.
1057java_library {
1058    name: "art.module.api.annotations",
1059    visibility: [
1060        "//frameworks/base",
1061    ],
1062    host_supported: true,
1063    srcs: [
1064        ":api_surface_annotation_files",
1065    ],
1066    java_version: "1.9",
1067    sdk_version: "core_current",
1068}
1069