Split java device properties into separate struct

Prevent host modules from having fields that only make sense for
device modules.

Test: builds
Change-Id: I20278e029a38fb9a6b75ef3c2cf3c1a97cef2b87
diff --git a/java/java.go b/java/java.go
index 8efff6e..01a05f0 100644
--- a/java/java.go
+++ b/java/java.go
@@ -76,9 +76,6 @@
 	// list of module-specific flags that will be used for javac compiles
 	Javacflags []string `android:"arch_variant"`
 
-	// list of module-specific flags that will be used for dex compiles
-	Dxflags []string `android:"arch_variant"`
-
 	// list of of java libraries that will be in the classpath
 	Java_libs []string `android:"arch_variant"`
 
@@ -88,6 +85,14 @@
 	// manifest file to be included in resulting jar
 	Manifest *string
 
+	// if not blank, run jarjar using the specified rules file
+	Jarjar_rules *string
+}
+
+type compilerDeviceProperties struct {
+	// list of module-specific flags that will be used for dex compiles
+	Dxflags []string `android:"arch_variant"`
+
 	// if not blank, set to the version of the sdk to compile against
 	Sdk_version string
 
@@ -95,9 +100,6 @@
 	// built for testing
 	Dex bool `blueprint:"mutated"`
 
-	// if not blank, run jarjar using the specified rules file
-	Jarjar_rules *string
-
 	// directories to pass to aidl tool
 	Aidl_includes []string
 
@@ -110,7 +112,8 @@
 type Module struct {
 	android.ModuleBase
 
-	properties compilerProperties
+	properties       compilerProperties
+	deviceProperties compilerDeviceProperties
 
 	// output file suitable for inserting into the classpath of another compile
 	classpathFile android.Path
@@ -145,19 +148,20 @@
 
 func (j *Module) BootClasspath(ctx android.BaseContext) string {
 	if ctx.Device() {
-		if j.properties.Sdk_version == "" {
+		switch j.deviceProperties.Sdk_version {
+		case "":
 			return "core-libart"
-		} else if j.properties.Sdk_version == "current" {
+		case "current":
 			// TODO: !TARGET_BUILD_APPS
 			// TODO: export preprocessed framework.aidl from android_stubs_current
 			return "android_stubs_current"
-		} else if j.properties.Sdk_version == "system_current" {
+		case "system_current":
 			return "android_system_stubs_current"
-		} else {
-			return "sdk_v" + j.properties.Sdk_version
+		default:
+			return "sdk_v" + j.deviceProperties.Sdk_version
 		}
 	} else {
-		if j.properties.Dex {
+		if j.deviceProperties.Dex {
 			return "core-libart"
 		} else {
 			return ""
@@ -175,7 +179,7 @@
 		if bootClasspath != "" {
 			deps = append(deps, bootClasspath)
 		}
-		if ctx.Device() && j.properties.Sdk_version == "" {
+		if ctx.Device() && j.deviceProperties.Sdk_version == "" {
 			deps = append(deps, defaultJavaLibraries...)
 		}
 	}
@@ -188,7 +192,7 @@
 func (j *Module) aidlFlags(ctx android.ModuleContext, aidlPreprocess android.OptionalPath,
 	aidlIncludeDirs android.Paths) []string {
 
-	localAidlIncludes := android.PathsForModuleSrc(ctx, j.properties.Aidl_includes)
+	localAidlIncludes := android.PathsForModuleSrc(ctx, j.deviceProperties.Aidl_includes)
 
 	var flags []string
 	if aidlPreprocess.Valid() {
@@ -251,7 +255,7 @@
 
 func (j *Module) compile(ctx android.ModuleContext) {
 
-	j.exportAidlIncludeDirs = android.PathsForModuleSrc(ctx, j.properties.Export_aidl_include_dirs)
+	j.exportAidlIncludeDirs = android.PathsForModuleSrc(ctx, j.deviceProperties.Export_aidl_include_dirs)
 
 	classpath, bootClasspath, classJarSpecs, resourceJarSpecs, aidlPreprocess,
 		aidlIncludeDirs, srcFileLists := j.collectDeps(ctx)
@@ -334,8 +338,8 @@
 	j.classJarSpecs = classJarSpecs
 	j.classpathFile = outputFile
 
-	if j.properties.Dex && len(srcFiles) > 0 {
-		dxFlags := j.properties.Dxflags
+	if j.deviceProperties.Dex && len(srcFiles) > 0 {
+		dxFlags := j.deviceProperties.Dxflags
 		if false /* emma enabled */ {
 			// If you instrument class files that have local variable debug information in
 			// them emma does not correctly maintain the local variable table.
@@ -418,17 +422,18 @@
 func JavaLibraryFactory() (blueprint.Module, []interface{}) {
 	module := &JavaLibrary{}
 
-	module.properties.Dex = true
+	module.deviceProperties.Dex = true
 
-	return android.InitAndroidArchModule(module, android.HostAndDeviceSupported,
-		android.MultilibCommon, &module.Module.properties)
+	return android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon,
+		&module.Module.properties,
+		&module.Module.deviceProperties)
 }
 
 func JavaLibraryHostFactory() (blueprint.Module, []interface{}) {
 	module := &JavaLibrary{}
 
-	return android.InitAndroidArchModule(module, android.HostSupported,
-		android.MultilibCommon, &module.Module.properties)
+	return android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon,
+		&module.Module.properties)
 }
 
 //
@@ -462,17 +467,21 @@
 func JavaBinaryFactory() (blueprint.Module, []interface{}) {
 	module := &JavaBinary{}
 
-	module.properties.Dex = true
+	module.deviceProperties.Dex = true
 
-	return android.InitAndroidArchModule(module, android.HostAndDeviceSupported,
-		android.MultilibCommon, &module.Module.properties, &module.binaryProperties)
+	return android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon,
+		&module.Module.properties,
+		&module.Module.deviceProperties,
+		&module.binaryProperties)
 }
 
 func JavaBinaryHostFactory() (blueprint.Module, []interface{}) {
 	module := &JavaBinary{}
 
-	return android.InitAndroidArchModule(module, android.HostSupported,
-		android.MultilibCommon, &module.Module.properties, &module.binaryProperties)
+	return android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon,
+		&module.Module.properties,
+		&module.Module.deviceProperties,
+		&module.binaryProperties)
 }
 
 //