Revert "Improve error reporting when depending on prebuilt implementation jar"

This reverts commit c61783b20d.

Bug: 257969510
Reason for revert: b/255275437 - breaks checkbuild target

Change-Id: I01f88053cc24dbc1a4eb5c009f15473bdff3d565
This commit is contained in:
Paul Duffin
2022-11-21 10:57:30 +00:00
committed by Gerrit Code Review
parent c61783b20d
commit 7ed6ff8c76
7 changed files with 72 additions and 256 deletions

View File

@@ -86,11 +86,11 @@ func RegisterJavaSdkMemberTypes() {
var (
// Supports adding java header libraries to module_exports and sdk.
javaHeaderLibsSdkMemberType = &librarySdkMemberType{
SdkMemberTypeBase: android.SdkMemberTypeBase{
android.SdkMemberTypeBase{
PropertyName: "java_header_libs",
SupportsSdk: true,
},
jarToExportGetter: func(_ android.SdkMemberContext, j *Library) android.Path {
func(_ android.SdkMemberContext, j *Library) android.Path {
headerJars := j.HeaderJars()
if len(headerJars) != 1 {
panic(fmt.Errorf("there must be only one header jar from %q", j.Name()))
@@ -98,8 +98,8 @@ var (
return headerJars[0]
},
snapshotPathGetter: sdkSnapshotFilePathForJar,
onlyCopyJarToSnapshot: copyEverythingToSnapshot,
sdkSnapshotFilePathForJar,
copyEverythingToSnapshot,
}
// 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.
javaLibsSdkMemberType = &librarySdkMemberType{
SdkMemberTypeBase: android.SdkMemberTypeBase{
android.SdkMemberTypeBase{
PropertyName: "java_libs",
},
jarToExportGetter: exportImplementationClassesJar,
snapshotPathGetter: sdkSnapshotFilePathForJar,
onlyCopyJarToSnapshot: copyEverythingToSnapshot,
exportImplementationClassesJar,
sdkSnapshotFilePathForJar,
copyEverythingToSnapshot,
}
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
// sdk/module_exports without exposing any unnecessary information.
javaBootLibsSdkMemberType = &librarySdkMemberType{
SdkMemberTypeBase: android.SdkMemberTypeBase{
android.SdkMemberTypeBase{
PropertyName: "java_boot_libs",
SupportsSdk: true,
},
jarToExportGetter: func(ctx android.SdkMemberContext, j *Library) android.Path {
func(ctx android.SdkMemberContext, j *Library) android.Path {
if snapshotRequiresImplementationJar(ctx) {
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
// 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.
return nil
return ctx.SnapshotBuilder().EmptyFile()
},
snapshotPathGetter: func(ctx android.SdkMemberContext, osPrefix, name string) string {
func(ctx android.SdkMemberContext, osPrefix, name string) string {
if snapshotRequiresImplementationJar(ctx) {
return sdkSnapshotFilePathForJar(ctx, osPrefix, name)
}
@@ -168,7 +168,7 @@ var (
// 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)
},
onlyCopyJarToSnapshot: onlyCopyJarToSnapshot,
onlyCopyJarToSnapshot,
}
// 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
// the sdk/module_exports without exposing any unnecessary information.
javaSystemserverLibsSdkMemberType = &librarySdkMemberType{
SdkMemberTypeBase: android.SdkMemberTypeBase{
android.SdkMemberTypeBase{
PropertyName: "java_systemserver_libs",
SupportsSdk: true,
// This was only added in Tiramisu.
SupportedBuildReleaseSpecification: "Tiramisu+",
},
jarToExportGetter: func(ctx android.SdkMemberContext, j *Library) android.Path {
func(ctx android.SdkMemberContext, j *Library) android.Path {
// 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 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.
return nil
return ctx.SnapshotBuilder().EmptyFile()
},
snapshotPathGetter: func(_ android.SdkMemberContext, osPrefix, name string) string {
func(_ android.SdkMemberContext, osPrefix, name string) string {
// Create a special name for the implementation jar to try and provide some useful information
// to a developer that attempts to compile against this.
// 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)
},
onlyCopyJarToSnapshot: onlyCopyJarToSnapshot,
onlyCopyJarToSnapshot,
}
// Supports adding java test libraries to module_exports but not sdk.
@@ -232,7 +232,7 @@ type JavaInfo struct {
ImplementationAndResourcesJars android.Paths
// ImplementationJars is a list of jars that contain the implementations of classes in the
// module.
//module.
ImplementationJars android.Paths
// ResourceJars is a list of jars that contain the resources included in the module.
@@ -718,8 +718,7 @@ type librarySdkMemberType struct {
android.SdkMemberTypeBase
// Function to retrieve the appropriate output jar (implementation or header) from
// the library, if this returns nil then it is assumed that the snapshot must not provide access
// to the jar.
// the library.
jarToExportGetter func(ctx android.SdkMemberContext, j *Library) android.Path
// Function to compute the snapshot relative path to which the named library's
@@ -756,11 +755,7 @@ func (mt *librarySdkMemberType) CreateVariantPropertiesStruct() android.SdkMembe
type librarySdkMemberProperties struct {
android.SdkMemberPropertiesBase
JarToExport android.Path `android:"arch_variant"`
// The path to a script to use when the jar is invalid.
InvalidJarScript android.Path
JarToExport android.Path `android:"arch_variant"`
AidlIncludeDirs android.Paths
// The list of permitted packages that need to be passed to the prebuilts as they are used to
@@ -771,15 +766,7 @@ type librarySdkMemberProperties struct {
func (p *librarySdkMemberProperties) PopulateFromVariant(ctx android.SdkMemberContext, variant android.Module) {
j := variant.(*Library)
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.JarToExport = ctx.MemberType().(*librarySdkMemberType).jarToExportGetter(ctx, j)
p.AidlIncludeDirs = j.AidlIncludeDirs()
@@ -802,21 +789,6 @@ func (p *librarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberConte
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 {
propertySet.AddProperty("permitted_packages", p.PermittedPackages)
}
@@ -1678,7 +1650,7 @@ func (j *Import) DepsMutator(ctx android.BottomUpMutatorContext) {
}
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.minSdkVersion = j.MinSdkVersion(ctx)
@@ -2281,7 +2253,7 @@ func (m *Library) convertJavaResourcesAttributes(ctx android.TopDownMutatorConte
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(
ctx,
m.properties.Java_resource_dirs,
@@ -2429,7 +2401,7 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext)
}
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) {
javacopts = append(javacopts, m.properties.Errorprone.Javacflags...)
}
@@ -2665,7 +2637,7 @@ func (i *Import) ProcessBazelQueryResponse(ctx android.ModuleContext) {
HeaderJars: android.PathsIfNonNil(i.combinedClasspathFile),
ImplementationAndResourcesJars: 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)