Change depVisitor to use providers instead of type-asserting to
interfaces directly, the next step is to change it to use ModuleProxy
once IsDepInSameApex is ready.
Bug: 377723687
Test: Unit tests and compare the ninja and mk files generated.
Change-Id: I13a4e256a26dbf7f9b3b746d628ac8f68b4e598e
diff --git a/java/java.go b/java/java.go
index c5dee0c..0a4a771 100644
--- a/java/java.go
+++ b/java/java.go
@@ -259,7 +259,6 @@
}
type UsesLibraryDependencyInfo struct {
- DexJarBuildPath OptionalDexJarPath
DexJarInstallPath android.Path
ClassLoaderContexts dexpreopt.ClassLoaderContextMap
}
@@ -403,13 +402,6 @@
BuiltInstalled string
- // ApexSystemServerDexpreoptInstalls stores the list of dexpreopt artifacts if this is a system server
- // jar in an apex.
- ApexSystemServerDexpreoptInstalls []DexpreopterInstall
-
- // ApexSystemServerDexJars stores the list of dex jars if this is a system server jar in an apex.
- ApexSystemServerDexJars android.Paths
-
// The config is used for two purposes:
// - Passing dexpreopt information about libraries from Soong to Make. This is needed when
// a <uses-library> is defined in Android.bp, but used in Android.mk (see dex_preopt_config_merger.py).
@@ -418,10 +410,6 @@
// dexpreopt another partition).
ConfigPath android.WritablePath
- // The path to the profile on host that dexpreopter generates. This is used as the input for
- // dex2oat.
- OutputProfilePathOnHost android.Path
-
LogtagsSrcs android.Paths
ProguardDictionary android.OptionalPath
@@ -438,14 +426,39 @@
// True if profile-guided optimization is actually enabled.
ProfileGuided bool
+
+ Stem string
+
+ DexJarBuildPath OptionalDexJarPath
+
+ DexpreopterInfo *DexpreopterInfo
}
var JavaInfoProvider = blueprint.NewProvider[*JavaInfo]()
-type JavaLibraryInfo struct{}
+type DexpreopterInfo struct {
+ // The path to the profile on host that dexpreopter generates. This is used as the input for
+ // dex2oat.
+ OutputProfilePathOnHost android.Path
+ // If the java module is to be installed into an APEX, this list contains information about the
+ // dexpreopt outputs to be installed on devices. Note that these dexpreopt outputs are installed
+ // outside of the APEX.
+ ApexSystemServerDexpreoptInstalls []DexpreopterInstall
+
+ // ApexSystemServerDexJars returns the list of dex jars if this is an apex system server jar.
+ ApexSystemServerDexJars android.Paths
+}
+
+type JavaLibraryInfo struct {
+ Prebuilt bool
+}
var JavaLibraryInfoProvider = blueprint.NewProvider[JavaLibraryInfo]()
+type JavaDexImportInfo struct{}
+
+var JavaDexImportInfoProvider = blueprint.NewProvider[JavaDexImportInfo]()
+
// SyspropPublicStubInfo contains info about the sysprop public stub library that corresponds to
// the sysprop implementation library.
type SyspropPublicStubInfo struct {
@@ -1127,7 +1140,9 @@
TopLevelTarget: j.sourceProperties.Top_level_test_target,
})
- android.SetProvider(ctx, JavaLibraryInfoProvider, JavaLibraryInfo{})
+ android.SetProvider(ctx, JavaLibraryInfoProvider, JavaLibraryInfo{
+ Prebuilt: false,
+ })
if javaInfo != nil {
setExtraJavaInfo(ctx, j, javaInfo)
@@ -1137,11 +1152,8 @@
javaInfo.BootDexJarPath = j.bootDexJarPath
javaInfo.UncompressDexState = j.uncompressDexState
javaInfo.Active = j.active
- javaInfo.ApexSystemServerDexpreoptInstalls = j.apexSystemServerDexpreoptInstalls
- javaInfo.ApexSystemServerDexJars = j.apexSystemServerDexJars
javaInfo.BuiltInstalled = j.builtInstalled
javaInfo.ConfigPath = j.configPath
- javaInfo.OutputProfilePathOnHost = j.outputProfilePathOnHost
javaInfo.LogtagsSrcs = j.logtagsSrcs
javaInfo.ProguardDictionary = j.proguardDictionary
javaInfo.ProguardUsageZip = j.proguardUsageZip
@@ -3229,6 +3241,10 @@
setExtraJavaInfo(ctx, j, javaInfo)
android.SetProvider(ctx, JavaInfoProvider, javaInfo)
+ android.SetProvider(ctx, JavaLibraryInfoProvider, JavaLibraryInfo{
+ Prebuilt: true,
+ })
+
ctx.SetOutputFiles(android.Paths{j.combinedImplementationFile}, "")
ctx.SetOutputFiles(android.Paths{j.combinedImplementationFile}, ".jar")
@@ -3508,6 +3524,12 @@
ctx.InstallFile(android.PathForModuleInstall(ctx, "framework"),
j.Stem()+".jar", dexOutputFile)
}
+
+ javaInfo := &JavaInfo{}
+ setExtraJavaInfo(ctx, j, javaInfo)
+ android.SetProvider(ctx, JavaInfoProvider, javaInfo)
+
+ android.SetProvider(ctx, JavaDexImportInfoProvider, JavaDexImportInfo{})
}
func (j *DexImport) DexJarBuildPath(ctx android.ModuleErrorfContext) OptionalDexJarPath {
@@ -3695,7 +3717,7 @@
}
}
clcMap.AddContext(ctx, dexpreopt.AnySdkVersion, *sdkLib, optional,
- dep.UsesLibraryDependencyInfo.DexJarBuildPath.PathOrNil(),
+ dep.DexJarBuildPath.PathOrNil(),
dep.UsesLibraryDependencyInfo.DexJarInstallPath, dep.UsesLibraryDependencyInfo.ClassLoaderContexts)
} else {
clcMap.AddContextMap(dep.UsesLibraryDependencyInfo.ClassLoaderContexts, depName)
@@ -3779,7 +3801,6 @@
if ulDep, ok := module.(UsesLibraryDependency); ok {
javaInfo.UsesLibraryDependencyInfo = &UsesLibraryDependencyInfo{
- DexJarBuildPath: ulDep.DexJarBuildPath(ctx),
DexJarInstallPath: ulDep.DexJarInstallPath(),
ClassLoaderContexts: ulDep.ClassLoaderContexts(),
}
@@ -3808,4 +3829,22 @@
Stubs: stubs,
}
}
+
+ if st, ok := module.(ModuleWithStem); ok {
+ javaInfo.Stem = st.Stem()
+ }
+
+ if mm, ok := module.(interface {
+ DexJarBuildPath(ctx android.ModuleErrorfContext) OptionalDexJarPath
+ }); ok {
+ javaInfo.DexJarBuildPath = mm.DexJarBuildPath(ctx)
+ }
+
+ if di, ok := module.(DexpreopterInterface); ok {
+ javaInfo.DexpreopterInfo = &DexpreopterInfo{
+ OutputProfilePathOnHost: di.OutputProfilePathOnHost(),
+ ApexSystemServerDexpreoptInstalls: di.ApexSystemServerDexpreoptInstalls(),
+ ApexSystemServerDexJars: di.ApexSystemServerDexJars(),
+ }
+ }
}