Allow java manifest property to reference filegroups

Also factor out ExtractSourceDep and ExpandSource.

Test: m checkbuild
Change-Id: Ibc253514bc3109d84ec388a05c66b8108af5d6ab
diff --git a/java/java.go b/java/java.go
index e9f8331..d9075b1 100644
--- a/java/java.go
+++ b/java/java.go
@@ -390,6 +390,7 @@
 
 	android.ExtractSourcesDeps(ctx, j.properties.Srcs)
 	android.ExtractSourcesDeps(ctx, j.properties.Java_resources)
+	android.ExtractSourceDeps(ctx, j.properties.Manifest)
 
 	if j.hasSrcExt(".proto") {
 		protoDeps(ctx, &j.protoProperties)
@@ -764,7 +765,10 @@
 	// static classpath jars have the resources in them, so the resource jars aren't necessary here
 	jars = append(jars, deps.staticJars...)
 
-	manifest := android.OptionalPathForModuleSrc(ctx, j.properties.Manifest)
+	var manifest android.OptionalPath
+	if j.properties.Manifest != nil {
+		manifest = android.OptionalPathForPath(ctx.ExpandSource(*j.properties.Manifest, "manifest"))
+	}
 
 	// Combine the classes built from sources, any manifests, and any static libraries into
 	// classes.jar. If there is only one input jar this step will be skipped.
@@ -1088,14 +1092,8 @@
 		// Handle the binary wrapper
 		j.isWrapperVariant = true
 
-		if String(j.binaryProperties.Wrapper) != "" {
-			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
-			}
+		if j.binaryProperties.Wrapper != nil {
+			j.wrapperFile = ctx.ExpandSource(*j.binaryProperties.Wrapper, "wrapper")
 		} else {
 			j.wrapperFile = android.PathForSource(ctx, "build/soong/scripts/jar-wrapper.sh")
 		}
@@ -1113,7 +1111,7 @@
 	if ctx.Arch().ArchType == android.Common {
 		j.deps(ctx)
 	} else {
-		android.ExtractSourcesDeps(ctx, []string{String(j.binaryProperties.Wrapper)})
+		android.ExtractSourceDeps(ctx, j.binaryProperties.Wrapper)
 	}
 }