From f5ee86c46fb14714c1aa3c357e5e9665ed29dce7 Mon Sep 17 00:00:00 2001 From: Spandan Das Date: Thu, 8 Aug 2024 21:11:42 +0000 Subject: [PATCH 1/2] Add IdeInfo for java module types This CL adds support for 1. java_system_modules 2. java_system_modules_import 3. java_device_for_host 4. java_host_for_device Bug: 356572093 Test: cat out/soong/module_bp_java_deps.json | jq '."core-all-system-modules"' is no longer null Change-Id: I73affae834df7f6ed961fa757585242f6d388395 --- java/device_host_converter.go | 8 ++++++++ java/system_modules.go | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/java/device_host_converter.go b/java/device_host_converter.go index 90aeb4e24..63b69d0a8 100644 --- a/java/device_host_converter.go +++ b/java/device_host_converter.go @@ -188,3 +188,11 @@ func (d *DeviceHostConverter) AndroidMk() android.AndroidMkData { }, } } + +// implement the following interface for IDE completion. +var _ android.IDEInfo = (*DeviceHostConverter)(nil) + +func (d *DeviceHostConverter) IDEInfo(ideInfo *android.IdeInfo) { + ideInfo.Deps = append(ideInfo.Deps, d.properties.Libs...) + ideInfo.Libs = append(ideInfo.Libs, d.properties.Libs...) +} diff --git a/java/system_modules.go b/java/system_modules.go index 500d7fa25..48b33ba57 100644 --- a/java/system_modules.go +++ b/java/system_modules.go @@ -311,3 +311,11 @@ func (p *systemModulesInfoProperties) AddToPropertySet(ctx android.SdkMemberCont propertySet.AddPropertyWithTag("libs", p.Libs, ctx.SnapshotBuilder().SdkMemberReferencePropertyTag(true)) } } + +// implement the following interface for IDE completion. +var _ android.IDEInfo = (*SystemModules)(nil) + +func (s *SystemModules) IDEInfo(ideInfo *android.IdeInfo) { + ideInfo.Deps = append(ideInfo.Deps, s.properties.Libs...) + ideInfo.Libs = append(ideInfo.Libs, s.properties.Libs...) +} From 6e8bd1cc371f9e37ab81ed7ed3f3f4e129e476d4 Mon Sep 17 00:00:00 2001 From: Spandan Das Date: Fri, 9 Aug 2024 00:07:03 +0000 Subject: [PATCH 2/2] Register versioned sdk dependency in module_bp_java_deps.json java modules that link against a versioned sdk (sdk_version: ) get the appropriate stub jar on its classpath, but the dependency is not registered in its build graph. This CL registers this dependency for module_bp_java_deps.json. Ideally, we should move this to `decodeSdkDep` so that this dependendency becomes known to other tools that analyze soong's module graph (e.g. soongdbg) Test: go test ./java Bug: 358608607 Bug: 356572093 Change-Id: Iab6efe7826d18dedfadbe4d34d78e7eb2888bd8d --- java/base.go | 5 +++++ java/jdeps_test.go | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/java/base.go b/java/base.go index 9c1d8fb8e..f820629e9 100644 --- a/java/base.go +++ b/java/base.go @@ -2229,6 +2229,11 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { deps.classpath = append(deps.classpath, sdkDep.jars...) deps.dexClasspath = append(deps.dexClasspath, sdkDep.jars...) deps.aidlPreprocess = sdkDep.aidl + // Add the sdk module dependency to `compileDepNames`. + // This ensures that the dependency is reported in `module_bp_java_deps.json` + // TODO (b/358608607): Move this to decodeSdkDep + sdkSpec := android.SdkContext(j).SdkVersion(ctx) + j.compileDepNames = append(j.compileDepNames, fmt.Sprintf("sdk_%s_%s_android", sdkSpec.Kind.String(), sdkSpec.ApiLevel.String())) } else { deps.aidlPreprocess = sdkDep.aidl } diff --git a/java/jdeps_test.go b/java/jdeps_test.go index e1802243c..47bfac16c 100644 --- a/java/jdeps_test.go +++ b/java/jdeps_test.go @@ -103,3 +103,23 @@ func TestCollectJavaLibraryPropertiesAddJarjarRules(t *testing.T) { t.Errorf("Library.IDEInfo() Jarjar_rules = %v, want %v", dpInfo.Jarjar_rules[0], expected) } } + +func TestCollectJavaLibraryLinkingAgainstVersionedSdk(t *testing.T) { + ctx := android.GroupFixturePreparers( + prepareForJavaTest, + FixtureWithPrebuiltApis(map[string][]string{ + "29": {}, + })).RunTestWithBp(t, + ` + java_library { + name: "javalib", + srcs: ["foo.java"], + sdk_version: "29", + } + `) + module := ctx.ModuleForTests("javalib", "android_common").Module().(*Library) + dpInfo := &android.IdeInfo{} + + module.IDEInfo(dpInfo) + android.AssertStringListContains(t, "IdeInfo.Deps should contain versioned sdk module", dpInfo.Deps, "sdk_public_29_android") +}