Miscellaneous fixes for java compiling

Remove java out directory before compiling to avoid incremental compile
issues.  Move the rspfile out of the out directory so it doesn't get
deleted.  cc->javac in the javac rule.  Don't call javac if there
are no source files.

Change-Id: I0bb06c214da54a587bd9e7c9d17caaf0ed1e595e
diff --git a/java/builder.go b/java/builder.go
index 02d65aa..d939e6a 100644
--- a/java/builder.go
+++ b/java/builder.go
@@ -37,10 +37,11 @@
 	// this, all java rules write into separate directories and then a post-processing step lists
 	// the files in the the directory into a list file that later rules depend on (and sometimes
 	// read from directly using @<listfile>)
-	cc = pctx.StaticRule("javac",
+	javac = pctx.StaticRule("javac",
 		blueprint.RuleParams{
-			Command: `$javacCmd -encoding UTF-8 $javacFlags $bootClasspath $classpath ` +
-				`-extdirs "" -d $outDir @$out.rsp || ( rm -rf $outDir; exit 41 ) && ` +
+			Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
+				`$javacCmd -encoding UTF-8 $javacFlags $bootClasspath $classpath ` +
+				`-extdirs "" -d $outDir @$out.rsp || ( rm -rf "$outDir"; exit 41 ) && ` +
 				`find $outDir -name "*.class" > $out`,
 			Rspfile:        "$out.rsp",
 			RspfileContent: "$in",
@@ -112,10 +113,10 @@
 	flags javaBuilderFlags, deps []string) jarSpec {
 
 	classDir := filepath.Join(common.ModuleOutDir(ctx), "classes")
-	classFileList := filepath.Join(classDir, "classes.list")
+	classFileList := filepath.Join(common.ModuleOutDir(ctx), "classes.list")
 
 	ctx.Build(pctx, blueprint.BuildParams{
-		Rule:      cc,
+		Rule:      javac,
 		Outputs:   []string{classFileList},
 		Inputs:    srcFiles,
 		Implicits: deps,
diff --git a/java/java.go b/java/java.go
index ca3a4c7..07bbc11 100644
--- a/java/java.go
+++ b/java/java.go
@@ -257,14 +257,17 @@
 
 	srcFiles = genSources(ctx, srcFiles, flags)
 
-	// Compile java sources into .class files
-	classes := TransformJavaToClasses(ctx, srcFiles, flags, javacDeps)
-	if ctx.Failed() {
-		return
+	if len(srcFiles) > 0 {
+		// Compile java sources into .class files
+		classes := TransformJavaToClasses(ctx, srcFiles, flags, javacDeps)
+		if ctx.Failed() {
+			return
+		}
+
+		classJarSpecs = append([]jarSpec{classes}, classJarSpecs...)
 	}
 
 	resourceJarSpecs = append(ResourceDirsToJarSpecs(ctx, j.properties.Resource_dirs), resourceJarSpecs...)
-	classJarSpecs = append([]jarSpec{classes}, classJarSpecs...)
 
 	manifest := j.properties.Manifest
 	if manifest != "" {
@@ -294,7 +297,7 @@
 
 	j.classpathFile = outputFile
 
-	if j.properties.Dex {
+	if j.properties.Dex && len(srcFiles) > 0 {
 		dxFlags := j.properties.Dxflags
 		if false /* emma enabled */ {
 			// If you instrument class files that have local variable debug information in