Merge changes Ib4581079,Ia3887bae into main

* changes:
  Make IdeInfo aware of jarjar-ing
  Add .internal modules to IDEInfo.deps of top-level java_sdk_library
This commit is contained in:
Spandan Das
2024-08-12 16:40:30 +00:00
committed by Gerrit Code Review
3 changed files with 39 additions and 12 deletions

View File

@@ -2027,16 +2027,20 @@ func (j *Module) ClassLoaderContexts() dexpreopt.ClassLoaderContextMap {
// Collect information for opening IDE project files in java/jdeps.go.
func (j *Module) IDEInfo(dpInfo *android.IdeInfo) {
dpInfo.Deps = append(dpInfo.Deps, j.CompilerDeps()...)
dpInfo.Srcs = append(dpInfo.Srcs, j.expandIDEInfoCompiledSrcs...)
dpInfo.SrcJars = append(dpInfo.SrcJars, j.compiledSrcJars.Strings()...)
dpInfo.Aidl_include_dirs = append(dpInfo.Aidl_include_dirs, j.deviceProperties.Aidl.Include_dirs...)
// jarjar rules will repackage the sources. To prevent misleading results, IdeInfo should contain the
// repackaged jar instead of the input sources.
if j.expandJarjarRules != nil {
dpInfo.Jarjar_rules = append(dpInfo.Jarjar_rules, j.expandJarjarRules.String())
dpInfo.Jars = append(dpInfo.Jars, j.headerJarFile.String())
} else {
dpInfo.Srcs = append(dpInfo.Srcs, j.expandIDEInfoCompiledSrcs...)
dpInfo.SrcJars = append(dpInfo.SrcJars, j.compiledSrcJars.Strings()...)
dpInfo.SrcJars = append(dpInfo.SrcJars, j.annoSrcJars.Strings()...)
}
dpInfo.Deps = append(dpInfo.Deps, j.CompilerDeps()...)
dpInfo.Aidl_include_dirs = append(dpInfo.Aidl_include_dirs, j.deviceProperties.Aidl.Include_dirs...)
dpInfo.Static_libs = append(dpInfo.Static_libs, j.properties.Static_libs...)
dpInfo.Libs = append(dpInfo.Libs, j.properties.Libs...)
dpInfo.SrcJars = append(dpInfo.SrcJars, j.annoSrcJars.Strings()...)
}
func (j *Module) CompilerDeps() []string {

View File

@@ -91,16 +91,23 @@ func TestCollectJavaLibraryPropertiesAddAidlIncludeDirs(t *testing.T) {
}
}
func TestCollectJavaLibraryPropertiesAddJarjarRules(t *testing.T) {
expected := "Jarjar_rules.txt"
module := LibraryFactory().(*Library)
module.expandJarjarRules = android.PathForTesting(expected)
func TestCollectJavaLibraryWithJarJarRules(t *testing.T) {
ctx, _ := testJava(t,
`
java_library {
name: "javalib",
srcs: ["foo.java"],
jarjar_rules: "jarjar_rules.txt",
}
`)
module := ctx.ModuleForTests("javalib", "android_common").Module().(*Library)
dpInfo := &android.IdeInfo{}
module.IDEInfo(dpInfo)
if dpInfo.Jarjar_rules[0] != expected {
t.Errorf("Library.IDEInfo() Jarjar_rules = %v, want %v", dpInfo.Jarjar_rules[0], expected)
android.AssertBoolEquals(t, "IdeInfo.Srcs of repackaged library should be empty", true, len(dpInfo.Srcs) == 0)
android.AssertStringEquals(t, "IdeInfo.Jar_rules of repackaged library should not be empty", "jarjar_rules.txt", dpInfo.Jarjar_rules[0])
if !android.SubstringInList(dpInfo.Jars, "soong/.intermediates/javalib/android_common/jarjar/turbine/javalib.jar") {
t.Errorf("IdeInfo.Jars of repackaged library should contain the output of jarjar-ing. All outputs: %v\n", dpInfo.Jars)
}
}

View File

@@ -3602,3 +3602,19 @@ func (s *sdkLibrarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberCo
propertySet.AddProperty("doctag_files", dests)
}
}
// TODO(b/358613520): This can be removed when modules are no longer allowed to depend on the top-level library.
func (s *SdkLibrary) IDEInfo(dpInfo *android.IdeInfo) {
s.Library.IDEInfo(dpInfo)
if s.implLibraryModule != nil {
dpInfo.Deps = append(dpInfo.Deps, s.implLibraryModule.Name())
} else {
// This java_sdk_library does not have an implementation (it sets `api_only` to true).
// Examples of this are `art.module.intra.core.api` (IntraCore api surface).
// Return the "public" stubs for these.
stubPaths := s.findClosestScopePath(apiScopePublic)
if len(stubPaths.stubsHeaderPath) > 0 {
dpInfo.Jars = append(dpInfo.Jars, stubPaths.stubsHeaderPath[0].String())
}
}
}