diff options
Diffstat (limited to 'java/java.go')
| -rw-r--r-- | java/java.go | 64 | 
1 files changed, 49 insertions, 15 deletions
| diff --git a/java/java.go b/java/java.go index 71b95dff9..a9e554b0c 100644 --- a/java/java.go +++ b/java/java.go @@ -1710,18 +1710,16 @@ func (j *Library) DepsMutator(ctx android.BottomUpMutatorContext) {  }  const ( -	aidlIncludeDir     = "aidl" -	javaStubDir        = "java" -	javaStubFileSuffix = ".jar" +	aidlIncludeDir = "aidl" +	javaDir        = "java" +	jarFileSuffix  = ".jar"  ) -// path to the stub file of a java library. Relative to <sdk_root>/<api_dir> -func (j *Library) javaStubFilePathFor() string { -	return filepath.Join(javaStubDir, j.Name()+javaStubFileSuffix) +// path to the jar file of a java library. Relative to <sdk_root>/<api_dir> +func (j *Library) sdkSnapshotFilePathForJar() string { +	return filepath.Join(javaDir, j.Name()+jarFileSuffix)  } -var LibrarySdkMemberType = &librarySdkMemberType{} -  type librarySdkMemberType struct {  } @@ -1734,7 +1732,12 @@ func (mt *librarySdkMemberType) IsInstance(module android.Module) bool {  	return ok  } -func (mt *librarySdkMemberType) BuildSnapshot(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, member android.SdkMember) { +func (mt *librarySdkMemberType) buildSnapshot( +	sdkModuleContext android.ModuleContext, +	builder android.SnapshotBuilder, +	member android.SdkMember, +	jarToExportGetter func(j *Library) android.Path) { +  	variants := member.Variants()  	if len(variants) != 1 {  		sdkModuleContext.ModuleErrorf("sdk contains %d variants of member %q but only one is allowed", len(variants), member.Name()) @@ -1745,12 +1748,9 @@ func (mt *librarySdkMemberType) BuildSnapshot(sdkModuleContext android.ModuleCon  	variant := variants[0]  	j := variant.(*Library) -	headerJars := j.HeaderJars() -	if len(headerJars) != 1 { -		panic(fmt.Errorf("there must be only one header jar from %q", j.Name())) -	} -	snapshotRelativeJavaLibPath := j.javaStubFilePathFor() -	builder.CopyToSnapshot(headerJars[0], snapshotRelativeJavaLibPath) +	exportedJar := jarToExportGetter(j) +	snapshotRelativeJavaLibPath := j.sdkSnapshotFilePathForJar() +	builder.CopyToSnapshot(exportedJar, snapshotRelativeJavaLibPath)  	for _, dir := range j.AidlIncludeDirs() {  		// TODO(jiyong): copy parcelable declarations only @@ -1764,6 +1764,40 @@ func (mt *librarySdkMemberType) BuildSnapshot(sdkModuleContext android.ModuleCon  	module.AddProperty("jars", []string{snapshotRelativeJavaLibPath})  } +var HeaderLibrarySdkMemberType = &headerLibrarySdkMemberType{} + +type headerLibrarySdkMemberType struct { +	librarySdkMemberType +} + +func (mt *headerLibrarySdkMemberType) BuildSnapshot(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, member android.SdkMember) { +	mt.librarySdkMemberType.buildSnapshot(sdkModuleContext, builder, member, func(j *Library) android.Path { +		headerJars := j.HeaderJars() +		if len(headerJars) != 1 { +			panic(fmt.Errorf("there must be only one header jar from %q", j.Name())) +		} + +		return headerJars[0] +	}) +} + +var ImplLibrarySdkMemberType = &implLibrarySdkMemberType{} + +type implLibrarySdkMemberType struct { +	librarySdkMemberType +} + +func (mt *implLibrarySdkMemberType) BuildSnapshot(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, member android.SdkMember) { +	mt.librarySdkMemberType.buildSnapshot(sdkModuleContext, builder, member, func(j *Library) android.Path { +		implementationJars := j.ImplementationJars() +		if len(implementationJars) != 1 { +			panic(fmt.Errorf("there must be only one implementation jar from %q", j.Name())) +		} + +		return implementationJars[0] +	}) +} +  // java_library builds and links sources into a `.jar` file for the device, and possibly for the host as well.  //  // By default, a java_library has a single variant that produces a `.jar` file containing `.class` files that were |