diff --git a/java/droiddoc.go b/java/droiddoc.go index c7a27c2a4..cf7f4fb5d 100644 --- a/java/droiddoc.go +++ b/java/droiddoc.go @@ -1748,8 +1748,6 @@ type PrebuiltStubsSources struct { properties PrebuiltStubsSourcesProperties - // The source directories containing stubs source files. - srcDirs android.Paths stubsSrcJar android.ModuleOutPath } @@ -1769,21 +1767,29 @@ func (d *PrebuiltStubsSources) StubsSrcJar() android.Path { func (p *PrebuiltStubsSources) GenerateAndroidBuildActions(ctx android.ModuleContext) { p.stubsSrcJar = android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"stubs.srcjar") - p.srcDirs = android.PathsForModuleSrc(ctx, p.properties.Srcs) + if len(p.properties.Srcs) != 1 { + ctx.PropertyErrorf("srcs", "must only specify one directory path, contains %d paths", len(p.properties.Srcs)) + return + } + + localSrcDir := p.properties.Srcs[0] + // Although PathForModuleSrc can return nil if either the path doesn't exist or + // the path components are invalid it won't in this case because no components + // are specified and the module directory must exist in order to get this far. + srcDir := android.PathForModuleSrc(ctx).(android.SourcePath).Join(ctx, localSrcDir) + + // Glob the contents of the directory just in case the directory does not exist. + srcGlob := localSrcDir + "/**/*" + srcPaths := android.PathsForModuleSrc(ctx, []string{srcGlob}) rule := android.NewRuleBuilder() - command := rule.Command(). + rule.Command(). BuiltTool(ctx, "soong_zip"). Flag("-write_if_changed"). Flag("-jar"). - FlagWithOutput("-o ", p.stubsSrcJar) - - for _, d := range p.srcDirs { - dir := d.String() - command. - FlagWithArg("-C ", dir). - FlagWithInput("-D ", d) - } + FlagWithOutput("-o ", p.stubsSrcJar). + FlagWithArg("-C ", srcDir.String()). + FlagWithRspFileInputList("-r ", srcPaths) rule.Restat() diff --git a/java/java_test.go b/java/java_test.go index 31a974cae..cf56e66da 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -15,6 +15,7 @@ package java import ( + "fmt" "io/ioutil" "os" "path/filepath" @@ -622,6 +623,35 @@ func assertDeepEquals(t *testing.T, message string, expected interface{}, actual } } +func TestPrebuiltStubsSources(t *testing.T) { + test := func(t *testing.T, sourcesPath string, expectedInputs []string) { + ctx, _ := testJavaWithFS(t, fmt.Sprintf(` +prebuilt_stubs_sources { + name: "stubs-source", + srcs: ["%s"], +}`, sourcesPath), map[string][]byte{ + "stubs/sources/pkg/A.java": nil, + "stubs/sources/pkg/B.java": nil, + }) + + zipSrc := ctx.ModuleForTests("stubs-source", "android_common").Rule("zip_src") + if expected, actual := expectedInputs, zipSrc.Inputs.Strings(); !reflect.DeepEqual(expected, actual) { + t.Errorf("mismatch of inputs to soong_zip: expected %q, actual %q", expected, actual) + } + } + + t.Run("empty/missing directory", func(t *testing.T) { + test(t, "empty-directory", []string{}) + }) + + t.Run("non-empty set of sources", func(t *testing.T) { + test(t, "stubs/sources", []string{ + "stubs/sources/pkg/A.java", + "stubs/sources/pkg/B.java", + }) + }) +} + func TestJavaSdkLibraryImport(t *testing.T) { ctx, _ := testJava(t, ` java_library { diff --git a/java/sdk_library.go b/java/sdk_library.go index 13cd5f976..4369ffcf7 100644 --- a/java/sdk_library.go +++ b/java/sdk_library.go @@ -2300,11 +2300,10 @@ func (s *sdkLibrarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberCo scopeSet.AddProperty("jars", jars) // Merge the stubs source jar into the snapshot zip so that when it is unpacked - // the source files are also unpacked. Use a glob so that if the directory is missing - // (because there are no stubs sources for this scope) it will not fail. + // the source files are also unpacked. snapshotRelativeDir := filepath.Join(scopeDir, ctx.Name()+"_stub_sources") ctx.SnapshotBuilder().UnzipToSnapshot(properties.StubsSrcJar, snapshotRelativeDir) - scopeSet.AddProperty("stub_srcs", []string{snapshotRelativeDir + "/**/*.java"}) + scopeSet.AddProperty("stub_srcs", []string{snapshotRelativeDir}) if properties.CurrentApiFile != nil { currentApiSnapshotPath := filepath.Join(scopeDir, ctx.Name()+".txt") diff --git a/sdk/java_sdk_test.go b/sdk/java_sdk_test.go index ec8ebb3b4..b44f66e85 100644 --- a/sdk/java_sdk_test.go +++ b/sdk/java_sdk_test.go @@ -976,21 +976,21 @@ java_sdk_library_import { shared_library: false, public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "current", }, system: { jars: ["sdk_library/system/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/system/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/system/myjavalib_stub_sources"], current_api: "sdk_library/system/myjavalib.txt", removed_api: "sdk_library/system/myjavalib-removed.txt", sdk_version: "system_current", }, test: { jars: ["sdk_library/test/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/test/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/test/myjavalib_stub_sources"], current_api: "sdk_library/test/myjavalib.txt", removed_api: "sdk_library/test/myjavalib-removed.txt", sdk_version: "test_current", @@ -1005,21 +1005,21 @@ java_sdk_library_import { shared_library: false, public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "current", }, system: { jars: ["sdk_library/system/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/system/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/system/myjavalib_stub_sources"], current_api: "sdk_library/system/myjavalib.txt", removed_api: "sdk_library/system/myjavalib-removed.txt", sdk_version: "system_current", }, test: { jars: ["sdk_library/test/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/test/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/test/myjavalib_stub_sources"], current_api: "sdk_library/test/myjavalib.txt", removed_api: "sdk_library/test/myjavalib-removed.txt", sdk_version: "test_current", @@ -1077,7 +1077,7 @@ java_sdk_library_import { shared_library: true, public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "none", @@ -1092,7 +1092,7 @@ java_sdk_library_import { shared_library: true, public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "none", @@ -1146,7 +1146,7 @@ java_sdk_library_import { shared_library: true, public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "module_current", @@ -1161,7 +1161,7 @@ java_sdk_library_import { shared_library: true, public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "module_current", @@ -1218,14 +1218,14 @@ java_sdk_library_import { shared_library: true, public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "current", }, system: { jars: ["sdk_library/system/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/system/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/system/myjavalib_stub_sources"], current_api: "sdk_library/system/myjavalib.txt", removed_api: "sdk_library/system/myjavalib-removed.txt", sdk_version: "system_current", @@ -1240,14 +1240,14 @@ java_sdk_library_import { shared_library: true, public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "current", }, system: { jars: ["sdk_library/system/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/system/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/system/myjavalib_stub_sources"], current_api: "sdk_library/system/myjavalib.txt", removed_api: "sdk_library/system/myjavalib-removed.txt", sdk_version: "system_current", @@ -1311,21 +1311,21 @@ java_sdk_library_import { shared_library: true, public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "current", }, system: { jars: ["sdk_library/system/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/system/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/system/myjavalib_stub_sources"], current_api: "sdk_library/system/myjavalib.txt", removed_api: "sdk_library/system/myjavalib-removed.txt", sdk_version: "system_current", }, module_lib: { jars: ["sdk_library/module-lib/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/module-lib/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/module-lib/myjavalib_stub_sources"], current_api: "sdk_library/module-lib/myjavalib.txt", removed_api: "sdk_library/module-lib/myjavalib-removed.txt", sdk_version: "module_current", @@ -1340,21 +1340,21 @@ java_sdk_library_import { shared_library: true, public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "current", }, system: { jars: ["sdk_library/system/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/system/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/system/myjavalib_stub_sources"], current_api: "sdk_library/system/myjavalib.txt", removed_api: "sdk_library/system/myjavalib-removed.txt", sdk_version: "system_current", }, module_lib: { jars: ["sdk_library/module-lib/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/module-lib/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/module-lib/myjavalib_stub_sources"], current_api: "sdk_library/module-lib/myjavalib.txt", removed_api: "sdk_library/module-lib/myjavalib-removed.txt", sdk_version: "module_current", @@ -1419,14 +1419,14 @@ java_sdk_library_import { shared_library: true, public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "current", }, system_server: { jars: ["sdk_library/system-server/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/system-server/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/system-server/myjavalib_stub_sources"], current_api: "sdk_library/system-server/myjavalib.txt", removed_api: "sdk_library/system-server/myjavalib-removed.txt", sdk_version: "system_server_current", @@ -1441,14 +1441,14 @@ java_sdk_library_import { shared_library: true, public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "current", }, system_server: { jars: ["sdk_library/system-server/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/system-server/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/system-server/myjavalib_stub_sources"], current_api: "sdk_library/system-server/myjavalib.txt", removed_api: "sdk_library/system-server/myjavalib-removed.txt", sdk_version: "system_server_current", @@ -1508,7 +1508,7 @@ java_sdk_library_import { shared_library: true, public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "current", @@ -1524,7 +1524,7 @@ java_sdk_library_import { shared_library: true, public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "current", @@ -1584,7 +1584,7 @@ java_sdk_library_import { doctag_files: ["doctags/docs/known_doctags"], public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "current", @@ -1600,7 +1600,7 @@ java_sdk_library_import { doctag_files: ["doctags/docs/known_doctags"], public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], - stub_srcs: ["sdk_library/public/myjavalib_stub_sources/**/*.java"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], current_api: "sdk_library/public/myjavalib.txt", removed_api: "sdk_library/public/myjavalib-removed.txt", sdk_version: "current",