Merge "Pass config files to metalava" into main
This commit is contained in:
@@ -197,6 +197,10 @@ type DroidstubsProperties struct {
|
|||||||
// a list of aconfig_declarations module names that the stubs generated in this module
|
// a list of aconfig_declarations module names that the stubs generated in this module
|
||||||
// depend on.
|
// depend on.
|
||||||
Aconfig_declarations []string
|
Aconfig_declarations []string
|
||||||
|
|
||||||
|
// List of hard coded filegroups containing Metalava config files that are passed to every
|
||||||
|
// Metalava invocation that this module performs. See addMetalavaConfigFilesToCmd.
|
||||||
|
ConfigFiles []string `android:"path" blueprint:"mutated"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Used by xsd_config
|
// Used by xsd_config
|
||||||
@@ -259,6 +263,7 @@ func DroidstubsFactory() android.Module {
|
|||||||
|
|
||||||
module.AddProperties(&module.properties,
|
module.AddProperties(&module.properties,
|
||||||
&module.Javadoc.properties)
|
&module.Javadoc.properties)
|
||||||
|
module.properties.ConfigFiles = getMetalavaConfigFilegroupReference()
|
||||||
module.initModuleAndImport(module)
|
module.initModuleAndImport(module)
|
||||||
|
|
||||||
InitDroiddocModule(module, android.HostAndDeviceSupported)
|
InitDroiddocModule(module, android.HostAndDeviceSupported)
|
||||||
@@ -279,6 +284,7 @@ func DroidstubsHostFactory() android.Module {
|
|||||||
module.AddProperties(&module.properties,
|
module.AddProperties(&module.properties,
|
||||||
&module.Javadoc.properties)
|
&module.Javadoc.properties)
|
||||||
|
|
||||||
|
module.properties.ConfigFiles = getMetalavaConfigFilegroupReference()
|
||||||
InitDroiddocModule(module, android.HostSupported)
|
InitDroiddocModule(module, android.HostSupported)
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
@@ -694,7 +700,7 @@ func metalavaUseRbe(ctx android.ModuleContext) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, srcs android.Paths,
|
func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, srcs android.Paths,
|
||||||
srcJarList android.Path, homeDir android.WritablePath, params stubsCommandConfigParams) *android.RuleBuilderCommand {
|
srcJarList android.Path, homeDir android.WritablePath, params stubsCommandConfigParams, configFiles android.Paths) *android.RuleBuilderCommand {
|
||||||
rule.Command().Text("rm -rf").Flag(homeDir.String())
|
rule.Command().Text("rm -rf").Flag(homeDir.String())
|
||||||
rule.Command().Text("mkdir -p").Flag(homeDir.String())
|
rule.Command().Text("mkdir -p").Flag(homeDir.String())
|
||||||
|
|
||||||
@@ -738,9 +744,26 @@ func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, srcs andr
|
|||||||
|
|
||||||
cmd.Flag(config.MetalavaFlags)
|
cmd.Flag(config.MetalavaFlags)
|
||||||
|
|
||||||
|
addMetalavaConfigFilesToCmd(cmd, configFiles)
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MetalavaConfigFilegroup is the name of the filegroup in build/soong/java/metalava that lists
|
||||||
|
// the configuration files to pass to Metalava.
|
||||||
|
const MetalavaConfigFilegroup = "metalava-config-files"
|
||||||
|
|
||||||
|
// Get a reference to the MetalavaConfigFilegroup suitable for use in a property.
|
||||||
|
func getMetalavaConfigFilegroupReference() []string {
|
||||||
|
return []string{":" + MetalavaConfigFilegroup}
|
||||||
|
}
|
||||||
|
|
||||||
|
// addMetalavaConfigFilesToCmd adds --config-file options to use the config files list in the
|
||||||
|
// MetalavaConfigFilegroup filegroup.
|
||||||
|
func addMetalavaConfigFilesToCmd(cmd *android.RuleBuilderCommand, configFiles android.Paths) {
|
||||||
|
cmd.FlagForEachInput("--config-file ", configFiles)
|
||||||
|
}
|
||||||
|
|
||||||
// Pass flagged apis related flags to metalava. When aconfig_declarations property is not
|
// Pass flagged apis related flags to metalava. When aconfig_declarations property is not
|
||||||
// defined for a module, simply revert all flagged apis annotations. If aconfig_declarations
|
// defined for a module, simply revert all flagged apis annotations. If aconfig_declarations
|
||||||
// property is defined, apply transformations and only revert the flagged apis that are not
|
// property is defined, apply transformations and only revert the flagged apis that are not
|
||||||
@@ -812,7 +835,10 @@ func (d *Droidstubs) commonMetalavaStubCmd(ctx android.ModuleContext, rule *andr
|
|||||||
srcJarList := zipSyncCmd(ctx, rule, params.srcJarDir, d.Javadoc.srcJars)
|
srcJarList := zipSyncCmd(ctx, rule, params.srcJarDir, d.Javadoc.srcJars)
|
||||||
|
|
||||||
homeDir := android.PathForModuleOut(ctx, params.stubConfig.stubsType.String(), "home")
|
homeDir := android.PathForModuleOut(ctx, params.stubConfig.stubsType.String(), "home")
|
||||||
cmd := metalavaCmd(ctx, rule, d.Javadoc.srcFiles, srcJarList, homeDir, params.stubConfig)
|
|
||||||
|
configFiles := android.PathsForModuleSrc(ctx, d.properties.ConfigFiles)
|
||||||
|
|
||||||
|
cmd := metalavaCmd(ctx, rule, d.Javadoc.srcFiles, srcJarList, homeDir, params.stubConfig, configFiles)
|
||||||
cmd.Implicits(d.Javadoc.implicits)
|
cmd.Implicits(d.Javadoc.implicits)
|
||||||
|
|
||||||
d.stubsFlags(ctx, cmd, params.stubsDir, params.stubConfig.stubsType, params.stubConfig.checkApi)
|
d.stubsFlags(ctx, cmd, params.stubsDir, params.stubConfig.stubsType, params.stubConfig.checkApi)
|
||||||
|
17
java/java.go
17
java/java.go
@@ -269,7 +269,7 @@ type JavaInfo struct {
|
|||||||
ImplementationAndResourcesJars android.Paths
|
ImplementationAndResourcesJars android.Paths
|
||||||
|
|
||||||
// ImplementationJars is a list of jars that contain the implementations of classes in the
|
// ImplementationJars is a list of jars that contain the implementations of classes in the
|
||||||
//module.
|
// module.
|
||||||
ImplementationJars android.Paths
|
ImplementationJars android.Paths
|
||||||
|
|
||||||
// ResourceJars is a list of jars that contain the resources included in the module.
|
// ResourceJars is a list of jars that contain the resources included in the module.
|
||||||
@@ -2039,12 +2039,17 @@ type JavaApiLibraryProperties struct {
|
|||||||
// List of aconfig_declarations module names that the stubs generated in this module
|
// List of aconfig_declarations module names that the stubs generated in this module
|
||||||
// depend on.
|
// depend on.
|
||||||
Aconfig_declarations []string
|
Aconfig_declarations []string
|
||||||
|
|
||||||
|
// List of hard coded filegroups containing Metalava config files that are passed to every
|
||||||
|
// Metalava invocation that this module performs. See addMetalavaConfigFilesToCmd.
|
||||||
|
ConfigFiles []string `android:"path" blueprint:"mutated"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func ApiLibraryFactory() android.Module {
|
func ApiLibraryFactory() android.Module {
|
||||||
module := &ApiLibrary{}
|
module := &ApiLibrary{}
|
||||||
android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon)
|
|
||||||
module.AddProperties(&module.properties)
|
module.AddProperties(&module.properties)
|
||||||
|
module.properties.ConfigFiles = getMetalavaConfigFilegroupReference()
|
||||||
|
android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon)
|
||||||
module.initModuleAndImport(module)
|
module.initModuleAndImport(module)
|
||||||
android.InitDefaultableModule(module)
|
android.InitDefaultableModule(module)
|
||||||
return module
|
return module
|
||||||
@@ -2060,7 +2065,7 @@ func (al *ApiLibrary) StubsJar() android.Path {
|
|||||||
|
|
||||||
func metalavaStubCmd(ctx android.ModuleContext, rule *android.RuleBuilder,
|
func metalavaStubCmd(ctx android.ModuleContext, rule *android.RuleBuilder,
|
||||||
srcs android.Paths, homeDir android.WritablePath,
|
srcs android.Paths, homeDir android.WritablePath,
|
||||||
classpath android.Paths) *android.RuleBuilderCommand {
|
classpath android.Paths, configFiles android.Paths) *android.RuleBuilderCommand {
|
||||||
rule.Command().Text("rm -rf").Flag(homeDir.String())
|
rule.Command().Text("rm -rf").Flag(homeDir.String())
|
||||||
rule.Command().Text("mkdir -p").Flag(homeDir.String())
|
rule.Command().Text("mkdir -p").Flag(homeDir.String())
|
||||||
|
|
||||||
@@ -2099,6 +2104,8 @@ func metalavaStubCmd(ctx android.ModuleContext, rule *android.RuleBuilder,
|
|||||||
FlagWithArg("--hide ", "InvalidNullabilityOverride").
|
FlagWithArg("--hide ", "InvalidNullabilityOverride").
|
||||||
FlagWithArg("--hide ", "ChangedDefault")
|
FlagWithArg("--hide ", "ChangedDefault")
|
||||||
|
|
||||||
|
addMetalavaConfigFilesToCmd(cmd, configFiles)
|
||||||
|
|
||||||
if len(classpath) == 0 {
|
if len(classpath) == 0 {
|
||||||
// The main purpose of the `--api-class-resolution api` option is to force metalava to ignore
|
// The main purpose of the `--api-class-resolution api` option is to force metalava to ignore
|
||||||
// classes on the classpath when an API file contains missing classes. However, as this command
|
// classes on the classpath when an API file contains missing classes. However, as this command
|
||||||
@@ -2310,7 +2317,9 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||||||
ctx.ModuleErrorf("Error: %s has an empty api file.", ctx.ModuleName())
|
ctx.ModuleErrorf("Error: %s has an empty api file.", ctx.ModuleName())
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd := metalavaStubCmd(ctx, rule, srcFiles, homeDir, systemModulesPaths)
|
configFiles := android.PathsForModuleSrc(ctx, al.properties.ConfigFiles)
|
||||||
|
|
||||||
|
cmd := metalavaStubCmd(ctx, rule, srcFiles, homeDir, systemModulesPaths, configFiles)
|
||||||
|
|
||||||
al.stubsFlags(ctx, cmd, stubsDir)
|
al.stubsFlags(ctx, cmd, stubsDir)
|
||||||
|
|
||||||
|
18
java/metalava/Android.bp
Normal file
18
java/metalava/Android.bp
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
// Copyright (C) 2024 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.
|
||||||
|
|
||||||
|
filegroup {
|
||||||
|
name: "metalava-config-files",
|
||||||
|
srcs: ["*-config.xml"],
|
||||||
|
}
|
3
java/metalava/OWNERS
Normal file
3
java/metalava/OWNERS
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Bug component: 463936
|
||||||
|
|
||||||
|
file:platform/tools/metalava:/OWNERS
|
19
java/metalava/main-config.xml
Normal file
19
java/metalava/main-config.xml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<!--
|
||||||
|
~ Copyright (C) 2024 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<config xmlns="http://www.google.com/tools/metalava/config"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.google.com/tools/metalava/config ../../../../tools/metalava/metalava/src/main/resources/schemas/config.xsd"/>
|
19
java/metalava/source-model-selection-config.xml
Normal file
19
java/metalava/source-model-selection-config.xml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<!--
|
||||||
|
~ Copyright (C) 2024 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<config xmlns="http://www.google.com/tools/metalava/config"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.google.com/tools/metalava/config ../../../../tools/metalava/metalava/src/main/resources/schemas/config.xsd"/>
|
@@ -52,6 +52,8 @@ var PrepareForTestWithJavaBuildComponents = android.GroupFixturePreparers(
|
|||||||
android.MockFS{
|
android.MockFS{
|
||||||
// Needed for linter used by java_library.
|
// Needed for linter used by java_library.
|
||||||
"build/soong/java/lint_defaults.txt": nil,
|
"build/soong/java/lint_defaults.txt": nil,
|
||||||
|
// Needed for java components that invoke Metalava.
|
||||||
|
"build/soong/java/metalava/Android.bp": []byte(`filegroup {name: "metalava-config-files"}`),
|
||||||
// Needed for apps that do not provide their own.
|
// Needed for apps that do not provide their own.
|
||||||
"build/make/target/product/security": nil,
|
"build/make/target/product/security": nil,
|
||||||
// Required to generate Java used-by API coverage
|
// Required to generate Java used-by API coverage
|
||||||
|
Reference in New Issue
Block a user