Add support for java_defaults modules

Test: java_test.go
Change-Id: I6dba1671c7eb019183af94bb7b10810296740101
diff --git a/java/java_test.go b/java/java_test.go
index bd6451c..6ebaa34 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -56,6 +56,8 @@
 	ctx.RegisterModuleType("android_app", android.ModuleFactoryAdaptor(AndroidAppFactory))
 	ctx.RegisterModuleType("java_library", android.ModuleFactoryAdaptor(JavaLibraryFactory))
 	ctx.RegisterModuleType("java_prebuilt_library", android.ModuleFactoryAdaptor(JavaPrebuiltFactory))
+	ctx.RegisterModuleType("java_defaults", android.ModuleFactoryAdaptor(defaultsFactory))
+	ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
 	ctx.Register()
 
 	extraModules := []string{"core-libart", "frameworks", "sdk_v14"}
@@ -230,6 +232,49 @@
 	}
 }
 
+func TestDefaults(t *testing.T) {
+	ctx := testJava(t, `
+		java_defaults {
+			name: "defaults",
+			srcs: ["a.java"],
+			libs: ["bar"],
+			static_libs: ["baz"],
+		}
+
+		java_library {
+			name: "foo",
+			defaults: ["defaults"],
+		}
+
+		java_library {
+			name: "bar",
+			srcs: ["b.java"],
+		}
+
+		java_library {
+			name: "baz",
+			srcs: ["c.java"],
+		}
+		`)
+
+	javac := ctx.ModuleForTests("foo", "").Rule("javac")
+	jar := ctx.ModuleForTests("foo", "").Rule("jar")
+
+	if len(javac.Inputs) != 1 || javac.Inputs[0].String() != "a.java" {
+		t.Errorf(`foo inputs %v != ["a.java"]`, javac.Inputs)
+	}
+
+	bar := filepath.Join(buildDir, ".intermediates", "bar", "classes-full-debug.jar")
+	if !strings.Contains(javac.Args["classpath"], bar) {
+		t.Errorf("foo classpath %v does not contain %q", javac.Args["classpath"], bar)
+	}
+
+	baz := filepath.Join(buildDir, ".intermediates", "baz", "classes.list")
+	if !strings.Contains(jar.Args["jarArgs"], baz) {
+		t.Errorf("foo jarArgs %v does not contain %q", jar.Args["jarArgs"], baz)
+	}
+}
+
 func fail(t *testing.T, errs []error) {
 	if len(errs) > 0 {
 		for _, err := range errs {