summaryrefslogtreecommitdiff
path: root/java/java.go
diff options
context:
space:
mode:
Diffstat (limited to 'java/java.go')
-rw-r--r--java/java.go35
1 files changed, 35 insertions, 0 deletions
diff --git a/java/java.go b/java/java.go
index e37a77e46..b3abc9118 100644
--- a/java/java.go
+++ b/java/java.go
@@ -294,6 +294,11 @@ type UsesLibraryDependency interface {
ClassLoaderContexts() dexpreopt.ClassLoaderContextMap
}
+// Provides transitive Proguard flag files to downstream DEX jars.
+type LibraryDependency interface {
+ ExportedProguardFlagFiles() android.Paths
+}
+
// TODO(jungjw): Move this to kythe.go once it's created.
type xref interface {
XrefJavaFiles() android.Paths
@@ -596,9 +601,17 @@ func normalizeJavaVersion(ctx android.BaseModuleContext, javaVersion string) jav
type Library struct {
Module
+ exportedProguardFlagFiles android.Paths
+
InstallMixin func(ctx android.ModuleContext, installPath android.Path) (extraInstallDeps android.Paths)
}
+var _ LibraryDependency = (*Library)(nil)
+
+func (j *Library) ExportedProguardFlagFiles() android.Paths {
+ return j.exportedProguardFlagFiles
+}
+
var _ android.ApexModule = (*Library)(nil)
// Provides access to the list of permitted packages from apex boot jars.
@@ -694,6 +707,15 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) {
}
j.installFile = ctx.InstallFile(installDir, j.Stem()+".jar", j.outputFile, extraInstallDeps...)
}
+
+ j.exportedProguardFlagFiles = append(j.exportedProguardFlagFiles,
+ android.PathsForModuleSrc(ctx, j.dexProperties.Optimize.Proguard_flags_files)...)
+ ctx.VisitDirectDeps(func(m android.Module) {
+ if lib, ok := m.(LibraryDependency); ok && ctx.OtherModuleDependencyTag(m) == staticLibTag {
+ j.exportedProguardFlagFiles = append(j.exportedProguardFlagFiles, lib.ExportedProguardFlagFiles()...)
+ }
+ })
+ j.exportedProguardFlagFiles = android.FirstUniquePaths(j.exportedProguardFlagFiles)
}
func (j *Library) DepsMutator(ctx android.BottomUpMutatorContext) {
@@ -1567,8 +1589,14 @@ type JavaApiLibraryProperties struct {
Api_surface *string
// list of Java API contribution modules that consists this API surface
+ // This is a list of Soong modules
Api_contributions []string
+ // list of api.txt files relative to this directory that contribute to the
+ // API surface.
+ // This is a list of relative paths
+ Api_files []string
+
// List of flags to be passed to the javac compiler to generate jar file
Javacflags []string
}
@@ -1665,6 +1693,13 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
srcFiles = append(srcFiles, android.PathForSource(ctx, provider.ApiFile.String()))
})
+ // Add the api_files inputs
+ for _, api := range al.properties.Api_files {
+ // Use MaybeExistentPathForSource since the api file might not exist during analysis.
+ // This will be provided by the orchestrator in the combined execution.
+ srcFiles = append(srcFiles, android.MaybeExistentPathForSource(ctx, ctx.ModuleDir(), api))
+ }
+
cmd := metalavaStubCmd(ctx, rule, srcFiles, homeDir)
al.stubsFlags(ctx, cmd, stubsDir)