Make IdeInfo aware of jarjar-ing
jarjar can be used to repackage a java_library. e.g. Foo.java in package com.android might get repackaged to prefix.com.android.Foo in the resultant jar. To allow code completion of rdeps, we should use the repackaged jar instead of the src files. This CL sets dpInfo.Jars to the header jar _only_ when jarjar_rules is not empty. We could probably set `Jars` to the header jar even for non jarjar-d libraries and get rid of `Srcs`, `SrcJars` altogether, but that would likely slow down any tools that index out/soong/module_bp_java_deps.json for code completion. Test: go test ./java Bug: 356572093 Change-Id: Ib45810799a479cb315aed011a34351d386a21357
This commit is contained in:
14
java/base.go
14
java/base.go
@@ -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 {
|
||||
|
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user