summaryrefslogtreecommitdiff
path: root/java/java.go
diff options
context:
space:
mode:
authorPaul Duffin <paulduffin@google.com>2019-12-13 11:22:16 +0000
committerPaul Duffin <paulduffin@google.com>2019-12-13 20:07:33 +0000
commit255f18e584d8638aa48cd983aa72ce991353d993 (patch)
tree6fd3f111a6f6b40124ead5fbbcf19a4e68bd47ac /java/java.go
parent2f6bc09feed6397f313a842df6e8f3574e1e09a8 (diff)
Decouple addition of new sdk member types from sdk code
Previously, adding a new SdkMemberType would require adding a new sdkMemberListProperty instance to the sdkMemberListProperties as well as adding a new property into the sdkProperties struct. They are potential sources of conflict and couple the sdk code with all the packages that add members to it. This change switched to a registration model that allows each package to register its sdk member types decoupling them from the sdk code. Adds an SdkPropertyName() method to SdkMemberType that specifies the name of the property to use in the sdk/sdk_snapshot. Also provides an SdkMemberTypeBase struct to be used by providers of SdkMemberType implementations. SdkMemberType instances are registered using the RegisterSdkMemberType() func which sorts the registered instances by their SdkPropertyName() to ensure the behavior is consistent and not affected by order of registration. When creating a new sdk module a dynamicSdkMemberTypes instance is created that contains the following: * A properties struct is created dynamically that contains a field for each registered SdkMemberType, corresponding to that type's SdkPropertyName(). * A list of sdkMemberListProperty instances is also created, one for each registered SdkMemberType. The dynamicSdkMemberTypes instance is cached using a key that uniquely identifies the set of registered types just in case new types are registered after one has been created, e.g. by tests. Bug: 142918168 Test: m checkbuild Change-Id: I4bf2bf56a2a49025aa41454048bc1e8ccc6baca2
Diffstat (limited to 'java/java.go')
-rw-r--r--java/java.go22
1 files changed, 18 insertions, 4 deletions
diff --git a/java/java.go b/java/java.go
index f58e5ba24..d8db5f8a4 100644
--- a/java/java.go
+++ b/java/java.go
@@ -52,6 +52,23 @@ func init() {
android.RegisterSingletonType("logtags", LogtagsSingleton)
android.RegisterSingletonType("kythe_java_extract", kytheExtractJavaFactory)
+
+ // Register sdk member types.
+ android.RegisterSdkMemberType(&headerLibrarySdkMemberType{
+ librarySdkMemberType{
+ android.SdkMemberTypeBase{
+ PropertyName: "java_header_libs",
+ },
+ },
+ })
+
+ android.RegisterSdkMemberType(&implLibrarySdkMemberType{
+ librarySdkMemberType{
+ android.SdkMemberTypeBase{
+ PropertyName: "java_libs",
+ },
+ },
+ })
}
func (j *Module) checkSdkVersion(ctx android.ModuleContext) {
@@ -1721,6 +1738,7 @@ func (j *Library) sdkSnapshotFilePathForJar() string {
}
type librarySdkMemberType struct {
+ android.SdkMemberTypeBase
}
func (mt *librarySdkMemberType) AddDependencies(mctx android.BottomUpMutatorContext, dependencyTag blueprint.DependencyTag, names []string) {
@@ -1764,8 +1782,6 @@ func (mt *librarySdkMemberType) buildSnapshot(
module.AddProperty("jars", []string{snapshotRelativeJavaLibPath})
}
-var HeaderLibrarySdkMemberType = &headerLibrarySdkMemberType{}
-
type headerLibrarySdkMemberType struct {
librarySdkMemberType
}
@@ -1781,8 +1797,6 @@ func (mt *headerLibrarySdkMemberType) BuildSnapshot(sdkModuleContext android.Mod
})
}
-var ImplLibrarySdkMemberType = &implLibrarySdkMemberType{}
-
type implLibrarySdkMemberType struct {
librarySdkMemberType
}