Loading java/java.go +22 −4 Original line number Diff line number Diff line Loading @@ -1618,6 +1618,10 @@ type JavaApiLibraryProperties struct { // List of flags to be passed to the javac compiler to generate jar file Javacflags []string // List of shared java libs that this module has dependencies to and // should be passed as classpath in javac invocation Libs []string } func ApiLibraryFactory() android.Module { Loading Loading @@ -1689,6 +1693,7 @@ func (al *ApiLibrary) DepsMutator(ctx android.BottomUpMutatorContext) { for _, apiContributionName := range apiContributions { ctx.AddDependency(ctx.Module(), javaApiContributionTag, apiContributionName) } ctx.AddVariationDependencies(nil, libTag, al.properties.Libs...) } func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { Loading @@ -1706,10 +1711,18 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { homeDir := android.PathForModuleOut(ctx, "metalava", "home") var srcFiles []android.Path ctx.VisitDirectDepsWithTag(javaApiContributionTag, func(dep android.Module) { var srcFiles android.Paths var classPaths android.Paths ctx.VisitDirectDeps(func(dep android.Module) { tag := ctx.OtherModuleDependencyTag(dep) switch tag { case javaApiContributionTag: provider := ctx.OtherModuleProvider(dep, JavaApiImportProvider).(JavaApiImportInfo) srcFiles = append(srcFiles, android.PathForSource(ctx, provider.ApiFile.String())) case libTag: provider := ctx.OtherModuleProvider(dep, JavaInfoProvider).(JavaInfo) classPaths = append(classPaths, provider.HeaderJars...) } }) // Add the api_files inputs Loading Loading @@ -1739,11 +1752,16 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { var flags javaBuilderFlags flags.javaVersion = getStubsJavaVersion() flags.javacFlags = strings.Join(al.properties.Javacflags, " ") flags.classpath = classpath(classPaths) TransformJavaToClasses(ctx, al.stubsJar, 0, android.Paths{}, android.Paths{al.stubsSrcJar}, flags, android.Paths{}) ctx.Phony(ctx.ModuleName(), al.stubsJar) ctx.SetProvider(JavaInfoProvider, JavaInfo{ HeaderJars: android.PathsIfNonNil(al.stubsJar), }) } // Loading java/java_test.go +85 −5 Original line number Diff line number Diff line Loading @@ -1895,22 +1895,26 @@ func TestJavaApiLibraryAndProviderLink(t *testing.T) { } func TestJavaApiLibraryAndDefaultsLink(t *testing.T) { provider_bp_a := `java_api_contribution { provider_bp_a := ` java_api_contribution { name: "foo1", api_file: "foo1.txt", } ` provider_bp_b := `java_api_contribution { provider_bp_b := ` java_api_contribution { name: "foo2", api_file: "foo2.txt", } ` provider_bp_c := `java_api_contribution { provider_bp_c := ` java_api_contribution { name: "foo3", api_file: "foo3.txt", } ` provider_bp_d := `java_api_contribution { provider_bp_d := ` java_api_contribution { name: "foo4", api_file: "foo4.txt", } Loading Loading @@ -1989,7 +1993,8 @@ func TestJavaApiLibraryJarGeneration(t *testing.T) { api_file: "foo1.txt", } ` provider_bp_b := `java_api_contribution { provider_bp_b := ` java_api_contribution { name: "foo2", api_file: "foo2.txt", } Loading Loading @@ -2034,6 +2039,81 @@ func TestJavaApiLibraryJarGeneration(t *testing.T) { } } func TestJavaApiLibraryLibsLink(t *testing.T) { provider_bp_a := ` java_api_contribution { name: "foo1", api_file: "foo1.txt", } ` provider_bp_b := ` java_api_contribution { name: "foo2", api_file: "foo2.txt", } ` lib_bp_a := ` java_library { name: "lib1", srcs: ["Lib.java"], } ` lib_bp_b := ` java_library { name: "lib2", srcs: ["Lib.java"], } ` ctx, _ := testJavaWithFS(t, ` java_api_library { name: "bar1", api_surface: "public", api_contributions: ["foo1"], libs: ["lib1"], } java_api_library { name: "bar2", api_surface: "system", api_contributions: ["foo1", "foo2"], libs: ["lib1", "lib2", "bar1"], } `, map[string][]byte{ "a/Android.bp": []byte(provider_bp_a), "b/Android.bp": []byte(provider_bp_b), "c/Android.bp": []byte(lib_bp_a), "c/Lib.java": {}, "d/Android.bp": []byte(lib_bp_b), "d/Lib.java": {}, }) testcases := []struct { moduleName string classPathJarNames []string }{ { moduleName: "bar1", classPathJarNames: []string{"lib1.jar"}, }, { moduleName: "bar2", classPathJarNames: []string{"lib1.jar", "lib2.jar", "bar1/android.jar"}, }, } for _, c := range testcases { m := ctx.ModuleForTests(c.moduleName, "android_common") javacRules := m.Rule("javac") classPathArgs := javacRules.Args["classpath"] for _, jarName := range c.classPathJarNames { if !strings.Contains(classPathArgs, jarName) { t.Errorf("Module output does not contain expected jar %s", jarName) } } } } func TestTradefedOptions(t *testing.T) { result := PrepareForTestWithJavaBuildComponents.RunTestWithBp(t, ` java_test_host { Loading Loading
java/java.go +22 −4 Original line number Diff line number Diff line Loading @@ -1618,6 +1618,10 @@ type JavaApiLibraryProperties struct { // List of flags to be passed to the javac compiler to generate jar file Javacflags []string // List of shared java libs that this module has dependencies to and // should be passed as classpath in javac invocation Libs []string } func ApiLibraryFactory() android.Module { Loading Loading @@ -1689,6 +1693,7 @@ func (al *ApiLibrary) DepsMutator(ctx android.BottomUpMutatorContext) { for _, apiContributionName := range apiContributions { ctx.AddDependency(ctx.Module(), javaApiContributionTag, apiContributionName) } ctx.AddVariationDependencies(nil, libTag, al.properties.Libs...) } func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { Loading @@ -1706,10 +1711,18 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { homeDir := android.PathForModuleOut(ctx, "metalava", "home") var srcFiles []android.Path ctx.VisitDirectDepsWithTag(javaApiContributionTag, func(dep android.Module) { var srcFiles android.Paths var classPaths android.Paths ctx.VisitDirectDeps(func(dep android.Module) { tag := ctx.OtherModuleDependencyTag(dep) switch tag { case javaApiContributionTag: provider := ctx.OtherModuleProvider(dep, JavaApiImportProvider).(JavaApiImportInfo) srcFiles = append(srcFiles, android.PathForSource(ctx, provider.ApiFile.String())) case libTag: provider := ctx.OtherModuleProvider(dep, JavaInfoProvider).(JavaInfo) classPaths = append(classPaths, provider.HeaderJars...) } }) // Add the api_files inputs Loading Loading @@ -1739,11 +1752,16 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { var flags javaBuilderFlags flags.javaVersion = getStubsJavaVersion() flags.javacFlags = strings.Join(al.properties.Javacflags, " ") flags.classpath = classpath(classPaths) TransformJavaToClasses(ctx, al.stubsJar, 0, android.Paths{}, android.Paths{al.stubsSrcJar}, flags, android.Paths{}) ctx.Phony(ctx.ModuleName(), al.stubsJar) ctx.SetProvider(JavaInfoProvider, JavaInfo{ HeaderJars: android.PathsIfNonNil(al.stubsJar), }) } // Loading
java/java_test.go +85 −5 Original line number Diff line number Diff line Loading @@ -1895,22 +1895,26 @@ func TestJavaApiLibraryAndProviderLink(t *testing.T) { } func TestJavaApiLibraryAndDefaultsLink(t *testing.T) { provider_bp_a := `java_api_contribution { provider_bp_a := ` java_api_contribution { name: "foo1", api_file: "foo1.txt", } ` provider_bp_b := `java_api_contribution { provider_bp_b := ` java_api_contribution { name: "foo2", api_file: "foo2.txt", } ` provider_bp_c := `java_api_contribution { provider_bp_c := ` java_api_contribution { name: "foo3", api_file: "foo3.txt", } ` provider_bp_d := `java_api_contribution { provider_bp_d := ` java_api_contribution { name: "foo4", api_file: "foo4.txt", } Loading Loading @@ -1989,7 +1993,8 @@ func TestJavaApiLibraryJarGeneration(t *testing.T) { api_file: "foo1.txt", } ` provider_bp_b := `java_api_contribution { provider_bp_b := ` java_api_contribution { name: "foo2", api_file: "foo2.txt", } Loading Loading @@ -2034,6 +2039,81 @@ func TestJavaApiLibraryJarGeneration(t *testing.T) { } } func TestJavaApiLibraryLibsLink(t *testing.T) { provider_bp_a := ` java_api_contribution { name: "foo1", api_file: "foo1.txt", } ` provider_bp_b := ` java_api_contribution { name: "foo2", api_file: "foo2.txt", } ` lib_bp_a := ` java_library { name: "lib1", srcs: ["Lib.java"], } ` lib_bp_b := ` java_library { name: "lib2", srcs: ["Lib.java"], } ` ctx, _ := testJavaWithFS(t, ` java_api_library { name: "bar1", api_surface: "public", api_contributions: ["foo1"], libs: ["lib1"], } java_api_library { name: "bar2", api_surface: "system", api_contributions: ["foo1", "foo2"], libs: ["lib1", "lib2", "bar1"], } `, map[string][]byte{ "a/Android.bp": []byte(provider_bp_a), "b/Android.bp": []byte(provider_bp_b), "c/Android.bp": []byte(lib_bp_a), "c/Lib.java": {}, "d/Android.bp": []byte(lib_bp_b), "d/Lib.java": {}, }) testcases := []struct { moduleName string classPathJarNames []string }{ { moduleName: "bar1", classPathJarNames: []string{"lib1.jar"}, }, { moduleName: "bar2", classPathJarNames: []string{"lib1.jar", "lib2.jar", "bar1/android.jar"}, }, } for _, c := range testcases { m := ctx.ModuleForTests(c.moduleName, "android_common") javacRules := m.Rule("javac") classPathArgs := javacRules.Args["classpath"] for _, jarName := range c.classPathJarNames { if !strings.Contains(classPathArgs, jarName) { t.Errorf("Module output does not contain expected jar %s", jarName) } } } } func TestTradefedOptions(t *testing.T) { result := PrepareForTestWithJavaBuildComponents.RunTestWithBp(t, ` java_test_host { Loading