This directory contains annotated stub files which can be merged into
the main source files by metalava when it is producing API stubs. This
mechanism is used instead of adding the annotations to the main source
files, to avoid carrying patches against the upstream sources.

Directory structure
===================

libcore/ojluni/annotations/sdk:
 - Contains annotations to be included in the public SDK, for example
   annotations specifying additional details about method contracts.

libcore/ojluni/annotations/sdk/nullability:
 - Contains annotations to be included in the public SDK specifically
   relating to nullability. Adding an annotated stub file to this subdirectory
   will cause the annotations to be validated for correctness and completeness.
 - To add some new files under this directory:
   1. make openjdk-sdk-stubs-no-javadoc
   2. for FILE in your/package/and/Class.java another/package/AnotherClass.java; do unzip out/soong/.intermediates/libcore/openjdk-sdk-stubs-no-javadoc/android_common/metalava/openjdk-sdk-stubs-no-javadoc-stubs.srcjar ${FILE} -d libcore/ojluni/annotations/sdk/nullability/ && mv libcore/ojluni/annotations/sdk/nullability/$FILE libcore/ojluni/annotations/sdk/nullability/${FILE/%.java/.annotated.java}; done
   3. Add nullability annotations to the new files.
 - To see the effect of the files under this directory:
   1. m art.module.public.api.stubs.source-update-current-api
   2. Look for the file under libcore/api/

libcore/ojluni/annotations/flagged_api:
 - Contains @FlaggedApi annotations to be included in the core_current stubs.
 - To add some new files under this directory:
   1. libcore/tools/ojluni-annotations/generate_flagged_api_files.sh your.package.Bar another.package.Foo
   2. Add @FlaggedApi annotations to the new files.
 - To see the effect of the files under this directory:
   1. m art.module.public.api.stubs.source-update-current-api
   2. Look for the file under libcore/api/

libcore/ojluni/annotations/mmodule:
 - Contains annotations which determine what is included in the core-platform
   and intra-core APIs. See the documentation in libcore/openjdk_java_files.bp.
 - To add some new files under this directory:
   1. In libcore/openjdk_java_files.bp, move the files from the
      openjdk_internal_files filegroup to openjdk_mmodule_extra_files. *DO NOT*
      check in this change, it will have undesirable consequences until you
      reach step 4, below.
   2. make openjdk-mmodule-stubs-no-javadoc
   3. FILES="your/package/and/Class.java another/package/AnotherClass.java"; for FILE in $FILES; do mkdir -p libcore/ojluni/annotations/mmodule/$(dirname ${FILE}) && unzip out/soong/.intermediates/libcore/openjdk-mmodule-stubs-no-javadoc/android_common/metalava/openjdk-mmodule-stubs-no-javadoc-stubs.srcjar ${FILE} && mv ${FILE} libcore/ojluni/annotations/mmodule/${FILE/%.java/.annotated.java}; done
   4. Add @libcore.api.Hide to each class, methods and fields in the new files. This will prevent it from being added to the public API. A JavaDoc @hide tag will not work as metalava will ignore javadoc from the stub files.
   5. Add @android.annotation.SystemApi(client = MODULE_LIBRARIES) and @libcore.api.IntraCoreApi as desired
      to the classes and members.
 - To see the effect of the files under this directory:
   1. make make core-platform-api-stubs core-intra-stubs
   2. Look for the files under out/soong/.intermediates/libcore/mmodules/core_platform_api/core-platform-api-stubs/android_common/stubsDir/ and out/soong/.intermediates/libcore/mmodules/intracoreapi/core-intra-stubs/android_common/stubsDir
