Revert "Use OutputFilesProvider on buildinfo_prop and some android test modules"

This reverts commit 89e4ff60d361cc7e0542f5da7a31c64f90b6d3b8.

Reason for revert: build breakage on aosp-main/mainline_modules_sdks-trunk_staging-userdebug

Change-Id: I5ddac59f66a0e7a96fab39647d406499e3875f6a
diff --git a/android/androidmk_test.go b/android/androidmk_test.go
index 72b8654..ae2187f 100644
--- a/android/androidmk_test.go
+++ b/android/androidmk_test.go
@@ -36,6 +36,10 @@
 	data       AndroidMkData
 	distFiles  TaggedDistFiles
 	outputFile OptionalPath
+
+	// The paths that will be used as the default dist paths if no tag is
+	// specified.
+	defaultDistPaths Paths
 }
 
 const (
@@ -47,7 +51,6 @@
 func (m *customModule) GenerateAndroidBuildActions(ctx ModuleContext) {
 
 	m.base().licenseMetadataFile = PathForOutput(ctx, "meta_lic")
-	var defaultDistPaths Paths
 
 	// If the dist_output_file: true then create an output file that is stored in
 	// the OutputFile property of the AndroidMkEntry.
@@ -59,7 +62,7 @@
 		// property in AndroidMkEntry when determining the default dist paths.
 		// Setting this first allows it to be overridden based on the
 		// default_dist_files setting replicating that previous behavior.
-		defaultDistPaths = Paths{path}
+		m.defaultDistPaths = Paths{path}
 	}
 
 	// Based on the setting of the default_dist_files property possibly create a
@@ -68,40 +71,29 @@
 	defaultDistFiles := proptools.StringDefault(m.properties.Default_dist_files, defaultDistFiles_Tagged)
 	switch defaultDistFiles {
 	case defaultDistFiles_None:
-		m.setOutputFiles(ctx, defaultDistPaths)
+		// Do nothing
 
 	case defaultDistFiles_Default:
 		path := PathForTesting("default-dist.out")
-		defaultDistPaths = Paths{path}
-		m.setOutputFiles(ctx, defaultDistPaths)
+		m.defaultDistPaths = Paths{path}
 		m.distFiles = MakeDefaultDistFiles(path)
 
 	case defaultDistFiles_Tagged:
 		// Module types that set AndroidMkEntry.DistFiles to the result of calling
 		// GenerateTaggedDistFiles(ctx) relied on no tag being treated as "" which
-		// meant that the default dist paths would be the same as empty-string-tag
-		// output files. In order to preserve that behavior when treating no tag
-		// as being equal to DefaultDistTag this ensures that DefaultDistTag output
-		// will be the same as empty-string-tag output.
-		defaultDistPaths = PathsForTesting("one.out")
-		m.setOutputFiles(ctx, defaultDistPaths)
+		// meant that the default dist paths would be whatever was returned by
+		// OutputFiles(""). In order to preserve that behavior when treating no tag
+		// as being equal to DefaultDistTag this ensures that
+		// OutputFiles(DefaultDistTag) will return the same as OutputFiles("").
+		m.defaultDistPaths = PathsForTesting("one.out")
 
 		// This must be called after setting defaultDistPaths/outputFile as
-		// GenerateTaggedDistFiles calls into outputFiles property which may use
-		// those fields.
+		// GenerateTaggedDistFiles calls into OutputFiles(tag) which may use those
+		// fields.
 		m.distFiles = m.GenerateTaggedDistFiles(ctx)
 	}
 }
 
-func (m *customModule) setOutputFiles(ctx ModuleContext, defaultDistPaths Paths) {
-	ctx.SetOutputFiles(PathsForTesting("one.out"), "")
-	ctx.SetOutputFiles(PathsForTesting("two.out", "three/four.out"), ".multiple")
-	ctx.SetOutputFiles(PathsForTesting("another.out"), ".another-tag")
-	if defaultDistPaths != nil {
-		ctx.SetOutputFiles(defaultDistPaths, DefaultDistTag)
-	}
-}
-
 func (m *customModule) AndroidMk() AndroidMkData {
 	return AndroidMkData{
 		Custom: func(w io.Writer, name, prefix, moduleDir string, data AndroidMkData) {
@@ -110,6 +102,25 @@
 	}
 }
 
+func (m *customModule) OutputFiles(tag string) (Paths, error) {
+	switch tag {
+	case DefaultDistTag:
+		if m.defaultDistPaths != nil {
+			return m.defaultDistPaths, nil
+		} else {
+			return nil, fmt.Errorf("default dist tag is not available")
+		}
+	case "":
+		return PathsForTesting("one.out"), nil
+	case ".multiple":
+		return PathsForTesting("two.out", "three/four.out"), nil
+	case ".another-tag":
+		return PathsForTesting("another.out"), nil
+	default:
+		return nil, fmt.Errorf("unsupported module reference tag %q", tag)
+	}
+}
+
 func (m *customModule) AndroidMkEntries() []AndroidMkEntries {
 	return []AndroidMkEntries{
 		{
diff --git a/android/buildinfo_prop.go b/android/buildinfo_prop.go
index 05ae18b..defbff0 100644
--- a/android/buildinfo_prop.go
+++ b/android/buildinfo_prop.go
@@ -15,6 +15,8 @@
 package android
 
 import (
+	"fmt"
+
 	"github.com/google/blueprint/proptools"
 )
 
@@ -39,10 +41,20 @@
 	installPath    InstallPath
 }
 
+var _ OutputFileProducer = (*buildinfoPropModule)(nil)
+
 func (p *buildinfoPropModule) installable() bool {
 	return proptools.BoolDefault(p.properties.Installable, true)
 }
 
+// OutputFileProducer
+func (p *buildinfoPropModule) OutputFiles(tag string) (Paths, error) {
+	if tag != "" {
+		return nil, fmt.Errorf("unsupported tag %q", tag)
+	}
+	return Paths{p.outputFilePath}, nil
+}
+
 func shouldAddBuildThumbprint(config Config) bool {
 	knownOemProperties := []string{
 		"ro.product.brand",
@@ -103,8 +115,6 @@
 
 	p.installPath = PathForModuleInstall(ctx)
 	ctx.InstallFile(p.installPath, p.Name(), p.outputFilePath)
-
-	ctx.SetOutputFiles(Paths{p.outputFilePath}, "")
 }
 
 func (p *buildinfoPropModule) AndroidMkEntries() []AndroidMkEntries {
diff --git a/android/paths_test.go b/android/paths_test.go
index 941f0ca..93b9b9a 100644
--- a/android/paths_test.go
+++ b/android/paths_test.go
@@ -1183,6 +1183,9 @@
 		Outs   []string
 		Tagged []string
 	}
+
+	outs   Paths
+	tagged Paths
 }
 
 func pathForModuleSrcOutputFileProviderModuleFactory() Module {
@@ -1193,17 +1196,24 @@
 }
 
 func (p *pathForModuleSrcOutputFileProviderModule) GenerateAndroidBuildActions(ctx ModuleContext) {
-	var outs, taggedOuts Paths
 	for _, out := range p.props.Outs {
-		outs = append(outs, PathForModuleOut(ctx, out))
+		p.outs = append(p.outs, PathForModuleOut(ctx, out))
 	}
 
 	for _, tagged := range p.props.Tagged {
-		taggedOuts = append(taggedOuts, PathForModuleOut(ctx, tagged))
+		p.tagged = append(p.tagged, PathForModuleOut(ctx, tagged))
 	}
+}
 
-	ctx.SetOutputFiles(outs, "")
-	ctx.SetOutputFiles(taggedOuts, ".tagged")
+func (p *pathForModuleSrcOutputFileProviderModule) OutputFiles(tag string) (Paths, error) {
+	switch tag {
+	case "":
+		return p.outs, nil
+	case ".tagged":
+		return p.tagged, nil
+	default:
+		return nil, fmt.Errorf("unsupported tag %q", tag)
+	}
 }
 
 type pathForModuleSrcTestCase struct {
diff --git a/android/prebuilt_test.go b/android/prebuilt_test.go
index 6e4fc0c..d775ac3 100644
--- a/android/prebuilt_test.go
+++ b/android/prebuilt_test.go
@@ -15,6 +15,7 @@
 package android
 
 import (
+	"fmt"
 	"testing"
 
 	"github.com/google/blueprint"
@@ -493,6 +494,7 @@
 	properties struct {
 		Srcs []string `android:"path,arch_variant"`
 	}
+	src Path
 }
 
 func newPrebuiltModule() Module {
@@ -508,17 +510,24 @@
 }
 
 func (p *prebuiltModule) GenerateAndroidBuildActions(ctx ModuleContext) {
-	var src Path
 	if len(p.properties.Srcs) >= 1 {
-		src = p.prebuilt.SingleSourcePath(ctx)
+		p.src = p.prebuilt.SingleSourcePath(ctx)
 	}
-	ctx.SetOutputFiles(Paths{src}, "")
 }
 
 func (p *prebuiltModule) Prebuilt() *Prebuilt {
 	return &p.prebuilt
 }
 
+func (p *prebuiltModule) OutputFiles(tag string) (Paths, error) {
+	switch tag {
+	case "":
+		return Paths{p.src}, nil
+	default:
+		return nil, fmt.Errorf("unsupported module reference tag %q", tag)
+	}
+}
+
 type sourceModuleProperties struct {
 	Deps []string `android:"path,arch_variant"`
 }