Fix missing genrule srcs and tools with ALLOW_MISSING_DEPENDENCIES=true

Set the location label for missing srcs and tools to avoid
nonsensical errors when parsing the command.

Test: genrule_test.go
Test: paths_test.go
Test: unbundled branch with missing framework-res module needed by robolectric genrule
Change-Id: I9c1f1cd82a80f048c0e903b8e93910b1ae34b0b1
diff --git a/android/paths_test.go b/android/paths_test.go
index 2e0e0e8..b52d713 100644
--- a/android/paths_test.go
+++ b/android/paths_test.go
@@ -714,6 +714,8 @@
 		Exclude_srcs []string `android:"path"`
 
 		Src *string `android:"path"`
+
+		Module_handles_missing_deps bool
 	}
 
 	src string
@@ -733,7 +735,12 @@
 }
 
 func (p *pathForModuleSrcTestModule) GenerateAndroidBuildActions(ctx ModuleContext) {
-	srcs := PathsForModuleSrcExcludes(ctx, p.props.Srcs, p.props.Exclude_srcs)
+	var srcs Paths
+	if p.props.Module_handles_missing_deps {
+		srcs, p.missingDeps = PathsAndMissingDepsForModuleSrcExcludes(ctx, p.props.Srcs, p.props.Exclude_srcs)
+	} else {
+		srcs = PathsForModuleSrcExcludes(ctx, p.props.Srcs, p.props.Exclude_srcs)
+	}
 	p.srcs = srcs.Strings()
 
 	for _, src := range srcs {
@@ -748,7 +755,9 @@
 		}
 	}
 
-	p.missingDeps = ctx.GetMissingDependencies()
+	if !p.props.Module_handles_missing_deps {
+		p.missingDeps = ctx.GetMissingDependencies()
+	}
 }
 
 type pathForModuleSrcTestCase struct {
@@ -957,6 +966,13 @@
 			exclude_srcs: [":b"],
 			src: ":c",
 		}
+
+		test {
+			name: "bar",
+			srcs: [":d"],
+			exclude_srcs: [":e"],
+			module_handles_missing_deps: true,
+		}
 	`
 
 	mockFS := map[string][]byte{
@@ -974,17 +990,26 @@
 	foo := ctx.ModuleForTests("foo", "").Module().(*pathForModuleSrcTestModule)
 
 	if g, w := foo.missingDeps, []string{"a", "b", "c"}; !reflect.DeepEqual(g, w) {
-		t.Errorf("want missing deps %q, got %q", w, g)
+		t.Errorf("want foo missing deps %q, got %q", w, g)
 	}
 
 	if g, w := foo.srcs, []string{}; !reflect.DeepEqual(g, w) {
-		t.Errorf("want srcs %q, got %q", w, g)
+		t.Errorf("want foo srcs %q, got %q", w, g)
 	}
 
 	if g, w := foo.src, ""; g != w {
-		t.Errorf("want src %q, got %q", w, g)
+		t.Errorf("want foo src %q, got %q", w, g)
 	}
 
+	bar := ctx.ModuleForTests("bar", "").Module().(*pathForModuleSrcTestModule)
+
+	if g, w := bar.missingDeps, []string{"d", "e"}; !reflect.DeepEqual(g, w) {
+		t.Errorf("want bar missing deps %q, got %q", w, g)
+	}
+
+	if g, w := bar.srcs, []string{}; !reflect.DeepEqual(g, w) {
+		t.Errorf("want bar srcs %q, got %q", w, g)
+	}
 }
 
 func ExampleOutputPath_ReplaceExtension() {