Add source file provider for genrule/srcs, python libraries and rust libraries.

Change-Id: I2d7d4684a10c15aeecc27b8db800ab27a807d2e2
diff --git a/android/Android.bp b/android/Android.bp
index f8e3cb3..62f534c 100644
--- a/android/Android.bp
+++ b/android/Android.bp
@@ -93,7 +93,6 @@
         "singleton.go",
         "singleton_module.go",
         "soong_config_modules.go",
-        "source_file_provider.go",
         "test_asserts.go",
         "test_suites.go",
         "testing.go",
diff --git a/android/filegroup.go b/android/filegroup.go
index 856c50e..c34a615 100644
--- a/android/filegroup.go
+++ b/android/filegroup.go
@@ -290,6 +290,7 @@
 	if fg.properties.Path != nil {
 		fg.srcs = PathsWithModuleSrcSubDir(ctx, fg.srcs, String(fg.properties.Path))
 	}
+	ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: fg.srcs.Strings()})
 }
 
 func (fg *fileGroup) Srcs() Paths {
diff --git a/android/source_file_provider.go b/android/source_file_provider.go
deleted file mode 100644
index 80bde2a..0000000
--- a/android/source_file_provider.go
+++ /dev/null
@@ -1,11 +0,0 @@
-package android
-
-import (
-	"github.com/google/blueprint"
-)
-
-type SrcsFileProviderData struct {
-	SrcPaths Paths
-}
-
-var SrcsFileProviderKey = blueprint.NewProvider(SrcsFileProviderData{})
diff --git a/bpf/bpf.go b/bpf/bpf.go
index 58213aa..8c0d28b 100644
--- a/bpf/bpf.go
+++ b/bpf/bpf.go
@@ -206,6 +206,7 @@
 		}
 
 	}
+	ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: srcs.Strings()})
 }
 
 func (bpf *bpf) AndroidMk() android.AndroidMkData {
diff --git a/cc/cc.go b/cc/cc.go
index 2e42761..3fc93bd 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -2322,6 +2322,7 @@
 	if c.testModule {
 		ctx.SetProvider(testing.TestModuleProviderKey, testing.TestModuleProviderData{})
 	}
+	ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: deps.GeneratedSources.Strings()})
 
 	aconfig.CollectTransitiveAconfigFiles(ctx, &c.transitiveAconfigFiles)
 
diff --git a/genrule/genrule.go b/genrule/genrule.go
index 8f2c047..6b11019 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -424,6 +424,7 @@
 		return srcFiles
 	}
 	srcFiles := addLabelsForInputs("srcs", g.properties.Srcs, g.properties.Exclude_srcs)
+	ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: srcFiles.Strings()})
 
 	var copyFrom android.Paths
 	var outputFiles android.WritablePaths
diff --git a/java/base.go b/java/base.go
index 295340d..7e1381b 100644
--- a/java/base.go
+++ b/java/base.go
@@ -24,6 +24,7 @@
 
 	"github.com/google/blueprint/pathtools"
 	"github.com/google/blueprint/proptools"
+	"github.com/google/blueprint"
 
 	"android/soong/aconfig"
 	"android/soong/android"
@@ -1170,6 +1171,7 @@
 	uniqueSrcFiles = append(uniqueSrcFiles, uniqueJavaFiles...)
 	uniqueSrcFiles = append(uniqueSrcFiles, uniqueKtFiles...)
 	j.uniqueSrcFiles = uniqueSrcFiles
+	ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: uniqueSrcFiles.Strings()})
 
 	// We don't currently run annotation processors in turbine, which means we can't use turbine
 	// generated header jars when an annotation processor that generates API is enabled.  One
diff --git a/java/sdk_library.go b/java/sdk_library.go
index 4eaa382..fbfe509 100644
--- a/java/sdk_library.go
+++ b/java/sdk_library.go
@@ -1477,7 +1477,6 @@
 		}
 	}
 	ctx.SetProvider(android.AdditionalSdkInfoProvider, android.AdditionalSdkInfo{additionalSdkInfo})
-	ctx.SetProvider(android.SrcsFileProviderKey, android.SrcsFileProviderData{SrcPaths: module.uniqueSrcFiles})
 }
 
 func (module *SdkLibrary) AndroidMkEntries() []android.AndroidMkEntries {
diff --git a/python/python.go b/python/python.go
index 7d77ca7..b4617c8 100644
--- a/python/python.go
+++ b/python/python.go
@@ -430,6 +430,7 @@
 // GenerateAndroidBuildActions performs build actions common to all Python modules
 func (p *PythonLibraryModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
 	expandedSrcs := android.PathsForModuleSrcExcludes(ctx, p.properties.Srcs, p.properties.Exclude_srcs)
+	ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: expandedSrcs.Strings()})
 
 	// expand data files from "data" property.
 	expandedData := android.PathsForModuleSrc(ctx, p.properties.Data)
diff --git a/rust/rust.go b/rust/rust.go
index d4d33c7..3d51a13 100644
--- a/rust/rust.go
+++ b/rust/rust.go
@@ -951,6 +951,7 @@
 			sourceLib := sourceMod.(*Module).compiler.(*libraryDecorator)
 			mod.sourceProvider.setOutputFiles(sourceLib.sourceProvider.Srcs())
 		}
+		ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: mod.sourceProvider.Srcs().Strings()})
 	}
 
 	if mod.compiler != nil && !mod.compiler.Disabled() {
diff --git a/sh/sh_binary.go b/sh/sh_binary.go
index 6b40e3c..7962749 100644
--- a/sh/sh_binary.go
+++ b/sh/sh_binary.go
@@ -272,6 +272,7 @@
 		Output: s.outputFilePath,
 		Input:  s.sourceFilePath,
 	})
+	ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: []string{s.sourceFilePath.String()}})
 }
 
 func (s *ShBinary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
diff --git a/sysprop/sysprop_library.go b/sysprop/sysprop_library.go
index 8bf5f14..013624f 100644
--- a/sysprop/sysprop_library.go
+++ b/sysprop/sysprop_library.go
@@ -254,12 +254,13 @@
 // generated java_library will depend on these API files.
 func (m *syspropLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
 	baseModuleName := m.BaseModuleName()
-
-	for _, syspropFile := range android.PathsForModuleSrc(ctx, m.properties.Srcs) {
+	srcs := android.PathsForModuleSrc(ctx, m.properties.Srcs)
+	for _, syspropFile := range srcs {
 		if syspropFile.Ext() != ".sysprop" {
 			ctx.PropertyErrorf("srcs", "srcs contains non-sysprop file %q", syspropFile.String())
 		}
 	}
+	ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: srcs.Strings()})
 
 	if ctx.Failed() {
 		return
@@ -277,7 +278,7 @@
 	rule.Command().
 		BuiltTool("sysprop_api_dump").
 		Output(m.dumpedApiFile).
-		Inputs(android.PathsForModuleSrc(ctx, m.properties.Srcs))
+		Inputs(srcs)
 	rule.Build(baseModuleName+"_api_dump", baseModuleName+" api dump")
 
 	// check API rule
diff --git a/testing/code_metadata.go b/testing/code_metadata.go
index 926324d..4550283 100644
--- a/testing/code_metadata.go
+++ b/testing/code_metadata.go
@@ -95,11 +95,11 @@
 
 	for _, m := range ctx.GetDirectDepsWithTag(codeDepTag) {
 		targetName := m.Name()
-		var moduleSrcs android.Paths
-		if ctx.OtherModuleHasProvider(m, android.SrcsFileProviderKey) {
+		var moduleSrcs []string
+		if ctx.OtherModuleHasProvider(m, blueprint.SrcsFileProviderKey) {
 			moduleSrcs = ctx.OtherModuleProvider(
-				m, android.SrcsFileProviderKey,
-			).(android.SrcsFileProviderData).SrcPaths
+				m, blueprint.SrcsFileProviderKey,
+			).(blueprint.SrcsFileProviderData).SrcPaths
 		}
 		if module.properties.MultiOwnership {
 			metadata := &code_metadata_internal_proto.CodeMetadataInternal_TargetOwnership{
@@ -107,7 +107,7 @@
 				TrendyTeamId:   &module.properties.TeamId,
 				Path:           &bpFilePath,
 				MultiOwnership: &module.properties.MultiOwnership,
-				SourceFiles:    moduleSrcs.Strings(),
+				SourceFiles:    moduleSrcs,
 			}
 			metadataList = append(metadataList, metadata)
 		} else {
@@ -115,7 +115,7 @@
 				TargetName:   &targetName,
 				TrendyTeamId: &module.properties.TeamId,
 				Path:         &bpFilePath,
-				SourceFiles:  moduleSrcs.Strings(),
+				SourceFiles:  moduleSrcs,
 			}
 			metadataList = append(metadataList, metadata)
 		}