diff options
author | 2021-03-25 18:33:16 -0700 | |
---|---|---|
committer | 2021-03-25 22:21:23 -0700 | |
commit | bc1399271117e056fa5bbe72fba63fa7e500f123 (patch) | |
tree | 437bcccd369d4d547596e56a190f77afb59a8951 /java/droiddoc.go | |
parent | 6aa5c40393d03ca697d41f15d2051f03a37ee6cb (diff) |
Support sandboxing droiddoc and droidstubs with args properties
args properties can access arbitrary files with $(location) expansions,
so they need to pass them through RuleBuilderCommand.PathsForInputs
to produce a path inside the sandbox. Extract the arg expansion out
of collectDeps into a new expandArgs method that takes the
RuleBuilderCommand.
Test: TestDroidstubsSandbox
Change-Id: I9022d17bf3cb64c97b2008c4c1b733bf48edca95
Diffstat (limited to 'java/droiddoc.go')
-rw-r--r-- | java/droiddoc.go | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/java/droiddoc.go b/java/droiddoc.go index a8e2b0e48..f7595b1fc 100644 --- a/java/droiddoc.go +++ b/java/droiddoc.go @@ -226,11 +226,8 @@ type Javadoc struct { srcJars android.Paths srcFiles android.Paths sourcepaths android.Paths - argFiles android.Paths implicits android.Paths - args []string - docZip android.WritablePath stubsSrcJar android.WritablePath } @@ -480,15 +477,20 @@ func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps { j.sourcepaths = android.PathsForModuleSrc(ctx, []string{"."}) } - j.argFiles = android.PathsForModuleSrc(ctx, j.properties.Arg_files) + return deps +} + +func (j *Javadoc) expandArgs(ctx android.ModuleContext, cmd *android.RuleBuilderCommand) { + var argFiles android.Paths argFilesMap := map[string]string{} argFileLabels := []string{} for _, label := range j.properties.Arg_files { var paths = android.PathsForModuleSrc(ctx, []string{label}) if _, exists := argFilesMap[label]; !exists { - argFilesMap[label] = strings.Join(paths.Strings(), " ") + argFilesMap[label] = strings.Join(cmd.PathsForInputs(paths), " ") argFileLabels = append(argFileLabels, label) + argFiles = append(argFiles, paths...) } else { ctx.ModuleErrorf("multiple arg_files for %q, %q and %q", label, argFilesMap[label], paths) @@ -508,7 +510,7 @@ func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps { } for _, flag := range flags { - args, err := android.Expand(flag, func(name string) (string, error) { + expanded, err := android.Expand(flag, func(name string) (string, error) { if strings.HasPrefix(name, "location ") { label := strings.TrimSpace(strings.TrimPrefix(name, "location ")) if paths, ok := argFilesMap[label]; ok { @@ -526,10 +528,10 @@ func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps { if err != nil { ctx.PropertyErrorf(argsPropertyName, "%s", err.Error()) } - j.args = append(j.args, args) + cmd.Flag(expanded) } - return deps + cmd.Implicits(argFiles) } func (j *Javadoc) DepsMutator(ctx android.BottomUpMutatorContext) { @@ -563,6 +565,8 @@ func (j *Javadoc) GenerateAndroidBuildActions(ctx android.ModuleContext) { Flag("-XDignore.symbol.file"). Flag("-Xdoclint:none") + j.expandArgs(ctx, cmd) + rule.Command(). BuiltTool("soong_zip"). Flag("-write_if_changed"). @@ -821,7 +825,7 @@ func (d *Droiddoc) GenerateAndroidBuildActions(ctx android.ModuleContext) { deps.bootClasspath, deps.classpath, d.Javadoc.sourcepaths) } - cmd.Flag(strings.Join(d.Javadoc.args, " ")).Implicits(d.Javadoc.argFiles) + d.expandArgs(ctx, cmd) if d.properties.Compat_config != nil { compatConfig := android.PathForModuleSrc(ctx, String(d.properties.Compat_config)) |