Files
android_packages_modules_co…/sdk/ModuleDefaults.bp
Anton Hansson ee390f26eb Enhance documentation in mainline stubs
Metalava has a feature to "enhance documentation" which is mostly based
on auto-generating documentation text based on source-retention
annotations. This is turned on automatically for doc stubs, but here
we are enabling it for module's jar stubs as well.

The point of this is to be able to replace the module source code with
module jar stub source code when generating doc stubs -- something
previously not possible because most source-retention annotations are
not present in the jar stubs.

In order for the enhancement to work properly, metalava needs to be
passed the annotation source code rather than the annotations library.
This is because of various javadoc tags controlling what documentation
is generated, e.g. @paramDoc, @returnDoc etc.

Bug: 186197911
Test: manually inspect module stub source code is enhanced
Change-Id: I3fda4cd64e49c1da33fe614c30aafd9fa0dba3b9
2021-09-20 15:11:55 +01:00

217 lines
6.8 KiB
Plaintext

// Copyright (C) 2019 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package {
default_visibility: [":__subpackages__"],
default_applicable_licenses: ["Android-Apache-2.0"],
}
mainline_stubs_args =
"--error UnhiddenSystemApi " +
"--hide BroadcastBehavior " +
"--hide CallbackInterface " +
"--hide DeprecationMismatch " +
"--hide HiddenSuperclass " +
"--hide HiddenTypedefConstant " +
"--hide HiddenTypeParameter " +
"--hide MissingPermission " +
"--hide RequiresPermission " +
"--hide SdkConstant " +
"--hide Todo " +
"--hide Typo " +
"--hide UnavailableSymbol " +
"--enhance-documentation "
// TODO: modularize this so not every module has the same list
framework_packages_to_document = [
"android",
"dalvik",
"java",
"javax",
"junit",
"org.apache.http",
"org.json",
"org.w3c.dom",
"org.xml.sax",
"org.xmlpull",
]
// TODO: remove the hiding when server classes are cleaned up.
mainline_framework_stubs_args =
mainline_stubs_args +
"--hide-package com.android.server "
priv_apps = " " +
"--show-annotation android.annotation.SystemApi\\(" +
"client=android.annotation.SystemApi.Client.PRIVILEGED_APPS" +
"\\) "
module_libs = " " +
" --show-annotation android.annotation.SystemApi\\(" +
"client=android.annotation.SystemApi.Client.MODULE_LIBRARIES" +
"\\)" +
" --show-for-stub-purposes-annotation android.annotation.SystemApi\\(" +
"client=android.annotation.SystemApi.Client.PRIVILEGED_APPS" +
"\\) "
mainline_service_stubs_args =
mainline_stubs_args +
"--show-annotation android.annotation.SystemApi\\(" +
"client=android.annotation.SystemApi.Client.SYSTEM_SERVER" +
"\\) " +
"--hide-annotation android.annotation.Hide " +
"--hide InternalClasses " // com.android.* classes are okay in this interface
// Defaults common to all mainline module java_sdk_library instances.
java_defaults {
name: "framework-module-common-defaults",
// Use the source of annotations that affect metalava doc generation, since
// the relevant generation instructions are themselves in javadoc, which is
// not present in class files.
api_srcs: [":framework-metalava-annotations"],
// Make the source retention annotations available on the classpath when compiling
// the implementation library. (This should be in impl_only_libs but some modules
// use these defaults for java_library, sigh.)
libs: ["framework-annotations-lib"],
// Framework modules are not generally shared libraries, i.e. they are not
// intended, and must not be allowed, to be used in a <uses-library> manifest
// entry.
shared_library: false,
// Prevent dependencies that do not specify an sdk_version from accessing the
// implementation library by default and force them to use stubs instead.
default_to_stubs: true,
// Enable api lint. This will eventually become the default for java_sdk_library
// but it cannot yet be turned on because some usages have not been cleaned up.
// TODO(b/156126315) - Remove when no longer needed.
api_lint: {
enabled: true,
},
// The API scope specific properties.
public: {
enabled: true,
sdk_version: "module_current",
},
// installable implies we'll create a non-apex (platform) variant, which
// we shouldn't ordinarily need (and it can create issues), so disable that.
installable: false,
// Configure framework module specific metalava options.
droiddoc_options: [mainline_stubs_args],
annotations_enabled: true,
// Allow access to the stubs from anywhere
visibility: ["//visibility:public"],
stubs_library_visibility: ["//visibility:public"],
// Hide impl library and stub sources
impl_library_visibility: [
":__pkg__",
"//frameworks/base", // For framework-all
],
stubs_source_visibility: ["//visibility:private"],
defaults_visibility: ["//visibility:private"],
// Collates API usages from each module for further analysis.
plugins: ["java_api_finder"],
dist_group: "android",
}
// Defaults for mainline module provided java_sdk_library instances.
java_defaults {
name: "framework-module-defaults",
defaults: ["framework-module-common-defaults"],
sdk_version: "module_current",
system: {
enabled: true,
sdk_version: "module_current",
},
module_lib: {
enabled: true,
sdk_version: "module_current",
},
defaults_visibility: [
":__subpackages__",
"//frameworks/base/apex:__subpackages__",
"//frameworks/base/libs/hwui",
// TODO: remove after moving connectivity to packages/modules
"//frameworks/base/packages/Connectivity:__subpackages__",
"//frameworks/base/wifi",
"//packages/modules:__subpackages__",
"//packages/providers/MediaProvider:__subpackages__",
],
}
// Defaults for mainline module system server provided java_sdk_library instances.
java_defaults {
name: "framework-system-server-module-defaults",
defaults: ["framework-module-common-defaults"],
sdk_version: "system_server_current",
system_server: {
enabled: true,
sdk_version: "system_server_current",
},
defaults_visibility: [
":__subpackages__",
"//art/libartservice:__subpackages__",
"//frameworks/base/apex:__subpackages__",
"//packages/modules:__subpackages__",
],
}
stubs_defaults {
name: "service-module-stubs-srcs-defaults",
args: mainline_service_stubs_args,
installable: false,
annotations_enabled: true,
merge_annotations_dirs: [
"metalava-manual",
],
filter_packages: ["com.android."],
check_api: {
current: {
api_file: "api/current.txt",
removed_api_file: "api/removed.txt",
},
api_lint: {
enabled: true,
},
},
dist: {
targets: ["sdk", "win_sdk"],
dir: "apistubs/android/system-server/api",
},
}
// Empty for now, but a convenient place to add rules for all
// module java_library system_server stub libs.
java_defaults {
name: "service-module-stubs-defaults",
dist: {
targets: ["sdk", "win_sdk"],
dir: "apistubs/android/system-server",
},
}