diff --git a/cc/cc.go b/cc/cc.go
index 051bbaf..1bef029 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -151,6 +151,117 @@
 	Clang     bool
 }
 
+// Properties used to compile all C or C++ modules
+type CCBaseProperties struct {
+	// list of source files used to compile the C/C++ module.  May be .c, .cpp, or .S files.
+	Srcs []string `android:"arch_variant,arch_subtract"`
+
+	// list of module-specific flags that will be used for C and C++ compiles.
+	Cflags []string `android:"arch_variant"`
+
+	// list of module-specific flags that will be used for C++ compiles
+	Cppflags []string `android:"arch_variant"`
+
+	// list of module-specific flags that will be used for C compiles
+	Conlyflags []string `android:"arch_variant"`
+
+	// list of module-specific flags that will be used for .S compiles
+	Asflags []string `android:"arch_variant"`
+
+	// list of module-specific flags that will be used for .y and .yy compiles
+	Yaccflags []string
+
+	// list of module-specific flags that will be used for all link steps
+	Ldflags []string `android:"arch_variant"`
+
+	// the instruction set architecture to use to compile the C/C++
+	// module.
+	Instruction_set string `android:"arch_variant"`
+
+	// list of directories relative to the root of the source tree that will
+	// be added to the include path using -I.
+	// If possible, don't use this.  If adding paths from the current directory use
+	// local_include_dirs, if adding paths from other modules use export_include_dirs in
+	// that module.
+	Include_dirs []string `android:"arch_variant"`
+
+	// list of directories relative to the Blueprints file that will
+	// be added to the include path using -I
+	Local_include_dirs []string `android:"arch_variant"`
+
+	// list of directories relative to the Blueprints file that will
+	// be added to the include path using -I for any module that links against this module
+	Export_include_dirs []string `android:"arch_variant"`
+
+	// list of module-specific flags that will be used for C and C++ compiles when
+	// compiling with clang
+	Clang_cflags []string `android:"arch_variant"`
+
+	// list of module-specific flags that will be used for .S compiles when
+	// compiling with clang
+	Clang_asflags []string `android:"arch_variant"`
+
+	// list of system libraries that will be dynamically linked to
+	// shared library and executable modules.  If unset, generally defaults to libc
+	// and libm.  Set to [] to prevent linking against libc and libm.
+	System_shared_libs []string
+
+	// list of modules whose object files should be linked into this module
+	// in their entirety.  For static library modules, all of the .o files from the intermediate
+	// directory of the dependency will be linked into this modules .a file.  For a shared library,
+	// the dependency's .a file will be linked into this module using -Wl,--whole-archive.
+	Whole_static_libs []string `android:"arch_variant"`
+
+	// list of modules that should be statically linked into this module.
+	Static_libs []string `android:"arch_variant"`
+
+	// list of modules that should be dynamically linked into this module.
+	Shared_libs []string `android:"arch_variant"`
+
+	// allow the module to contain undefined symbols.  By default,
+	// modules cannot contain undefined symbols that are not satisified by their immediate
+	// dependencies.  Set this flag to true to remove --no-undefined from the linker flags.
+	// This flag should only be necessary for compiling low-level libraries like libc.
+	Allow_undefined_symbols bool
+
+	// don't link in crt_begin and crt_end.  This flag should only be necessary for
+	// compiling crt or libc.
+	Nocrt bool `android:"arch_variant"`
+
+	// don't insert default compiler flags into asflags, cflags,
+	// cppflags, conlyflags, ldflags, or include_dirs
+	No_default_compiler_flags bool
+
+	// compile module with clang instead of gcc
+	Clang bool `android:"arch_variant"`
+
+	// pass -frtti instead of -fno-rtti
+	Rtti bool
+
+	// -l arguments to pass to linker for host-provided shared libraries
+	Host_ldlibs []string `android:"arch_variant"`
+
+	// select the STL library to use.  Possible values are "libc++", "libc++_static",
+	// "stlport", "stlport_static", "ndk", "libstdc++", or "none".  Leave blank to select the
+	// default
+	Stl string
+
+	// Set for combined shared/static libraries to prevent compiling object files a second time
+	SkipCompileObjs bool `blueprint:"mutated"`
+
+	Debug, Release struct {
+		// list of module-specific flags that will be used for C and C++ compiles in debug or
+		// release builds
+		Cflags []string `android:"arch_variant"`
+	} `android:"arch_variant"`
+
+	// Minimum sdk version supported when compiling against the ndk
+	Sdk_version string
+
+	// install to a subdirectory of the default install path for the module
+	Relative_install_path string
+}
+
 // CCBase contains the properties and members used by all C/C++ module types, and implements
 // the blueprint.Module interface.  It expects to be embedded into an outer specialization struct,
 // and uses a ccModuleType interface to that struct to create the build steps.
@@ -158,117 +269,7 @@
 	common.AndroidModuleBase
 	module CCModuleType
 
-	// Properties used to compile all C or C++ modules
-	Properties struct {
-		// srcs: list of source files used to compile the C/C++ module.  May be .c, .cpp, or .S files.
-		Srcs []string `android:"arch_variant,arch_subtract"`
-
-		// cflags: list of module-specific flags that will be used for C and C++ compiles.
-		Cflags []string `android:"arch_variant"`
-
-		// cppflags: list of module-specific flags that will be used for C++ compiles
-		Cppflags []string `android:"arch_variant"`
-
-		// conlyflags: list of module-specific flags that will be used for C compiles
-		Conlyflags []string `android:"arch_variant"`
-
-		// asflags: list of module-specific flags that will be used for .S compiles
-		Asflags []string `android:"arch_variant"`
-
-		// yaccflags: list of module-specific flags that will be used for .y and .yy compiles
-		Yaccflags []string
-
-		// ldflags: list of module-specific flags that will be used for all link steps
-		Ldflags []string `android:"arch_variant"`
-
-		// instruction_set: the instruction set architecture to use to compile the C/C++
-		// module.
-		Instruction_set string `android:"arch_variant"`
-
-		// include_dirs: list of directories relative to the root of the source tree that will
-		// be added to the include path using -I.
-		// If possible, don't use this.  If adding paths from the current directory use
-		// local_include_dirs, if adding paths from other modules use export_include_dirs in
-		// that module.
-		Include_dirs []string `android:"arch_variant"`
-
-		// local_include_dirs: list of directories relative to the Blueprints file that will
-		// be added to the include path using -I
-		Local_include_dirs []string `android:"arch_variant"`
-
-		// export_include_dirs: list of directories relative to the Blueprints file that will
-		// be added to the include path using -I for any module that links against this module
-		Export_include_dirs []string `android:"arch_variant"`
-
-		// clang_cflags: list of module-specific flags that will be used for C and C++ compiles when
-		// compiling with clang
-		Clang_cflags []string `android:"arch_variant"`
-
-		// clang_asflags: list of module-specific flags that will be used for .S compiles when
-		// compiling with clang
-		Clang_asflags []string `android:"arch_variant"`
-
-		// system_shared_libs: list of system libraries that will be dynamically linked to
-		// shared library and executable modules.  If unset, generally defaults to libc
-		// and libm.  Set to [] to prevent linking against libc and libm.
-		System_shared_libs []string
-
-		// whole_static_libs: list of modules whose object files should be linked into this module
-		// in their entirety.  For static library modules, all of the .o files from the intermediate
-		// directory of the dependency will be linked into this modules .a file.  For a shared library,
-		// the dependency's .a file will be linked into this module using -Wl,--whole-archive.
-		Whole_static_libs []string `android:"arch_variant"`
-
-		// static_libs: list of modules that should be statically linked into this module.
-		Static_libs []string `android:"arch_variant"`
-
-		// shared_libs: list of modules that should be dynamically linked into this module.
-		Shared_libs []string `android:"arch_variant"`
-
-		// allow_undefined_symbols: allow the module to contain undefined symbols.  By default,
-		// modules cannot contain undefined symbols that are not satisified by their immediate
-		// dependencies.  Set this flag to true to remove --no-undefined from the linker flags.
-		// This flag should only be necessary for compiling low-level libraries like libc.
-		Allow_undefined_symbols bool
-
-		// nocrt: don't link in crt_begin and crt_end.  This flag should only be necessary for
-		// compiling crt or libc.
-		Nocrt bool `android:"arch_variant"`
-
-		// no_default_compiler_flags: don't insert default compiler flags into asflags, cflags,
-		// cppflags, conlyflags, ldflags, or include_dirs
-		No_default_compiler_flags bool
-
-		// clang: compile module with clang instead of gcc
-		Clang bool `android:"arch_variant"`
-
-		// rtti: pass -frtti instead of -fno-rtti
-		Rtti bool
-
-		// host_ldlibs: -l arguments to pass to linker for host-provided shared libraries
-		Host_ldlibs []string `android:"arch_variant"`
-
-		// stl: select the STL library to use.  Possible values are "libc++", "libc++_static",
-		// "stlport", "stlport_static", "ndk", "libstdc++", or "none".  Leave blank to select the
-		// default
-		Stl string
-
-		// Set for combined shared/static libraries to prevent compiling object files a second time
-		SkipCompileObjs bool `blueprint:"mutated"`
-
-		Debug struct {
-			Cflags []string `android:"arch_variant"`
-		} `android:"arch_variant"`
-		Release struct {
-			Cflags []string `android:"arch_variant"`
-		} `android:"arch_variant"`
-
-		// Minimum sdk version supported when compiling against the ndk
-		Sdk_version string
-
-		// relative_install_path: install to a subdirectory of the default install path for the module
-		Relative_install_path string
-	}
+	Properties CCBaseProperties
 
 	unused struct {
 		Asan            bool
@@ -676,15 +677,16 @@
 	return depPaths
 }
 
+type ccLinkedProperties struct {
+	VariantIsShared       bool `blueprint:"mutated"`
+	VariantIsStatic       bool `blueprint:"mutated"`
+	VariantIsStaticBinary bool `blueprint:"mutated"`
+}
+
 // CCLinked contains the properties and members used by libraries and executables
 type CCLinked struct {
 	CCBase
-
-	dynamicProperties struct {
-		VariantIsShared       bool `blueprint:"mutated"`
-		VariantIsStatic       bool `blueprint:"mutated"`
-		VariantIsStaticBinary bool `blueprint:"mutated"`
-	}
+	dynamicProperties ccLinkedProperties
 }
 
 func newCCDynamic(dynamic *CCLinked, module CCModuleType, hod common.HostOrDeviceSupported,
@@ -922,6 +924,25 @@
 // Combined static+shared libraries
 //
 
+type CCLibraryProperties struct {
+	BuildStatic bool `blueprint:"mutated"`
+	BuildShared bool `blueprint:"mutated"`
+	Static      struct {
+		Srcs              []string `android:"arch_variant"`
+		Cflags            []string `android:"arch_variant"`
+		Whole_static_libs []string `android:"arch_variant"`
+		Static_libs       []string `android:"arch_variant"`
+		Shared_libs       []string `android:"arch_variant"`
+	} `android:"arch_variant"`
+	Shared struct {
+		Srcs              []string `android:"arch_variant"`
+		Cflags            []string `android:"arch_variant"`
+		Whole_static_libs []string `android:"arch_variant"`
+		Static_libs       []string `android:"arch_variant"`
+		Shared_libs       []string `android:"arch_variant"`
+	} `android:"arch_variant"`
+}
+
 type CCLibrary struct {
 	CCLinked
 
@@ -931,24 +952,7 @@
 	exportFlags   []string
 	out           string
 
-	LibraryProperties struct {
-		BuildStatic bool `blueprint:"mutated"`
-		BuildShared bool `blueprint:"mutated"`
-		Static      struct {
-			Srcs              []string `android:"arch_variant"`
-			Cflags            []string `android:"arch_variant"`
-			Whole_static_libs []string `android:"arch_variant"`
-			Static_libs       []string `android:"arch_variant"`
-			Shared_libs       []string `android:"arch_variant"`
-		} `android:"arch_variant"`
-		Shared struct {
-			Srcs              []string `android:"arch_variant"`
-			Cflags            []string `android:"arch_variant"`
-			Whole_static_libs []string `android:"arch_variant"`
-			Static_libs       []string `android:"arch_variant"`
-			Shared_libs       []string `android:"arch_variant"`
-		} `android:"arch_variant"`
-	}
+	LibraryProperties CCLibraryProperties
 }
 
 func (c *CCLibrary) buildStatic() bool {
@@ -1233,23 +1237,25 @@
 // Executables
 //
 
+type CCBinaryProperties struct {
+	// compile executable with -static
+	Static_executable bool
+
+	// set the name of the output
+	Stem string `android:"arch_variant"`
+
+	// append to the name of the output
+	Suffix string `android:"arch_variant"`
+
+	// if set, add an extra objcopy --prefix-symbols= step
+	Prefix_symbols string
+}
+
 type CCBinary struct {
 	CCLinked
 	out              string
 	installFile      string
-	BinaryProperties struct {
-		// static_executable: compile executable with -static
-		Static_executable bool
-
-		// stem: set the name of the output
-		Stem string `android:"arch_variant"`
-
-		// suffix: append to the name of the output
-		Suffix string `android:"arch_variant"`
-
-		// prefix_symbols: if set, add an extra objcopy --prefix-symbols= step
-		Prefix_symbols string
-	}
+	BinaryProperties CCBinaryProperties
 }
 
 func (c *CCBinary) buildStatic() bool {
@@ -1402,14 +1408,16 @@
 	return ""
 }
 
+type CCTestProperties struct {
+	// Create a separate test for each source file.  Useful when there is
+	// global state that can not be torn down and reset between each test suite.
+	Test_per_src bool
+}
+
 type CCTest struct {
 	CCBinary
 
-	TestProperties struct {
-		// test_per_src: Create a separate test for each source file.  Useful when there is
-		// global state that can not be torn down and reset between each test suite.
-		Test_per_src bool
-	}
+	TestProperties CCTestProperties
 }
 
 func (c *CCTest) flags(ctx common.AndroidModuleContext, flags CCFlags) CCFlags {
diff --git a/common/arch.go b/common/arch.go
index 4ea0f26..ba1f671 100644
--- a/common/arch.go
+++ b/common/arch.go
@@ -92,38 +92,68 @@
     },
 }
 */
+
 type archProperties struct {
+	// Properties to vary by target architecture
 	Arch struct {
-		Arm    interface{}
-		Arm64  interface{}
-		Mips   interface{}
-		Mips64 interface{}
-		X86    interface{}
-		X86_64 interface{}
+		// Properties for module variants being built to run on arm (host or device)
+		Arm interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on arm64 (host or device)
+		Arm64 interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on mips (host or device)
+		Mips interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on mips64 (host or device)
+		Mips64 interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on x86 (host or device)
+		X86 interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on x86_64 (host or device)
+		X86_64 interface{} `blueprint:"filter(android:\"arch_variant\")"`
 	}
+	// Properties to vary by 32-bit or 64-bit
 	Multilib struct {
-		Lib32 interface{}
-		Lib64 interface{}
+		// Properties for module variants being built to run on 32-bit devices
+		Lib32 interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on 64-bit devices
+		Lib64 interface{} `blueprint:"filter(android:\"arch_variant\")"`
 	}
+	// Properties to vary by build target (host or device, os, os+archictecture)
 	Target struct {
-		Host           interface{}
-		Android        interface{}
-		Android_arm    interface{}
-		Android_arm64  interface{}
-		Android_mips   interface{}
-		Android_mips64 interface{}
-		Android_x86    interface{}
-		Android_x86_64 interface{}
-		Android64      interface{}
-		Android32      interface{}
-		Linux          interface{}
-		Linux_x86      interface{}
-		Linux_x86_64   interface{}
-		Darwin         interface{}
-		Darwin_x86     interface{}
-		Darwin_x86_64  interface{}
-		Windows        interface{}
-		Not_windows    interface{}
+		// Properties for module variants being built to run on the host
+		Host interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on the device
+		Android interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on arm devices
+		Android_arm interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on arm64 devices
+		Android_arm64 interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on mips devices
+		Android_mips interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on mips64 devices
+		Android_mips64 interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on x86 devices
+		Android_x86 interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on x86_64 devices
+		Android_x86_64 interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on devices that support 64-bit
+		Android64 interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on devices that do not support 64-bit
+		Android32 interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on linux hosts
+		Linux interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on linux x86 hosts
+		Linux_x86 interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on linux x86_64 hosts
+		Linux_x86_64 interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on darwin hosts
+		Darwin interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on darwin x86 hosts
+		Darwin_x86 interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on darwin x86_64 hosts
+		Darwin_x86_64 interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on windows hosts
+		Windows interface{} `blueprint:"filter(android:\"arch_variant\")"`
+		// Properties for module variants being built to run on linux or darwin hosts
+		Not_windows interface{} `blueprint:"filter(android:\"arch_variant\")"`
 	}
 }
 
diff --git a/common/module.go b/common/module.go
index c39b55a..77e0295 100644
--- a/common/module.go
+++ b/common/module.go
@@ -85,10 +85,10 @@
 	Deps []string
 	Tags []string
 
-	// disabled: don't emit any build rules for this module
+	// don't emit any build rules for this module
 	Disabled bool `android:"arch_variant"`
 
-	// multilib: control whether this module compiles for 32-bit, 64-bit, or both.  Possible values
+	// control whether this module compiles for 32-bit, 64-bit, or both.  Possible values
 	// are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
 	// architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
 	// platform
diff --git a/genrule/genrule.go b/genrule/genrule.go
index ea30e3d..b393831 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -40,21 +40,23 @@
 	HostToolPath() string
 }
 
+type generatorProperties struct {
+	// command to run on one or more input files.  Available variables for substitution:
+	// $in: one or more input files
+	// $out: a single output file
+	// $srcDir: the root directory of the source tree
+	// The host bin directory will be in the path
+	Cmd string
+
+	// name of the module (if any) that produces the host executable.   Leave empty for
+	// prebuilts or scripts that do not need a module to build them.
+	Tool string
+}
+
 type generator struct {
 	common.AndroidModuleBase
 
-	properties struct {
-		// cmd: command to run on one or more input files.  Available variables for substitution:
-		// $in: one or more input files
-		// $out: a single output file
-		// $srcDir: the root directory of the source tree
-		// The host bin directory will be in the path
-		Cmd string
-
-		// tool: name of the module (if any) that produces the host executable.   Leave empty for
-		// prebuilts or scripts that do not need a module to build them.
-		Tool string
-	}
+	properties generatorProperties
 
 	tasks taskFunc
 
@@ -146,10 +148,10 @@
 }
 
 type genSrcsProperties struct {
-	// srcs: list of input files
+	// list of input files
 	Srcs []string
 
-	// output_extension: extension that will be substituted for each output file
+	// extension that will be substituted for each output file
 	Output_extension string
 }
 
@@ -169,9 +171,9 @@
 }
 
 type genRuleProperties struct {
-	// srcs: list of input files
+	// list of input files
 	Srcs []string
 
-	// out: name of the output file that will be generated
+	// name of the output file that will be generated
 	Out string
 }
diff --git a/java/app.go b/java/app.go
index 5f153cf..e6851b5 100644
--- a/java/app.go
+++ b/java/app.go
@@ -31,35 +31,37 @@
 // AndroidManifest.xml merging
 // package splits
 
+type androidAppProperties struct {
+	// path to a certificate, or the name of a certificate in the default
+	// certificate directory, or blank to use the default product certificate
+	Certificate string
+
+	// paths to extra certificates to sign the apk with
+	Additional_certificates []string
+
+	// If set, create package-export.apk, which other packages can
+	// use to get PRODUCT-agnostic resource data like IDs and type definitions.
+	Export_package_resources bool
+
+	// flags passed to aapt when creating the apk
+	Aaptflags []string
+
+	// list of resource labels to generate individual resource packages
+	Package_splits []string
+
+	// list of directories relative to the Blueprints file containing assets.
+	// Defaults to "assets"
+	Asset_dirs []string
+
+	// list of directories relative to the Blueprints file containing
+	// Java resources
+	Android_resource_dirs []string
+}
+
 type AndroidApp struct {
 	javaBase
 
-	appProperties struct {
-		// certificate: path to a certificate, or the name of a certificate in the default
-		// certificate directory, or blank to use the default product certificate
-		Certificate string
-
-		// additional_certificates: paths to extra certificates to sign the apk with
-		Additional_certificates []string
-
-		// export_package_resources: If set, create package-export.apk, which other packages can
-		// use to get PRODUCT-agnostic resource data like IDs and type definitions.
-		Export_package_resources bool
-
-		// aaptflags: flags passed to aapt when creating the apk
-		Aaptflags []string
-
-		// package_splits: list of resource labels to generate individual resource packages
-		Package_splits []string
-
-		// asset_dirs: list of directories relative to the Blueprints file containing assets.
-		// Defaults to "assets"
-		Asset_dirs []string
-
-		// android_resource_dirs: list of directories relative to the Blueprints file containing
-		// Java resources
-		Android_resource_dirs []string
-	}
+	appProperties androidAppProperties
 
 	aaptJavaFileList string
 	exportPackage    string
diff --git a/java/java.go b/java/java.go
index 9787d60..a16d1d6 100644
--- a/java/java.go
+++ b/java/java.go
@@ -44,59 +44,61 @@
 // DroidDoc
 // Findbugs
 
+type javaBaseProperties struct {
+	// list of source files used to compile the Java module.  May be .java, .logtags, .proto,
+	// or .aidl files.
+	Srcs []string `android:"arch_variant,arch_subtract"`
+
+	// list of directories containing Java resources
+	Java_resource_dirs []string `android:"arch_variant"`
+
+	// don't build against the default libraries (core-libart, core-junit,
+	// ext, and framework for device targets)
+	No_standard_libraries bool
+
+	// 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 jack compiles
+	Jack_flags []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"`
+
+	// list of java libraries that will be compiled into the resulting jar
+	Java_static_libs []string `android:"arch_variant"`
+
+	// manifest file to be included in resulting jar
+	Manifest string
+
+	// if not blank, set to the version of the sdk to compile against
+	Sdk_version string
+
+	// Set for device java libraries, and for host versions of device java libraries
+	// 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
+
+	// directories that should be added as include directories
+	// for any aidl sources of modules that depend on this module
+	Export_aidl_include_dirs []string
+}
+
 // javaBase contains the properties and members used by all java module types, and implements
 // the blueprint.Module interface.
 type javaBase struct {
 	common.AndroidModuleBase
 	module JavaModuleType
 
-	properties struct {
-		// srcs: list of source files used to compile the Java module.  May be .java, .logtags, .proto,
-		// or .aidl files.
-		Srcs []string `android:"arch_variant,arch_subtract"`
-
-		// java_resource_dirs: list of directories containing Java resources
-		Java_resource_dirs []string `android:"arch_variant"`
-
-		// no_standard_libraries: don't build against the default libraries (core-libart, core-junit,
-		// ext, and framework for device targets)
-		No_standard_libraries bool
-
-		// javacflags: list of module-specific flags that will be used for javac compiles
-		Javacflags []string `android:"arch_variant"`
-
-		// jack_flags: list of module-specific flags that will be used for jack compiles
-		Jack_flags []string `android:"arch_variant"`
-
-		// dxflags: list of module-specific flags that will be used for dex compiles
-		Dxflags []string `android:"arch_variant"`
-
-		// java_libs: list of of java libraries that will be in the classpath
-		Java_libs []string `android:"arch_variant"`
-
-		// java_static_libs: list of java libraries that will be compiled into the resulting jar
-		Java_static_libs []string `android:"arch_variant"`
-
-		// manifest: manifest file to be included in resulting jar
-		Manifest string
-
-		// sdk_version: if not blank, set to the version of the sdk to compile against
-		Sdk_version string
-
-		// Set for device java libraries, and for host versions of device java libraries
-		// built for testing
-		Dex bool `blueprint:"mutated"`
-
-		// jarjar_rules: if not blank, run jarjar using the specified rules file
-		Jarjar_rules string
-
-		// aidl_includes: directories to pass to aidl tool
-		Aidl_includes []string
-
-		// aidl_export_include_dirs: directories that should be added as include directories
-		// for any aidl sources of modules that depend on this module
-		Export_aidl_include_dirs []string
-	}
+	properties javaBaseProperties
 
 	// output file suitable for inserting into the classpath of another compile
 	classpathFile string
@@ -442,13 +444,15 @@
 // Java Binaries (.jar file plus wrapper script)
 //
 
+type javaBinaryProperties struct {
+	// installable script to execute the resulting jar
+	Wrapper string
+}
+
 type JavaBinary struct {
 	JavaLibrary
 
-	binaryProperties struct {
-		// wrapper: installable script to execute the resulting jar
-		Wrapper string
-	}
+	binaryProperties javaBinaryProperties
 }
 
 func (j *JavaBinary) GenerateJavaBuildActions(ctx common.AndroidModuleContext) {
@@ -478,12 +482,14 @@
 // Java prebuilts
 //
 
+type javaPrebuiltProperties struct {
+	Srcs []string
+}
+
 type JavaPrebuilt struct {
 	common.AndroidModuleBase
 
-	properties struct {
-		Srcs []string
-	}
+	properties javaPrebuiltProperties
 
 	classpathFile                   string
 	classJarSpecs, resourceJarSpecs []jarSpec
@@ -540,12 +546,14 @@
 
 var _ sdkDependency = (*sdkPrebuilt)(nil)
 
+type sdkPrebuiltProperties struct {
+	Aidl_preprocessed string
+}
+
 type sdkPrebuilt struct {
 	JavaPrebuilt
 
-	sdkProperties struct {
-		Aidl_preprocessed string
-	}
+	sdkProperties sdkPrebuiltProperties
 
 	aidlPreprocessed string
 }
