diff --git a/android/paths.go b/android/paths.go index 0c65b8303..31500ab82 100644 --- a/android/paths.go +++ b/android/paths.go @@ -697,6 +697,16 @@ func (p OutputPath) Join(ctx PathContext, paths ...string) OutputPath { return p.withRel(path) } +// ReplaceExtension creates a new OutputPath with the extension replaced with ext. +func (p OutputPath) ReplaceExtension(ctx PathContext, ext string) OutputPath { + if strings.Contains(ext, "/") { + reportPathErrorf(ctx, "extension %q cannot contain /", ext) + } + ret := PathForOutput(ctx, pathtools.ReplaceExtension(p.path, ext)) + ret.rel = p.rel + return ret +} + // PathForIntermediates returns an OutputPath representing the top-level // intermediates directory. func PathForIntermediates(ctx PathContext, paths ...string) OutputPath { diff --git a/android/paths_test.go b/android/paths_test.go index 1ed07347e..1972591d2 100644 --- a/android/paths_test.go +++ b/android/paths_test.go @@ -691,3 +691,15 @@ func TestPathForSource(t *testing.T) { }) } } + +func ExampleOutputPath_ReplaceExtension() { + ctx := &configErrorWrapper{ + config: TestConfig("out", nil), + } + p := PathForOutput(ctx, "system/framework/boot.art") + p2 := p.ReplaceExtension(ctx, "oat") + fmt.Println(p, p2) + + // Output: + // out/system/framework/boot.art out/system/framework/boot.oat +}