Merge "Generate .srcjar for prebuilt_stubs_sources"

This commit is contained in:
Paul Duffin
2019-12-23 13:32:08 +00:00
committed by Gerrit Code Review
5 changed files with 102 additions and 37 deletions

View File

@@ -1948,12 +1948,42 @@ type PrebuiltStubsSources struct {
properties PrebuiltStubsSourcesProperties
srcs android.Paths
// The source directories containing stubs source files.
srcDirs android.Paths
stubsSrcJar android.ModuleOutPath
}
func (p *PrebuiltStubsSources) OutputFiles(tag string) (android.Paths, error) {
switch tag {
case "":
return android.Paths{p.stubsSrcJar}, nil
default:
return nil, fmt.Errorf("unsupported module reference tag %q", tag)
}
}
func (p *PrebuiltStubsSources) GenerateAndroidBuildActions(ctx android.ModuleContext) {
p.srcs = android.PathsForModuleSrc(ctx, p.properties.Srcs)
p.stubsSrcJar = android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"stubs.srcjar")
p.srcDirs = android.PathsForModuleSrc(ctx, p.properties.Srcs)
rule := android.NewRuleBuilder()
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)
}
rule.Restat()
rule.Build(pctx, ctx, "zip src", "Create srcjar from prebuilt source")
}
func (p *PrebuiltStubsSources) Prebuilt() *android.Prebuilt {
@@ -1964,10 +1994,6 @@ func (p *PrebuiltStubsSources) Name() string {
return p.prebuilt.Name(p.ModuleBase.Name())
}
func (p *PrebuiltStubsSources) Srcs() android.Paths {
return append(android.Paths{}, p.srcs...)
}
// prebuilt_stubs_sources imports a set of java source files as if they were
// generated by droidstubs.
//

View File

@@ -484,28 +484,24 @@ func TestPrebuilts(t *testing.T) {
prebuilt_stubs_sources {
name: "stubs-source",
srcs: ["stubs/sources/**/*.java"],
srcs: ["stubs/sources"],
}
`)
javac := ctx.ModuleForTests("foo", "android_common").Rule("javac")
fooModule := ctx.ModuleForTests("foo", "android_common")
javac := fooModule.Rule("javac")
combineJar := ctx.ModuleForTests("foo", "android_common").Description("for javac")
barJar := ctx.ModuleForTests("bar", "android_common").Rule("combineJar").Output
bazJar := ctx.ModuleForTests("baz", "android_common").Rule("combineJar").Output
sdklibStubsJar := ctx.ModuleForTests("sdklib.stubs", "android_common").Rule("combineJar").Output
inputs := []string{}
for _, p := range javac.BuildParams.Inputs {
inputs = append(inputs, p.String())
}
fooLibrary := fooModule.Module().(*Library)
assertDeepEquals(t, "foo java sources incorrect",
[]string{"a.java"}, fooLibrary.compiledJavaSrcs.Strings())
expected := []string{
"a.java",
"stubs/sources/foo/Foo.java",
}
if !reflect.DeepEqual(expected, inputs) {
t.Errorf("foo inputs incorrect: expected %q, found %q", expected, inputs)
}
assertDeepEquals(t, "foo java source jars incorrect",
[]string{".intermediates/stubs-source/android_common/stubs-source-stubs.srcjar"},
android.NormalizePathsForTesting(fooLibrary.compiledSrcJars))
if !strings.Contains(javac.Args["classpath"], barJar.String()) {
t.Errorf("foo classpath %v does not contain %q", javac.Args["classpath"], barJar.String())
@@ -522,6 +518,12 @@ func TestPrebuilts(t *testing.T) {
ctx.ModuleForTests("qux", "android_common").Rule("Cp")
}
func assertDeepEquals(t *testing.T, message string, expected interface{}, actual interface{}) {
if !reflect.DeepEqual(expected, actual) {
t.Errorf("%s: expected %q, found %q", message, expected, actual)
}
}
func TestDefaults(t *testing.T) {
ctx, _ := testJava(t, `
java_defaults {