From 5425090a4f006fb0de0a98fbd0dad66706e1638e Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 5 Dec 2017 09:28:08 -0800 Subject: Add java_genrules to use jars as inputs and outputs Add a java_genrule that has the right multilib flags to be a dependency of a java rule. Make java libraries implement SourceFileProducer so that their classes jar can be used as an input to a java_genrule. Allow libs and static_libs dependencies to be a java_genrule. Test: TestJarGenrules Change-Id: Ib1b31ef9c0b7e72eeed2c9ecc4ce8a1088e0b1c9 --- java/java_test.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'java/java_test.go') diff --git a/java/java_test.go b/java/java_test.go index dbecc70b..58b27c30 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -67,6 +67,7 @@ func testContext(config android.Config, bp string, ctx.RegisterModuleType("java_import", android.ModuleFactoryAdaptor(ImportFactory)) ctx.RegisterModuleType("java_defaults", android.ModuleFactoryAdaptor(defaultsFactory)) ctx.RegisterModuleType("java_system_modules", android.ModuleFactoryAdaptor(SystemModulesFactory)) + ctx.RegisterModuleType("java_genrule", android.ModuleFactoryAdaptor(genRuleFactory)) ctx.RegisterModuleType("filegroup", android.ModuleFactoryAdaptor(genrule.FileGroupFactory)) ctx.RegisterModuleType("genrule", android.ModuleFactoryAdaptor(genrule.GenRuleFactory)) ctx.PreArchMutators(android.RegisterPrebuiltsPreArchMutators) @@ -775,6 +776,60 @@ func TestSharding(t *testing.T) { } } +func TestJarGenrules(t *testing.T) { + ctx := testJava(t, ` + java_library { + name: "foo", + srcs: ["a.java"], + } + + java_genrule { + name: "jargen", + tool_files: ["b.java"], + cmd: "$(location b.java) $(in) $(out)", + out: ["jargen.jar"], + srcs: [":foo"], + } + + java_library { + name: "bar", + static_libs: ["jargen"], + srcs: ["c.java"], + } + + java_library { + name: "baz", + libs: ["jargen"], + srcs: ["c.java"], + } + `) + + foo := ctx.ModuleForTests("foo", "android_common").Output("javac/foo.jar") + jargen := ctx.ModuleForTests("jargen", "android_common").Output("jargen.jar") + bar := ctx.ModuleForTests("bar", "android_common").Output("javac/bar.jar") + baz := ctx.ModuleForTests("baz", "android_common").Output("javac/baz.jar") + barCombined := ctx.ModuleForTests("bar", "android_common").Output("combined/bar.jar") + + if len(jargen.Inputs) != 1 || jargen.Inputs[0].String() != foo.Output.String() { + t.Errorf("expected jargen inputs [%q], got %q", foo.Output.String(), jargen.Inputs.Strings()) + } + + if !strings.Contains(bar.Args["classpath"], jargen.Output.String()) { + t.Errorf("bar classpath %v does not contain %q", bar.Args["classpath"], jargen.Output.String()) + } + + if !strings.Contains(baz.Args["classpath"], jargen.Output.String()) { + t.Errorf("baz classpath %v does not contain %q", baz.Args["classpath"], jargen.Output.String()) + } + + if len(barCombined.Inputs) != 2 || + barCombined.Inputs[0].String() != bar.Output.String() || + barCombined.Inputs[1].String() != jargen.Output.String() { + t.Errorf("bar combined jar inputs %v is not [%q, %q]", + barCombined.Inputs.Strings(), bar.Output.String(), jargen.Output.String()) + } +} + func fail(t *testing.T, errs []error) { if len(errs) > 0 { for _, err := range errs { -- cgit v1.2.3