Allow java binary wrapper files to reference filegroups

Also allow commands with no tools for the case when standard
shell utilities are used to munge an input file.

Test: m checkbuild
Change-Id: Ie061e90cafe1a0a0db004a89e9a17fb48709cb03
diff --git a/java/java.go b/java/java.go
index 3663253..c2b039e 100644
--- a/java/java.go
+++ b/java/java.go
@@ -1031,7 +1031,7 @@
 
 	isWrapperVariant bool
 
-	wrapperFile android.SourcePath
+	wrapperFile android.Path
 	binaryFile  android.OutputPath
 }
 
@@ -1048,7 +1048,13 @@
 		j.isWrapperVariant = true
 
 		if String(j.binaryProperties.Wrapper) != "" {
-			j.wrapperFile = android.PathForModuleSrc(ctx, String(j.binaryProperties.Wrapper)).SourcePath
+			wrapperSrcs := ctx.ExpandSources([]string{String(j.binaryProperties.Wrapper)}, nil)
+			if len(wrapperSrcs) == 1 {
+				j.wrapperFile = wrapperSrcs[0]
+			} else {
+				ctx.PropertyErrorf("wrapper", "module providing wrapper must produce exactly one file")
+				return
+			}
 		} else {
 			j.wrapperFile = android.PathForSource(ctx, "build/soong/scripts/jar-wrapper.sh")
 		}
@@ -1065,6 +1071,8 @@
 func (j *Binary) DepsMutator(ctx android.BottomUpMutatorContext) {
 	if ctx.Arch().ArchType == android.Common {
 		j.deps(ctx)
+	} else {
+		android.ExtractSourcesDeps(ctx, []string{String(j.binaryProperties.Wrapper)})
 	}
 }