Merge "Improve error reporting when depending on prebuilt implementation jar"
This commit is contained in:
@@ -232,12 +232,6 @@ type SnapshotBuilder interface {
|
|||||||
// relative path) and add the dest to the zip.
|
// relative path) and add the dest to the zip.
|
||||||
CopyToSnapshot(src Path, dest string)
|
CopyToSnapshot(src Path, dest string)
|
||||||
|
|
||||||
// EmptyFile returns the path to an empty file.
|
|
||||||
//
|
|
||||||
// This can be used by sdk member types that need to create an empty file in the snapshot, simply
|
|
||||||
// pass the value returned from this to the CopyToSnapshot() method.
|
|
||||||
EmptyFile() Path
|
|
||||||
|
|
||||||
// UnzipToSnapshot generates a rule that will unzip the supplied zip into the snapshot relative
|
// UnzipToSnapshot generates a rule that will unzip the supplied zip into the snapshot relative
|
||||||
// directory destDir.
|
// directory destDir.
|
||||||
UnzipToSnapshot(zipPath Path, destDir string)
|
UnzipToSnapshot(zipPath Path, destDir string)
|
||||||
@@ -264,6 +258,14 @@ type SnapshotBuilder interface {
|
|||||||
// See sdk/update.go for more information.
|
// See sdk/update.go for more information.
|
||||||
AddPrebuiltModule(member SdkMember, moduleType string) BpModule
|
AddPrebuiltModule(member SdkMember, moduleType string) BpModule
|
||||||
|
|
||||||
|
// AddInternalModule creates a new module in the generated Android.bp file that can only be
|
||||||
|
// referenced by one of the other modules in the snapshot.
|
||||||
|
//
|
||||||
|
// The created module's name is constructed by concatenating the name of this member and the
|
||||||
|
// nameSuffix, separated by "-". It also has the visibility property set to "//visibility:private"
|
||||||
|
// to prevent it from being inadvertently accessed from outside the snapshot.
|
||||||
|
AddInternalModule(properties SdkMemberProperties, moduleType string, nameSuffix string) BpModule
|
||||||
|
|
||||||
// SdkMemberReferencePropertyTag returns a property tag to use when adding a property to a
|
// SdkMemberReferencePropertyTag returns a property tag to use when adding a property to a
|
||||||
// BpModule that contains references to other sdk members.
|
// BpModule that contains references to other sdk members.
|
||||||
//
|
//
|
||||||
@@ -922,6 +924,12 @@ func RegisterSdkMemberType(memberType SdkMemberType) {
|
|||||||
//
|
//
|
||||||
// Contains common properties that apply across many different member types.
|
// Contains common properties that apply across many different member types.
|
||||||
type SdkMemberPropertiesBase struct {
|
type SdkMemberPropertiesBase struct {
|
||||||
|
// The name of the member.
|
||||||
|
//
|
||||||
|
// Ignore this property during optimization. This is needed because this property is the same for
|
||||||
|
// all variants of a member and so would be optimized away if it was not ignored.
|
||||||
|
MemberName string `sdk:"ignore"`
|
||||||
|
|
||||||
// The number of unique os types supported by the member variants.
|
// The number of unique os types supported by the member variants.
|
||||||
//
|
//
|
||||||
// If a member has a variant with more than one os type then it will need to differentiate
|
// If a member has a variant with more than one os type then it will need to differentiate
|
||||||
@@ -945,6 +953,10 @@ type SdkMemberPropertiesBase struct {
|
|||||||
Compile_multilib string `android:"arch_variant"`
|
Compile_multilib string `android:"arch_variant"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *SdkMemberPropertiesBase) Name() string {
|
||||||
|
return b.MemberName
|
||||||
|
}
|
||||||
|
|
||||||
// OsPrefix returns the os prefix to use for any file paths in the sdk.
|
// OsPrefix returns the os prefix to use for any file paths in the sdk.
|
||||||
//
|
//
|
||||||
// Is an empty string if the member only provides variants for a single os type, otherwise
|
// Is an empty string if the member only provides variants for a single os type, otherwise
|
||||||
@@ -970,6 +982,8 @@ type SdkMemberProperties interface {
|
|||||||
// Base returns the base structure.
|
// Base returns the base structure.
|
||||||
Base() *SdkMemberPropertiesBase
|
Base() *SdkMemberPropertiesBase
|
||||||
|
|
||||||
|
Name() string
|
||||||
|
|
||||||
// PopulateFromVariant populates this structure with information from a module variant.
|
// PopulateFromVariant populates this structure with information from a module variant.
|
||||||
//
|
//
|
||||||
// It will typically be called once for each variant of a member module that the SDK depends upon.
|
// It will typically be called once for each variant of a member module that the SDK depends upon.
|
||||||
|
61
java/invalid_implementation_jar.sh
Executable file
61
java/invalid_implementation_jar.sh
Executable file
@@ -0,0 +1,61 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copyright 2022 Google Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
# Script to detect and report an attempt to access an invalid implementation
|
||||||
|
# jar.
|
||||||
|
|
||||||
|
MOD=$1
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
|
||||||
|
$MOD is a java_library that generates a jar file which must not be accessed
|
||||||
|
from outside the mainline module that provides it. If you are seeing this
|
||||||
|
message it means that you are incorrectly attempting to use the jar file
|
||||||
|
from a java_import prebuilt of $MOD.
|
||||||
|
|
||||||
|
This is most likely due to an incorrect dependency on $MOD in an Android.mk
|
||||||
|
or Android.bp file. Please remove that dependency and replace with
|
||||||
|
something more appropriate, e.g. a dependency on an API provided by the
|
||||||
|
module.
|
||||||
|
|
||||||
|
If you do not know where the extraneous dependency was added then you can
|
||||||
|
run the following command to find a list of all the paths from the target
|
||||||
|
which you are trying to build to the target which produced this error.
|
||||||
|
|
||||||
|
prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-\${TARGET_PRODUCT}.ninja -t path <target> <invalid-jar>
|
||||||
|
|
||||||
|
Where <target> is the build target you specified on the command line which
|
||||||
|
produces this error and <invalid-jar> is the rule that failed with this
|
||||||
|
message. If you are specifying multiple build targets then you will need to
|
||||||
|
run the above command for every target until you find the cause.
|
||||||
|
|
||||||
|
The command will output one (of the possibly many) dependency paths from
|
||||||
|
<target> to <invalid-jar>, one file/phony target per line. e.g. it may
|
||||||
|
output something like this:
|
||||||
|
|
||||||
|
....
|
||||||
|
out/soong/.intermediates/acme/broken/android_common/combined/broken.jar
|
||||||
|
out/soong/.intermediates/prebuilts/module_sdk/art/current/sdk/prebuilt_core-libart/android_common/combined/core-libart.jar
|
||||||
|
out/soong/.intermediates/prebuilts/module_sdk/art/current/sdk/art-module-sdk_core-libart-error/gen/this-file-will-never-be-created.jar
|
||||||
|
|
||||||
|
The last line is the failing target, the second to last line is a dependency
|
||||||
|
from the core-libart java_import onto the failing target, the third to last
|
||||||
|
line is the source of the dependency so you should look in acme/Android.bp
|
||||||
|
file for the "broken" module.
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
exit 1
|
80
java/java.go
80
java/java.go
@@ -86,11 +86,11 @@ func RegisterJavaSdkMemberTypes() {
|
|||||||
var (
|
var (
|
||||||
// Supports adding java header libraries to module_exports and sdk.
|
// Supports adding java header libraries to module_exports and sdk.
|
||||||
javaHeaderLibsSdkMemberType = &librarySdkMemberType{
|
javaHeaderLibsSdkMemberType = &librarySdkMemberType{
|
||||||
android.SdkMemberTypeBase{
|
SdkMemberTypeBase: android.SdkMemberTypeBase{
|
||||||
PropertyName: "java_header_libs",
|
PropertyName: "java_header_libs",
|
||||||
SupportsSdk: true,
|
SupportsSdk: true,
|
||||||
},
|
},
|
||||||
func(_ android.SdkMemberContext, j *Library) android.Path {
|
jarToExportGetter: func(_ android.SdkMemberContext, j *Library) android.Path {
|
||||||
headerJars := j.HeaderJars()
|
headerJars := j.HeaderJars()
|
||||||
if len(headerJars) != 1 {
|
if len(headerJars) != 1 {
|
||||||
panic(fmt.Errorf("there must be only one header jar from %q", j.Name()))
|
panic(fmt.Errorf("there must be only one header jar from %q", j.Name()))
|
||||||
@@ -98,8 +98,8 @@ var (
|
|||||||
|
|
||||||
return headerJars[0]
|
return headerJars[0]
|
||||||
},
|
},
|
||||||
sdkSnapshotFilePathForJar,
|
snapshotPathGetter: sdkSnapshotFilePathForJar,
|
||||||
copyEverythingToSnapshot,
|
onlyCopyJarToSnapshot: copyEverythingToSnapshot,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Export implementation classes jar as part of the sdk.
|
// Export implementation classes jar as part of the sdk.
|
||||||
@@ -113,12 +113,12 @@ var (
|
|||||||
|
|
||||||
// Supports adding java implementation libraries to module_exports but not sdk.
|
// Supports adding java implementation libraries to module_exports but not sdk.
|
||||||
javaLibsSdkMemberType = &librarySdkMemberType{
|
javaLibsSdkMemberType = &librarySdkMemberType{
|
||||||
android.SdkMemberTypeBase{
|
SdkMemberTypeBase: android.SdkMemberTypeBase{
|
||||||
PropertyName: "java_libs",
|
PropertyName: "java_libs",
|
||||||
},
|
},
|
||||||
exportImplementationClassesJar,
|
jarToExportGetter: exportImplementationClassesJar,
|
||||||
sdkSnapshotFilePathForJar,
|
snapshotPathGetter: sdkSnapshotFilePathForJar,
|
||||||
copyEverythingToSnapshot,
|
onlyCopyJarToSnapshot: copyEverythingToSnapshot,
|
||||||
}
|
}
|
||||||
|
|
||||||
snapshotRequiresImplementationJar = func(ctx android.SdkMemberContext) bool {
|
snapshotRequiresImplementationJar = func(ctx android.SdkMemberContext) bool {
|
||||||
@@ -143,11 +143,11 @@ var (
|
|||||||
// necessary. The java_boot_libs property to allow those modules to be exported as part of the
|
// necessary. The java_boot_libs property to allow those modules to be exported as part of the
|
||||||
// sdk/module_exports without exposing any unnecessary information.
|
// sdk/module_exports without exposing any unnecessary information.
|
||||||
javaBootLibsSdkMemberType = &librarySdkMemberType{
|
javaBootLibsSdkMemberType = &librarySdkMemberType{
|
||||||
android.SdkMemberTypeBase{
|
SdkMemberTypeBase: android.SdkMemberTypeBase{
|
||||||
PropertyName: "java_boot_libs",
|
PropertyName: "java_boot_libs",
|
||||||
SupportsSdk: true,
|
SupportsSdk: true,
|
||||||
},
|
},
|
||||||
func(ctx android.SdkMemberContext, j *Library) android.Path {
|
jarToExportGetter: func(ctx android.SdkMemberContext, j *Library) android.Path {
|
||||||
if snapshotRequiresImplementationJar(ctx) {
|
if snapshotRequiresImplementationJar(ctx) {
|
||||||
return exportImplementationClassesJar(ctx, j)
|
return exportImplementationClassesJar(ctx, j)
|
||||||
}
|
}
|
||||||
@@ -156,9 +156,9 @@ var (
|
|||||||
// jar for use by dexpreopting and boot jars package check. They do not need to provide an
|
// jar for use by dexpreopting and boot jars package check. They do not need to provide an
|
||||||
// actual implementation jar but the java_import will need a file that exists so just copy an
|
// actual implementation jar but the java_import will need a file that exists so just copy an
|
||||||
// empty file. Any attempt to use that file as a jar will cause a build error.
|
// empty file. Any attempt to use that file as a jar will cause a build error.
|
||||||
return ctx.SnapshotBuilder().EmptyFile()
|
return nil
|
||||||
},
|
},
|
||||||
func(ctx android.SdkMemberContext, osPrefix, name string) string {
|
snapshotPathGetter: func(ctx android.SdkMemberContext, osPrefix, name string) string {
|
||||||
if snapshotRequiresImplementationJar(ctx) {
|
if snapshotRequiresImplementationJar(ctx) {
|
||||||
return sdkSnapshotFilePathForJar(ctx, osPrefix, name)
|
return sdkSnapshotFilePathForJar(ctx, osPrefix, name)
|
||||||
}
|
}
|
||||||
@@ -168,7 +168,7 @@ var (
|
|||||||
// TODO(b/175714559): Provide a proper error message in Soong not ninja.
|
// TODO(b/175714559): Provide a proper error message in Soong not ninja.
|
||||||
return filepath.Join(osPrefix, "java_boot_libs", "snapshot", "jars", "are", "invalid", name+jarFileSuffix)
|
return filepath.Join(osPrefix, "java_boot_libs", "snapshot", "jars", "are", "invalid", name+jarFileSuffix)
|
||||||
},
|
},
|
||||||
onlyCopyJarToSnapshot,
|
onlyCopyJarToSnapshot: onlyCopyJarToSnapshot,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Supports adding java systemserver libraries to module_exports and sdk.
|
// Supports adding java systemserver libraries to module_exports and sdk.
|
||||||
@@ -182,27 +182,27 @@ var (
|
|||||||
// necessary. The java_systemserver_libs property to allow those modules to be exported as part of
|
// necessary. The java_systemserver_libs property to allow those modules to be exported as part of
|
||||||
// the sdk/module_exports without exposing any unnecessary information.
|
// the sdk/module_exports without exposing any unnecessary information.
|
||||||
javaSystemserverLibsSdkMemberType = &librarySdkMemberType{
|
javaSystemserverLibsSdkMemberType = &librarySdkMemberType{
|
||||||
android.SdkMemberTypeBase{
|
SdkMemberTypeBase: android.SdkMemberTypeBase{
|
||||||
PropertyName: "java_systemserver_libs",
|
PropertyName: "java_systemserver_libs",
|
||||||
SupportsSdk: true,
|
SupportsSdk: true,
|
||||||
|
|
||||||
// This was only added in Tiramisu.
|
// This was only added in Tiramisu.
|
||||||
SupportedBuildReleaseSpecification: "Tiramisu+",
|
SupportedBuildReleaseSpecification: "Tiramisu+",
|
||||||
},
|
},
|
||||||
func(ctx android.SdkMemberContext, j *Library) android.Path {
|
jarToExportGetter: func(ctx android.SdkMemberContext, j *Library) android.Path {
|
||||||
// Java systemserver libs are only provided in the SDK to provide access to their dex
|
// Java systemserver libs are only provided in the SDK to provide access to their dex
|
||||||
// implementation jar for use by dexpreopting. They do not need to provide an actual
|
// implementation jar for use by dexpreopting. They do not need to provide an actual
|
||||||
// implementation jar but the java_import will need a file that exists so just copy an empty
|
// implementation jar but the java_import will need a file that exists so just copy an empty
|
||||||
// file. Any attempt to use that file as a jar will cause a build error.
|
// file. Any attempt to use that file as a jar will cause a build error.
|
||||||
return ctx.SnapshotBuilder().EmptyFile()
|
return nil
|
||||||
},
|
},
|
||||||
func(_ android.SdkMemberContext, osPrefix, name string) string {
|
snapshotPathGetter: func(_ android.SdkMemberContext, osPrefix, name string) string {
|
||||||
// Create a special name for the implementation jar to try and provide some useful information
|
// Create a special name for the implementation jar to try and provide some useful information
|
||||||
// to a developer that attempts to compile against this.
|
// to a developer that attempts to compile against this.
|
||||||
// TODO(b/175714559): Provide a proper error message in Soong not ninja.
|
// TODO(b/175714559): Provide a proper error message in Soong not ninja.
|
||||||
return filepath.Join(osPrefix, "java_systemserver_libs", "snapshot", "jars", "are", "invalid", name+jarFileSuffix)
|
return filepath.Join(osPrefix, "java_systemserver_libs", "snapshot", "jars", "are", "invalid", name+jarFileSuffix)
|
||||||
},
|
},
|
||||||
onlyCopyJarToSnapshot,
|
onlyCopyJarToSnapshot: onlyCopyJarToSnapshot,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Supports adding java test libraries to module_exports but not sdk.
|
// Supports adding java test libraries to module_exports but not sdk.
|
||||||
@@ -232,7 +232,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.
|
||||||
@@ -718,7 +718,8 @@ type librarySdkMemberType struct {
|
|||||||
android.SdkMemberTypeBase
|
android.SdkMemberTypeBase
|
||||||
|
|
||||||
// Function to retrieve the appropriate output jar (implementation or header) from
|
// Function to retrieve the appropriate output jar (implementation or header) from
|
||||||
// the library.
|
// the library, if this returns nil then it is assumed that the snapshot must not provide access
|
||||||
|
// to the jar.
|
||||||
jarToExportGetter func(ctx android.SdkMemberContext, j *Library) android.Path
|
jarToExportGetter func(ctx android.SdkMemberContext, j *Library) android.Path
|
||||||
|
|
||||||
// Function to compute the snapshot relative path to which the named library's
|
// Function to compute the snapshot relative path to which the named library's
|
||||||
@@ -755,7 +756,11 @@ func (mt *librarySdkMemberType) CreateVariantPropertiesStruct() android.SdkMembe
|
|||||||
type librarySdkMemberProperties struct {
|
type librarySdkMemberProperties struct {
|
||||||
android.SdkMemberPropertiesBase
|
android.SdkMemberPropertiesBase
|
||||||
|
|
||||||
JarToExport android.Path `android:"arch_variant"`
|
JarToExport android.Path `android:"arch_variant"`
|
||||||
|
|
||||||
|
// The path to a script to use when the jar is invalid.
|
||||||
|
InvalidJarScript android.Path
|
||||||
|
|
||||||
AidlIncludeDirs android.Paths
|
AidlIncludeDirs android.Paths
|
||||||
|
|
||||||
// The list of permitted packages that need to be passed to the prebuilts as they are used to
|
// The list of permitted packages that need to be passed to the prebuilts as they are used to
|
||||||
@@ -766,7 +771,15 @@ type librarySdkMemberProperties struct {
|
|||||||
func (p *librarySdkMemberProperties) PopulateFromVariant(ctx android.SdkMemberContext, variant android.Module) {
|
func (p *librarySdkMemberProperties) PopulateFromVariant(ctx android.SdkMemberContext, variant android.Module) {
|
||||||
j := variant.(*Library)
|
j := variant.(*Library)
|
||||||
|
|
||||||
p.JarToExport = ctx.MemberType().(*librarySdkMemberType).jarToExportGetter(ctx, j)
|
memberType := ctx.MemberType().(*librarySdkMemberType)
|
||||||
|
p.JarToExport = memberType.jarToExportGetter(ctx, j)
|
||||||
|
|
||||||
|
// If no jar was provided for export then disallow access to it completely.
|
||||||
|
if p.JarToExport == nil {
|
||||||
|
// Copy the script to prevent access to the jar into the snapshot.
|
||||||
|
p.InvalidJarScript = android.PathForSource(ctx.SdkModuleContext(),
|
||||||
|
"build/soong/java/invalid_implementation_jar.sh")
|
||||||
|
}
|
||||||
|
|
||||||
p.AidlIncludeDirs = j.AidlIncludeDirs()
|
p.AidlIncludeDirs = j.AidlIncludeDirs()
|
||||||
|
|
||||||
@@ -789,6 +802,21 @@ func (p *librarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberConte
|
|||||||
propertySet.AddProperty("jars", []string{snapshotRelativeJavaLibPath})
|
propertySet.AddProperty("jars", []string{snapshotRelativeJavaLibPath})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if scriptSrc := p.InvalidJarScript; scriptSrc != nil {
|
||||||
|
// Copy the script to prevent access to the jar into the snapshot.
|
||||||
|
scriptDest := filepath.Join("scripts", scriptSrc.Base())
|
||||||
|
builder.CopyToSnapshot(scriptSrc, scriptDest)
|
||||||
|
|
||||||
|
// Generate a genrule module that will invoke the script passing in the module name.
|
||||||
|
genrule := builder.AddInternalModule(p, "genrule", "error")
|
||||||
|
genRuleName := genrule.Name()
|
||||||
|
genrule.AddProperty("out", []string{"this-file-will-never-be-created.jar"})
|
||||||
|
genrule.AddProperty("tool_files", []string{scriptDest})
|
||||||
|
genrule.AddProperty("cmd", fmt.Sprintf("$(location %s) %s", scriptDest, p.Name()))
|
||||||
|
|
||||||
|
propertySet.AddPropertyWithTag("jars", []string{":" + genRuleName}, builder.SdkMemberReferencePropertyTag(true))
|
||||||
|
}
|
||||||
|
|
||||||
if len(p.PermittedPackages) > 0 {
|
if len(p.PermittedPackages) > 0 {
|
||||||
propertySet.AddProperty("permitted_packages", p.PermittedPackages)
|
propertySet.AddProperty("permitted_packages", p.PermittedPackages)
|
||||||
}
|
}
|
||||||
@@ -1650,7 +1678,7 @@ func (j *Import) DepsMutator(ctx android.BottomUpMutatorContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (j *Import) commonBuildActions(ctx android.ModuleContext) {
|
func (j *Import) commonBuildActions(ctx android.ModuleContext) {
|
||||||
//TODO(b/231322772) these should come from Bazel once available
|
// TODO(b/231322772) these should come from Bazel once available
|
||||||
j.sdkVersion = j.SdkVersion(ctx)
|
j.sdkVersion = j.SdkVersion(ctx)
|
||||||
j.minSdkVersion = j.MinSdkVersion(ctx)
|
j.minSdkVersion = j.MinSdkVersion(ctx)
|
||||||
|
|
||||||
@@ -2253,7 +2281,7 @@ func (m *Library) convertJavaResourcesAttributes(ctx android.TopDownMutatorConte
|
|||||||
resources.Append(android.BazelLabelForModuleSrc(ctx, m.properties.Java_resources))
|
resources.Append(android.BazelLabelForModuleSrc(ctx, m.properties.Java_resources))
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO(b/179889880) handle case where glob includes files outside package
|
// TODO(b/179889880) handle case where glob includes files outside package
|
||||||
resDeps := ResourceDirsToFiles(
|
resDeps := ResourceDirsToFiles(
|
||||||
ctx,
|
ctx,
|
||||||
m.properties.Java_resource_dirs,
|
m.properties.Java_resource_dirs,
|
||||||
@@ -2401,7 +2429,7 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext)
|
|||||||
}
|
}
|
||||||
|
|
||||||
epEnabled := m.properties.Errorprone.Enabled
|
epEnabled := m.properties.Errorprone.Enabled
|
||||||
//TODO(b/227504307) add configuration that depends on RUN_ERROR_PRONE environment variable
|
// TODO(b/227504307) add configuration that depends on RUN_ERROR_PRONE environment variable
|
||||||
if Bool(epEnabled) {
|
if Bool(epEnabled) {
|
||||||
javacopts = append(javacopts, m.properties.Errorprone.Javacflags...)
|
javacopts = append(javacopts, m.properties.Errorprone.Javacflags...)
|
||||||
}
|
}
|
||||||
@@ -2637,7 +2665,7 @@ func (i *Import) ProcessBazelQueryResponse(ctx android.ModuleContext) {
|
|||||||
HeaderJars: android.PathsIfNonNil(i.combinedClasspathFile),
|
HeaderJars: android.PathsIfNonNil(i.combinedClasspathFile),
|
||||||
ImplementationAndResourcesJars: android.PathsIfNonNil(i.combinedClasspathFile),
|
ImplementationAndResourcesJars: android.PathsIfNonNil(i.combinedClasspathFile),
|
||||||
ImplementationJars: android.PathsIfNonNil(i.combinedClasspathFile),
|
ImplementationJars: android.PathsIfNonNil(i.combinedClasspathFile),
|
||||||
//TODO(b/240308299) include AIDL information from Bazel
|
// TODO(b/240308299) include AIDL information from Bazel
|
||||||
})
|
})
|
||||||
|
|
||||||
i.maybeInstall(ctx, jarName, outputFile)
|
i.maybeInstall(ctx, jarName, outputFile)
|
||||||
|
@@ -169,7 +169,15 @@ java_import {
|
|||||||
prefer: false,
|
prefer: false,
|
||||||
visibility: ["//visibility:public"],
|
visibility: ["//visibility:public"],
|
||||||
apex_available: ["com.android.art"],
|
apex_available: ["com.android.art"],
|
||||||
jars: ["java_boot_libs/snapshot/jars/are/invalid/core1.jar"],
|
jars: [":mysdk_core1-error"],
|
||||||
|
}
|
||||||
|
|
||||||
|
genrule {
|
||||||
|
name: "mysdk_core1-error",
|
||||||
|
visibility: ["//visibility:private"],
|
||||||
|
out: ["this-file-will-never-be-created.jar"],
|
||||||
|
tool_files: ["scripts/invalid_implementation_jar.sh"],
|
||||||
|
cmd: "$(location scripts/invalid_implementation_jar.sh) core1",
|
||||||
}
|
}
|
||||||
|
|
||||||
java_import {
|
java_import {
|
||||||
@@ -177,7 +185,15 @@ java_import {
|
|||||||
prefer: false,
|
prefer: false,
|
||||||
visibility: ["//visibility:public"],
|
visibility: ["//visibility:public"],
|
||||||
apex_available: ["com.android.art"],
|
apex_available: ["com.android.art"],
|
||||||
jars: ["java_boot_libs/snapshot/jars/are/invalid/core2.jar"],
|
jars: [":mysdk_core2-error"],
|
||||||
|
}
|
||||||
|
|
||||||
|
genrule {
|
||||||
|
name: "mysdk_core2-error",
|
||||||
|
visibility: ["//visibility:private"],
|
||||||
|
out: ["this-file-will-never-be-created.jar"],
|
||||||
|
tool_files: ["scripts/invalid_implementation_jar.sh"],
|
||||||
|
cmd: "$(location scripts/invalid_implementation_jar.sh) core2",
|
||||||
}
|
}
|
||||||
`),
|
`),
|
||||||
checkAllCopyRules(`
|
checkAllCopyRules(`
|
||||||
@@ -187,8 +203,7 @@ java_import {
|
|||||||
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
|
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
|
||||||
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
|
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
|
||||||
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
|
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
|
||||||
.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core1.jar
|
build/soong/java/invalid_implementation_jar.sh -> scripts/invalid_implementation_jar.sh
|
||||||
.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core2.jar
|
|
||||||
`),
|
`),
|
||||||
snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
|
snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
|
||||||
|
|
||||||
@@ -357,10 +372,18 @@ java_import {
|
|||||||
prefer: false,
|
prefer: false,
|
||||||
visibility: ["//visibility:public"],
|
visibility: ["//visibility:public"],
|
||||||
apex_available: ["myapex"],
|
apex_available: ["myapex"],
|
||||||
jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
|
jars: [":mysdk_mybootlib-error"],
|
||||||
permitted_packages: ["mybootlib"],
|
permitted_packages: ["mybootlib"],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
genrule {
|
||||||
|
name: "mysdk_mybootlib-error",
|
||||||
|
visibility: ["//visibility:private"],
|
||||||
|
out: ["this-file-will-never-be-created.jar"],
|
||||||
|
tool_files: ["scripts/invalid_implementation_jar.sh"],
|
||||||
|
cmd: "$(location scripts/invalid_implementation_jar.sh) mybootlib",
|
||||||
|
}
|
||||||
|
|
||||||
java_sdk_library_import {
|
java_sdk_library_import {
|
||||||
name: "myothersdklibrary",
|
name: "myothersdklibrary",
|
||||||
prefer: false,
|
prefer: false,
|
||||||
@@ -467,7 +490,7 @@ func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
|
|||||||
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
|
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
|
||||||
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
|
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
|
||||||
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
|
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
|
||||||
.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
|
build/soong/java/invalid_implementation_jar.sh -> scripts/invalid_implementation_jar.sh
|
||||||
.intermediates/myothersdklibrary.stubs/android_common/javac/myothersdklibrary.stubs.jar -> sdk_library/public/myothersdklibrary-stubs.jar
|
.intermediates/myothersdklibrary.stubs/android_common/javac/myothersdklibrary.stubs.jar -> sdk_library/public/myothersdklibrary-stubs.jar
|
||||||
.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
|
.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
|
||||||
.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
|
.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
|
||||||
@@ -487,7 +510,7 @@ func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
|
|||||||
.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
|
.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
|
||||||
.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
|
.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
|
||||||
.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
|
.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
|
||||||
.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
|
build/soong/java/invalid_implementation_jar.sh -> scripts/invalid_implementation_jar.sh
|
||||||
.intermediates/myothersdklibrary.stubs/android_common/javac/myothersdklibrary.stubs.jar -> sdk_library/public/myothersdklibrary-stubs.jar
|
.intermediates/myothersdklibrary.stubs/android_common/javac/myothersdklibrary.stubs.jar -> sdk_library/public/myothersdklibrary-stubs.jar
|
||||||
.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
|
.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
|
||||||
.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
|
.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
|
||||||
@@ -876,10 +899,18 @@ java_import {
|
|||||||
prefer: false,
|
prefer: false,
|
||||||
visibility: ["//visibility:public"],
|
visibility: ["//visibility:public"],
|
||||||
apex_available: ["myapex"],
|
apex_available: ["myapex"],
|
||||||
jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
|
jars: [":mysdk_mybootlib-error"],
|
||||||
permitted_packages: ["mybootlib"],
|
permitted_packages: ["mybootlib"],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
genrule {
|
||||||
|
name: "mysdk_mybootlib-error",
|
||||||
|
visibility: ["//visibility:private"],
|
||||||
|
out: ["this-file-will-never-be-created.jar"],
|
||||||
|
tool_files: ["scripts/invalid_implementation_jar.sh"],
|
||||||
|
cmd: "$(location scripts/invalid_implementation_jar.sh) mybootlib",
|
||||||
|
}
|
||||||
|
|
||||||
java_sdk_library_import {
|
java_sdk_library_import {
|
||||||
name: "mynewlibrary",
|
name: "mynewlibrary",
|
||||||
prefer: false,
|
prefer: false,
|
||||||
@@ -930,7 +961,7 @@ my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
|
|||||||
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
|
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
|
||||||
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
|
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
|
||||||
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
|
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
|
||||||
.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
|
build/soong/java/invalid_implementation_jar.sh -> scripts/invalid_implementation_jar.sh
|
||||||
.intermediates/mynewlibrary.stubs/android_common/javac/mynewlibrary.stubs.jar -> sdk_library/public/mynewlibrary-stubs.jar
|
.intermediates/mynewlibrary.stubs/android_common/javac/mynewlibrary.stubs.jar -> sdk_library/public/mynewlibrary-stubs.jar
|
||||||
.intermediates/mynewlibrary.stubs.source/android_common/metalava/mynewlibrary.stubs.source_api.txt -> sdk_library/public/mynewlibrary.txt
|
.intermediates/mynewlibrary.stubs.source/android_common/metalava/mynewlibrary.stubs.source_api.txt -> sdk_library/public/mynewlibrary.txt
|
||||||
.intermediates/mynewlibrary.stubs.source/android_common/metalava/mynewlibrary.stubs.source_removed.txt -> sdk_library/public/mynewlibrary-removed.txt
|
.intermediates/mynewlibrary.stubs.source/android_common/metalava/mynewlibrary.stubs.source_removed.txt -> sdk_library/public/mynewlibrary-removed.txt
|
||||||
|
@@ -19,11 +19,13 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"android/soong/android"
|
"android/soong/android"
|
||||||
|
"android/soong/genrule"
|
||||||
"android/soong/java"
|
"android/soong/java"
|
||||||
)
|
)
|
||||||
|
|
||||||
var prepareForSdkTestWithJava = android.GroupFixturePreparers(
|
var prepareForSdkTestWithJava = android.GroupFixturePreparers(
|
||||||
java.PrepareForTestWithJavaBuildComponents,
|
java.PrepareForTestWithJavaBuildComponents,
|
||||||
|
genrule.PrepareForTestWithGenRuleBuildComponents,
|
||||||
PrepareForTestWithSdkBuildComponents,
|
PrepareForTestWithSdkBuildComponents,
|
||||||
|
|
||||||
// Ensure that all source paths are provided. This helps ensure that the snapshot generation is
|
// Ensure that all source paths are provided. This helps ensure that the snapshot generation is
|
||||||
@@ -34,6 +36,7 @@ var prepareForSdkTestWithJava = android.GroupFixturePreparers(
|
|||||||
// Files needs by most of the tests.
|
// Files needs by most of the tests.
|
||||||
android.MockFS{
|
android.MockFS{
|
||||||
"Test.java": nil,
|
"Test.java": nil,
|
||||||
|
"build/soong/java/invalid_implementation_jar.sh": nil,
|
||||||
}.AddToFixture(),
|
}.AddToFixture(),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -288,18 +291,26 @@ java_import {
|
|||||||
prefer: false,
|
prefer: false,
|
||||||
visibility: ["//visibility:public"],
|
visibility: ["//visibility:public"],
|
||||||
apex_available: ["//apex_available:platform"],
|
apex_available: ["//apex_available:platform"],
|
||||||
jars: ["java_boot_libs/snapshot/jars/are/invalid/myjavalib.jar"],
|
jars: [":mysdk_myjavalib-error"],
|
||||||
permitted_packages: ["pkg.myjavalib"],
|
permitted_packages: ["pkg.myjavalib"],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
genrule {
|
||||||
|
name: "mysdk_myjavalib-error",
|
||||||
|
visibility: ["//visibility:private"],
|
||||||
|
out: ["this-file-will-never-be-created.jar"],
|
||||||
|
tool_files: ["scripts/invalid_implementation_jar.sh"],
|
||||||
|
cmd: "$(location scripts/invalid_implementation_jar.sh) myjavalib",
|
||||||
|
}
|
||||||
`),
|
`),
|
||||||
checkAllCopyRules(`
|
checkAllCopyRules(`
|
||||||
.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/myjavalib.jar
|
build/soong/java/invalid_implementation_jar.sh -> scripts/invalid_implementation_jar.sh
|
||||||
`),
|
`),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSnapshotWithJavaBootLibrary_UpdatableMedia(t *testing.T) {
|
func TestSnapshotWithJavaBootLibrary_UpdatableMedia(t *testing.T) {
|
||||||
runTest := func(t *testing.T, targetBuildRelease, expectedJarPath, expectedCopyRule string) {
|
runTest := func(t *testing.T, targetBuildRelease, expectedJarPath, expectedGenRule, expectedCopyRule string) {
|
||||||
result := android.GroupFixturePreparers(
|
result := android.GroupFixturePreparers(
|
||||||
prepareForSdkTestWithJava,
|
prepareForSdkTestWithJava,
|
||||||
android.FixtureMergeEnv(map[string]string{
|
android.FixtureMergeEnv(map[string]string{
|
||||||
@@ -334,20 +345,27 @@ java_import {
|
|||||||
jars: ["%s"],
|
jars: ["%s"],
|
||||||
permitted_packages: ["pkg.media"],
|
permitted_packages: ["pkg.media"],
|
||||||
}
|
}
|
||||||
`, expectedJarPath)),
|
%s`, expectedJarPath, expectedGenRule)),
|
||||||
checkAllCopyRules(expectedCopyRule),
|
checkAllCopyRules(expectedCopyRule),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Run("updatable-media in S", func(t *testing.T) {
|
t.Run("updatable-media in S", func(t *testing.T) {
|
||||||
runTest(t, "S", "java/updatable-media.jar", `
|
runTest(t, "S", "java/updatable-media.jar", "", `
|
||||||
.intermediates/updatable-media/android_common/package-check/updatable-media.jar -> java/updatable-media.jar
|
.intermediates/updatable-media/android_common/package-check/updatable-media.jar -> java/updatable-media.jar
|
||||||
`)
|
`)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("updatable-media in T", func(t *testing.T) {
|
t.Run("updatable-media in T", func(t *testing.T) {
|
||||||
runTest(t, "Tiramisu", "java_boot_libs/snapshot/jars/are/invalid/updatable-media.jar", `
|
runTest(t, "Tiramisu", ":mysdk_updatable-media-error", `
|
||||||
.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/updatable-media.jar
|
genrule {
|
||||||
|
name: "mysdk_updatable-media-error",
|
||||||
|
visibility: ["//visibility:private"],
|
||||||
|
out: ["this-file-will-never-be-created.jar"],
|
||||||
|
tool_files: ["scripts/invalid_implementation_jar.sh"],
|
||||||
|
cmd: "$(location scripts/invalid_implementation_jar.sh) updatable-media",
|
||||||
|
}`, `
|
||||||
|
build/soong/java/invalid_implementation_jar.sh -> scripts/invalid_implementation_jar.sh
|
||||||
`)
|
`)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -389,12 +407,20 @@ java_import {
|
|||||||
prefer: false,
|
prefer: false,
|
||||||
visibility: ["//visibility:public"],
|
visibility: ["//visibility:public"],
|
||||||
apex_available: ["//apex_available:platform"],
|
apex_available: ["//apex_available:platform"],
|
||||||
jars: ["java_systemserver_libs/snapshot/jars/are/invalid/myjavalib.jar"],
|
jars: [":myexports_myjavalib-error"],
|
||||||
permitted_packages: ["pkg.myjavalib"],
|
permitted_packages: ["pkg.myjavalib"],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
genrule {
|
||||||
|
name: "myexports_myjavalib-error",
|
||||||
|
visibility: ["//visibility:private"],
|
||||||
|
out: ["this-file-will-never-be-created.jar"],
|
||||||
|
tool_files: ["scripts/invalid_implementation_jar.sh"],
|
||||||
|
cmd: "$(location scripts/invalid_implementation_jar.sh) myjavalib",
|
||||||
|
}
|
||||||
`),
|
`),
|
||||||
checkAllCopyRules(`
|
checkAllCopyRules(`
|
||||||
.intermediates/myexports/common_os/empty -> java_systemserver_libs/snapshot/jars/are/invalid/myjavalib.jar
|
build/soong/java/invalid_implementation_jar.sh -> scripts/invalid_implementation_jar.sh
|
||||||
`),
|
`),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@@ -119,10 +119,18 @@ java_import {
|
|||||||
prefer: false,
|
prefer: false,
|
||||||
visibility: ["//visibility:public"],
|
visibility: ["//visibility:public"],
|
||||||
apex_available: ["myapex"],
|
apex_available: ["myapex"],
|
||||||
jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
|
jars: [":mysdk_mylib-error"],
|
||||||
permitted_packages: ["mylib"],
|
permitted_packages: ["mylib"],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
genrule {
|
||||||
|
name: "mysdk_mylib-error",
|
||||||
|
visibility: ["//visibility:private"],
|
||||||
|
out: ["this-file-will-never-be-created.jar"],
|
||||||
|
tool_files: ["scripts/invalid_implementation_jar.sh"],
|
||||||
|
cmd: "$(location scripts/invalid_implementation_jar.sh) mylib",
|
||||||
|
}
|
||||||
|
|
||||||
prebuilt_systemserverclasspath_fragment {
|
prebuilt_systemserverclasspath_fragment {
|
||||||
name: "mysystemserverclasspathfragment",
|
name: "mysystemserverclasspathfragment",
|
||||||
prefer: false,
|
prefer: false,
|
||||||
@@ -180,10 +188,18 @@ java_import {
|
|||||||
prefer: false,
|
prefer: false,
|
||||||
visibility: ["//visibility:public"],
|
visibility: ["//visibility:public"],
|
||||||
apex_available: ["myapex"],
|
apex_available: ["myapex"],
|
||||||
jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
|
jars: [":mysdk_mylib-error"],
|
||||||
permitted_packages: ["mylib"],
|
permitted_packages: ["mylib"],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
genrule {
|
||||||
|
name: "mysdk_mylib-error",
|
||||||
|
visibility: ["//visibility:private"],
|
||||||
|
out: ["this-file-will-never-be-created.jar"],
|
||||||
|
tool_files: ["scripts/invalid_implementation_jar.sh"],
|
||||||
|
cmd: "$(location scripts/invalid_implementation_jar.sh) mylib",
|
||||||
|
}
|
||||||
|
|
||||||
prebuilt_systemserverclasspath_fragment {
|
prebuilt_systemserverclasspath_fragment {
|
||||||
name: "mysystemserverclasspathfragment",
|
name: "mysystemserverclasspathfragment",
|
||||||
prefer: false,
|
prefer: false,
|
||||||
|
@@ -1049,9 +1049,6 @@ type snapshotBuilder struct {
|
|||||||
filesToZip android.Paths
|
filesToZip android.Paths
|
||||||
zipsToMerge android.Paths
|
zipsToMerge android.Paths
|
||||||
|
|
||||||
// The path to an empty file.
|
|
||||||
emptyFile android.WritablePath
|
|
||||||
|
|
||||||
prebuiltModules map[string]*bpModule
|
prebuiltModules map[string]*bpModule
|
||||||
prebuiltOrder []*bpModule
|
prebuiltOrder []*bpModule
|
||||||
|
|
||||||
@@ -1111,19 +1108,6 @@ func (s *snapshotBuilder) UnzipToSnapshot(zipPath android.Path, destDir string)
|
|||||||
s.zipsToMerge = append(s.zipsToMerge, tmpZipPath)
|
s.zipsToMerge = append(s.zipsToMerge, tmpZipPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *snapshotBuilder) EmptyFile() android.Path {
|
|
||||||
if s.emptyFile == nil {
|
|
||||||
ctx := s.ctx
|
|
||||||
s.emptyFile = android.PathForModuleOut(ctx, "empty")
|
|
||||||
s.ctx.Build(pctx, android.BuildParams{
|
|
||||||
Rule: android.Touch,
|
|
||||||
Output: s.emptyFile,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return s.emptyFile
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *snapshotBuilder) AddPrebuiltModule(member android.SdkMember, moduleType string) android.BpModule {
|
func (s *snapshotBuilder) AddPrebuiltModule(member android.SdkMember, moduleType string) android.BpModule {
|
||||||
name := member.Name()
|
name := member.Name()
|
||||||
if s.prebuiltModules[name] != nil {
|
if s.prebuiltModules[name] != nil {
|
||||||
@@ -1200,6 +1184,24 @@ func (s *snapshotBuilder) AddPrebuiltModule(member android.SdkMember, moduleType
|
|||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *snapshotBuilder) AddInternalModule(properties android.SdkMemberProperties, moduleType string, nameSuffix string) android.BpModule {
|
||||||
|
name := properties.Name() + "-" + nameSuffix
|
||||||
|
|
||||||
|
if s.prebuiltModules[name] != nil {
|
||||||
|
panic(fmt.Sprintf("Duplicate module detected, module %s has already been added", name))
|
||||||
|
}
|
||||||
|
|
||||||
|
m := s.bpFile.newModule(moduleType)
|
||||||
|
m.AddProperty("name", name)
|
||||||
|
m.AddProperty("visibility", []string{"//visibility:private"})
|
||||||
|
|
||||||
|
s.prebuiltModules[name] = m
|
||||||
|
s.prebuiltOrder = append(s.prebuiltOrder, m)
|
||||||
|
|
||||||
|
s.allMembersByName[name] = struct{}{}
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
func addHostDeviceSupportedProperties(deviceSupported bool, hostSupported bool, bpModule *bpModule) {
|
func addHostDeviceSupportedProperties(deviceSupported bool, hostSupported bool, bpModule *bpModule) {
|
||||||
// If neither device or host is supported then this module does not support either so will not
|
// If neither device or host is supported then this module does not support either so will not
|
||||||
// recognize the properties.
|
// recognize the properties.
|
||||||
@@ -1230,18 +1232,23 @@ func (s *snapshotBuilder) OptionalSdkMemberReferencePropertyTag() android.BpProp
|
|||||||
// Get a name for sdk snapshot member. If the member is private then generate a snapshot specific
|
// Get a name for sdk snapshot member. If the member is private then generate a snapshot specific
|
||||||
// name. As part of the processing this checks to make sure that any required members are part of
|
// name. As part of the processing this checks to make sure that any required members are part of
|
||||||
// the snapshot.
|
// the snapshot.
|
||||||
func (s *snapshotBuilder) snapshotSdkMemberName(name string, required bool) string {
|
func (s *snapshotBuilder) snapshotSdkMemberName(reference string, required bool) string {
|
||||||
|
prefix := ""
|
||||||
|
name := strings.TrimPrefix(reference, ":")
|
||||||
|
if name != reference {
|
||||||
|
prefix = ":"
|
||||||
|
}
|
||||||
if _, ok := s.allMembersByName[name]; !ok {
|
if _, ok := s.allMembersByName[name]; !ok {
|
||||||
if required {
|
if required {
|
||||||
s.ctx.ModuleErrorf("Required member reference %s is not a member of the sdk", name)
|
s.ctx.ModuleErrorf("Required member reference %s is not a member of the sdk", name)
|
||||||
}
|
}
|
||||||
return name
|
return reference
|
||||||
}
|
}
|
||||||
|
|
||||||
if s.isInternalMember(name) {
|
if s.isInternalMember(name) {
|
||||||
return s.ctx.ModuleName() + "_" + name
|
return prefix + s.ctx.ModuleName() + "_" + name
|
||||||
} else {
|
} else {
|
||||||
return name
|
return reference
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2057,6 +2064,7 @@ func (s *sdk) createMemberSnapshot(ctx *memberContext, member *sdkMember, bpModu
|
|||||||
variantPropertiesFactory := func() android.SdkMemberProperties {
|
variantPropertiesFactory := func() android.SdkMemberProperties {
|
||||||
properties := memberType.CreateVariantPropertiesStruct()
|
properties := memberType.CreateVariantPropertiesStruct()
|
||||||
base := properties.Base()
|
base := properties.Base()
|
||||||
|
base.MemberName = member.Name()
|
||||||
base.Os_count = osCount
|
base.Os_count = osCount
|
||||||
return properties
|
return properties
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user