diff options
Diffstat (limited to 'java/base.go')
-rw-r--r-- | java/base.go | 122 |
1 files changed, 63 insertions, 59 deletions
diff --git a/java/base.go b/java/base.go index 63a9426f4..ddb2be882 100644 --- a/java/base.go +++ b/java/base.go @@ -656,14 +656,17 @@ func (j *Module) checkSdkVersions(ctx android.ModuleContext) { // Make sure this module doesn't statically link to modules with lower-ranked SDK link type. // See rank() for details. - ctx.VisitDirectDeps(func(module android.Module) { + ctx.VisitDirectDepsProxy(func(module android.ModuleProxy) { tag := ctx.OtherModuleDependencyTag(module) - switch module.(type) { - // TODO(satayev): cover other types as well, e.g. imports - case *Library, *AndroidLibrary: + _, isJavaLibrary := android.OtherModuleProvider(ctx, module, JavaLibraryInfoProvider) + _, isAndroidLibrary := android.OtherModuleProvider(ctx, module, AndroidLibraryInfoProvider) + _, isJavaAconfigLibrary := android.OtherModuleProvider(ctx, module, android.CodegenInfoProvider) + // Exclude java_aconfig_library modules to maintain consistency with existing behavior. + if (isJavaLibrary && !isJavaAconfigLibrary) || isAndroidLibrary { + // TODO(satayev): cover other types as well, e.g. imports switch tag { case bootClasspathTag, sdkLibTag, libTag, staticLibTag, java9LibTag: - j.checkSdkLinkType(ctx, module.(moduleWithSdkDep), tag.(dependencyTag)) + j.checkSdkLinkType(ctx, module) } } }) @@ -1157,7 +1160,7 @@ func (j *Module) addGeneratedSrcJars(path android.Path) { j.properties.Generated_srcjars = append(j.properties.Generated_srcjars, path) } -func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspathJars, extraCombinedJars, extraDepCombinedJars android.Paths) { +func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspathJars, extraCombinedJars, extraDepCombinedJars android.Paths) *JavaInfo { // Auto-propagating jarjar rules jarjarProviderData := j.collectJarJarRules(ctx) if jarjarProviderData != nil { @@ -1291,7 +1294,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath transitiveStaticLibsHeaderJars = nil } if ctx.Failed() { - return + return nil } j.headerJarFile = combinedHeaderJarFile @@ -1306,7 +1309,8 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath ctx.CheckbuildFile(j.headerJarFile) } - android.SetProvider(ctx, JavaInfoProvider, &JavaInfo{ + j.outputFile = j.headerJarFile + return &JavaInfo{ HeaderJars: android.PathsIfNonNil(j.headerJarFile), LocalHeaderJars: localHeaderJars, TransitiveStaticLibsHeaderJars: depset.New(depset.PREORDER, localHeaderJars, transitiveStaticLibsHeaderJars), @@ -1319,10 +1323,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath StubsLinkType: j.stubsLinkType, AconfigIntermediateCacheOutputPaths: deps.aconfigProtoFiles, SdkVersion: j.SdkVersion(ctx), - }) - - j.outputFile = j.headerJarFile - return + } } if srcFiles.HasExt(".kt") { @@ -1394,7 +1395,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath kotlinHeaderJar := android.PathForModuleOut(ctx, "kotlin_headers", jarName) j.kotlinCompile(ctx, kotlinJar, kotlinHeaderJar, uniqueSrcFiles, kotlinCommonSrcFiles, srcJars, flags) if ctx.Failed() { - return + return nil } kotlinJarPath, _ := j.repackageFlagsIfNecessary(ctx, kotlinJar, jarName, "kotlinc") @@ -1521,7 +1522,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath localImplementationJars = append(localImplementationJars, classes) } if ctx.Failed() { - return + return nil } } @@ -1561,7 +1562,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath resourceJar := android.PathForModuleOut(ctx, "res", jarName) TransformResourcesToJar(ctx, resourceJar, resArgs, resDeps) if ctx.Failed() { - return + return nil } localResourceJars = append(localResourceJars, resourceJar) } @@ -1683,7 +1684,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath } if ctx.Failed() { - return + return nil } if j.ravenizer.enabled { @@ -1747,7 +1748,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath CheckJarPackages(ctx, pkgckFile, outputFile, j.properties.Permitted_packages) if ctx.Failed() { - return + return nil } } @@ -1772,7 +1773,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath // enforce syntax check to jacoco filters for any build (http://b/183622051) specs := j.jacocoModuleToZipCommand(ctx) if ctx.Failed() { - return + return nil } completeStaticLibsImplementationJarsToCombine := completeStaticLibsImplementationJars @@ -1840,7 +1841,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath } dexOutputFile, dexArtProfileOutput := j.dexer.compileDex(ctx, params) if ctx.Failed() { - return + return nil } // If r8/d8 provides a profile that matches the optimized dex, use that for dexpreopt. @@ -1899,7 +1900,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath } if ctx.Failed() { - return + return nil } } @@ -1946,7 +1947,10 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath ctx.CheckbuildFile(j.headerJarFile) } - android.SetProvider(ctx, JavaInfoProvider, &JavaInfo{ + // Save the output file with no relative path so that it doesn't end up in a subdirectory when used as a resource + j.outputFile = outputFile.WithoutRel() + + return &JavaInfo{ HeaderJars: android.PathsIfNonNil(j.headerJarFile), RepackagedHeaderJars: android.PathsIfNonNil(repackagedHeaderJarFile), @@ -1971,10 +1975,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath StubsLinkType: j.stubsLinkType, AconfigIntermediateCacheOutputPaths: j.aconfigCacheFiles, SdkVersion: j.SdkVersion(ctx), - }) - - // Save the output file with no relative path so that it doesn't end up in a subdirectory when used as a resource - j.outputFile = outputFile.WithoutRel() + } } func (j *Module) useCompose(ctx android.BaseModuleContext) bool { @@ -1982,7 +1983,7 @@ func (j *Module) useCompose(ctx android.BaseModuleContext) bool { } func collectDepProguardSpecInfo(ctx android.ModuleContext) (transitiveProguardFlags, transitiveUnconditionalExportedFlags []depset.DepSet[android.Path]) { - ctx.VisitDirectDeps(func(m android.Module) { + ctx.VisitDirectDepsProxy(func(m android.ModuleProxy) { depProguardInfo, _ := android.OtherModuleProvider(ctx, m, ProguardSpecInfoProvider) depTag := ctx.OtherModuleDependencyTag(m) @@ -2155,7 +2156,7 @@ func (j *providesTransitiveHeaderJarsForR8) collectTransitiveHeaderJarsForR8(ctx directStaticLibs := android.Paths{} transitiveLibs := []depset.DepSet[android.Path]{} transitiveStaticLibs := []depset.DepSet[android.Path]{} - ctx.VisitDirectDeps(func(module android.Module) { + ctx.VisitDirectDepsProxy(func(module android.ModuleProxy) { // don't add deps of the prebuilt version of the same library if ctx.ModuleName() == android.RemoveOptionalPrebuiltPrefix(module.Name()) { return @@ -2241,7 +2242,7 @@ func (j *Module) CompilerDeps() []string { func (j *Module) hasCode(ctx android.ModuleContext) bool { srcFiles := android.PathsForModuleSrcExcludes(ctx, j.properties.Srcs, j.properties.Exclude_srcs) - return len(srcFiles) > 0 || len(ctx.GetDirectDepsWithTag(staticLibTag)) > 0 + return len(srcFiles) > 0 || len(ctx.GetDirectDepsProxyWithTag(staticLibTag)) > 0 } // Implements android.ApexModule @@ -2279,7 +2280,7 @@ func (j *Module) JacocoReportClassesFile() android.Path { func (j *Module) collectTransitiveSrcFiles(ctx android.ModuleContext, mine android.Paths) { var fromDeps []depset.DepSet[android.Path] - ctx.VisitDirectDeps(func(module android.Module) { + ctx.VisitDirectDepsProxy(func(module android.ModuleProxy) { tag := ctx.OtherModuleDependencyTag(module) if tag == staticLibTag { if depInfo, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok { @@ -2398,7 +2399,7 @@ func (m *Module) getSdkLinkType(ctx android.BaseModuleContext, name string) (ret // checkSdkLinkType make sures the given dependency doesn't have a lower SDK link type rank than // this module's. See the comment on rank() for details and an example. func (j *Module) checkSdkLinkType( - ctx android.ModuleContext, dep moduleWithSdkDep, tag dependencyTag) { + ctx android.ModuleContext, dep android.ModuleProxy) { if ctx.Host() { return } @@ -2407,7 +2408,12 @@ func (j *Module) checkSdkLinkType( if stubs { return } - depLinkType, _ := dep.getSdkLinkType(ctx, ctx.OtherModuleName(dep)) + info, ok := android.OtherModuleProvider(ctx, dep, JavaInfoProvider) + if !ok || info.ModuleWithSdkDepInfo == nil { + panic(fmt.Errorf("dependency doesn't have ModuleWithSdkDepInfo: %v", dep)) + } + + depLinkType := info.ModuleWithSdkDepInfo.SdkLinkType if myLinkType.rank() < depLinkType.rank() { ctx.ModuleErrorf("compiles against %v, but dependency %q is compiling against %v. "+ @@ -2432,7 +2438,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { var transitiveStaticJarsImplementationLibs []depset.DepSet[android.Path] var transitiveStaticJarsResourceLibs []depset.DepSet[android.Path] - ctx.VisitDirectDeps(func(module android.Module) { + ctx.VisitDirectDepsProxy(func(module android.ModuleProxy) { otherName := ctx.OtherModuleName(module) tag := ctx.OtherModuleDependencyTag(module) @@ -2466,7 +2472,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { deps.bootClasspath = append(deps.bootClasspath, dep.HeaderJars...) transitiveBootClasspathHeaderJars = append(transitiveBootClasspathHeaderJars, dep.TransitiveStaticLibsHeaderJars) case sdkLibTag, libTag, instrumentationForTag: - if _, ok := module.(*Plugin); ok { + if _, ok := android.OtherModuleProvider(ctx, module, JavaPluginInfoProvider); ok { ctx.ModuleErrorf("a java_plugin (%s) cannot be used as a libs dependency", otherName) } deps.classpath = append(deps.classpath, dep.HeaderJars...) @@ -2484,7 +2490,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { deps.java9Classpath = append(deps.java9Classpath, dep.HeaderJars...) transitiveJava9ClasspathHeaderJars = append(transitiveJava9ClasspathHeaderJars, dep.TransitiveStaticLibsHeaderJars) case staticLibTag: - if _, ok := module.(*Plugin); ok { + if _, ok := android.OtherModuleProvider(ctx, module, JavaPluginInfoProvider); ok { ctx.ModuleErrorf("a java_plugin (%s) cannot be used as a static_libs dependency", otherName) } deps.classpath = append(deps.classpath, dep.HeaderJars...) @@ -2504,40 +2510,40 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { transitiveStaticJarsImplementationLibs = append(transitiveStaticJarsImplementationLibs, dep.TransitiveStaticLibsImplementationJars) transitiveStaticJarsResourceLibs = append(transitiveStaticJarsResourceLibs, dep.TransitiveStaticLibsResourceJars) case pluginTag: - if plugin, ok := module.(*Plugin); ok { - if plugin.pluginProperties.Processor_class != nil { - addPlugins(&deps, dep.ImplementationAndResourcesJars, *plugin.pluginProperties.Processor_class) + if plugin, ok := android.OtherModuleProvider(ctx, module, JavaPluginInfoProvider); ok { + if plugin.ProcessorClass != nil { + addPlugins(&deps, dep.ImplementationAndResourcesJars, *plugin.ProcessorClass) } else { addPlugins(&deps, dep.ImplementationAndResourcesJars) } // Turbine doesn't run annotation processors, so any module that uses an // annotation processor that generates API is incompatible with the turbine // optimization. - deps.disableTurbine = deps.disableTurbine || Bool(plugin.pluginProperties.Generates_api) + deps.disableTurbine = deps.disableTurbine || plugin.GeneratesApi } else { ctx.PropertyErrorf("plugins", "%q is not a java_plugin module", otherName) } case errorpronePluginTag: - if _, ok := module.(*Plugin); ok { + if _, ok := android.OtherModuleProvider(ctx, module, JavaPluginInfoProvider); ok { deps.errorProneProcessorPath = append(deps.errorProneProcessorPath, dep.ImplementationAndResourcesJars...) } else { ctx.PropertyErrorf("plugins", "%q is not a java_plugin module", otherName) } case exportedPluginTag: - if plugin, ok := module.(*Plugin); ok { + if plugin, ok := android.OtherModuleProvider(ctx, module, JavaPluginInfoProvider); ok { j.exportedPluginJars = append(j.exportedPluginJars, dep.ImplementationAndResourcesJars...) - if plugin.pluginProperties.Processor_class != nil { - j.exportedPluginClasses = append(j.exportedPluginClasses, *plugin.pluginProperties.Processor_class) + if plugin.ProcessorClass != nil { + j.exportedPluginClasses = append(j.exportedPluginClasses, *plugin.ProcessorClass) } // Turbine doesn't run annotation processors, so any module that uses an // annotation processor that generates API is incompatible with the turbine // optimization. - j.exportedDisableTurbine = Bool(plugin.pluginProperties.Generates_api) + j.exportedDisableTurbine = plugin.GeneratesApi } else { ctx.PropertyErrorf("exported_plugins", "%q is not a java_plugin module", otherName) } case kotlinPluginTag: - if _, ok := module.(*KotlinPlugin); ok { + if _, ok := android.OtherModuleProvider(ctx, module, KotlinPluginInfoProvider); ok { deps.kotlinPlugins = append(deps.kotlinPlugins, dep.ImplementationAndResourcesJars...) } else { ctx.PropertyErrorf("kotlin_plugins", "%q is not a kotlin_plugin module", otherName) @@ -2549,21 +2555,21 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { JavaInfo: dep, }) } - } else if dep, ok := module.(android.SourceFileProducer); ok { + } else if dep, ok := android.OtherModuleProvider(ctx, module, android.SourceFilesInfoProvider); ok { switch tag { case sdkLibTag, libTag: - checkProducesJars(ctx, dep) - deps.classpath = append(deps.classpath, dep.Srcs()...) - deps.dexClasspath = append(deps.classpath, dep.Srcs()...) + checkProducesJars(ctx, dep, module) + deps.classpath = append(deps.classpath, dep.Srcs...) + deps.dexClasspath = append(deps.classpath, dep.Srcs...) transitiveClasspathHeaderJars = append(transitiveClasspathHeaderJars, - depset.New(depset.PREORDER, dep.Srcs(), nil)) + depset.New(depset.PREORDER, dep.Srcs, nil)) case staticLibTag: - checkProducesJars(ctx, dep) - deps.classpath = append(deps.classpath, dep.Srcs()...) - deps.staticJars = append(deps.staticJars, dep.Srcs()...) - deps.staticHeaderJars = append(deps.staticHeaderJars, dep.Srcs()...) + checkProducesJars(ctx, dep, module) + deps.classpath = append(deps.classpath, dep.Srcs...) + deps.staticJars = append(deps.staticJars, dep.Srcs...) + deps.staticHeaderJars = append(deps.staticHeaderJars, dep.Srcs...) - depHeaderJars := depset.New(depset.PREORDER, dep.Srcs(), nil) + depHeaderJars := depset.New(depset.PREORDER, dep.Srcs, nil) transitiveClasspathHeaderJars = append(transitiveClasspathHeaderJars, depHeaderJars) transitiveStaticJarsHeaderLibs = append(transitiveStaticJarsHeaderLibs, depHeaderJars) transitiveStaticJarsImplementationLibs = append(transitiveStaticJarsImplementationLibs, depHeaderJars) @@ -2739,7 +2745,7 @@ func collectDirectDepsProviders(ctx android.ModuleContext) (result *JarJarProvid module := ctx.Module() moduleName := module.Name() - ctx.VisitDirectDeps(func(m android.Module) { + ctx.VisitDirectDepsProxy(func(m android.ModuleProxy) { tag := ctx.OtherModuleDependencyTag(m) // This logic mirrors that in (*Module).collectDeps above. There are several places // where we explicitly return RenameUseExclude, even though it is the default, to @@ -2778,10 +2784,8 @@ func collectDirectDepsProviders(ctx android.ModuleContext) (result *JarJarProvid //fmt.Printf("collectDirectDepsProviders: %v -> %v StubsLinkType unknown\n", module, m) // Fall through to the heuristic logic. } - switch reflect.TypeOf(m).String() { - case "*java.GeneratedJavaLibraryModule": + if _, ok := android.OtherModuleProvider(ctx, m, android.CodegenInfoProvider); ok { // Probably a java_aconfig_library module. - // TODO: make this check better. return RenameUseInclude } switch tag { @@ -2804,7 +2808,7 @@ func collectDirectDepsProviders(ctx android.ModuleContext) (result *JarJarProvid default: return RenameUseExclude } - } else if _, ok := m.(android.SourceFileProducer); ok { + } else if _, ok := android.OtherModuleProvider(ctx, m, android.SourceFilesInfoProvider); ok { switch tag { case sdkLibTag, libTag, staticLibTag: return RenameUseInclude |