diff options
author | 2021-11-30 12:33:55 +0000 | |
---|---|---|
committer | 2021-12-01 17:58:41 +0000 | |
commit | cca4ab762eab320fb9beaad61a51969e16127833 (patch) | |
tree | e4ec5ae9cd370d3aac21e888d647c309c2907131 /java/classpath_fragment.go | |
parent | 0a420e771a2201c99f570cf48bd09a6bd837cce2 (diff) |
Propagate min and max sdk versions to classpaths.proto configs.
These attributed define a range for dessert releases where the jars
should be active, and included in corresponding CLASSPATH varibles by
derive_classpath.
Bug: 190818041
Test: presubmit
Change-Id: Ieb9aef29657ad0694d48a63019f93faca2678252
Diffstat (limited to 'java/classpath_fragment.go')
-rw-r--r-- | java/classpath_fragment.go | 49 |
1 files changed, 43 insertions, 6 deletions
diff --git a/java/classpath_fragment.go b/java/classpath_fragment.go index f63d81d6e..92e01a2df 100644 --- a/java/classpath_fragment.go +++ b/java/classpath_fragment.go @@ -84,11 +84,10 @@ func initClasspathFragment(c classpathFragment, classpathType classpathType) { // Matches definition of Jar in packages/modules/SdkExtensions/proto/classpaths.proto type classpathJar struct { - path string - classpath classpathType - // TODO(satayev): propagate min/max sdk versions for the jars - minSdkVersion int32 - maxSdkVersion int32 + path string + classpath classpathType + minSdkVersion string + maxSdkVersion string } // gatherPossibleApexModuleNamesAndStems returns a set of module and stem names from the @@ -120,10 +119,32 @@ func configuredJarListToClasspathJars(ctx android.ModuleContext, configuredJars jars := make([]classpathJar, 0, len(paths)*len(classpaths)) for i := 0; i < len(paths); i++ { for _, classpathType := range classpaths { - jars = append(jars, classpathJar{ + jar := classpathJar{ classpath: classpathType, path: paths[i], + } + ctx.VisitDirectDepsIf(func(m android.Module) bool { + return m.Name() == configuredJars.Jar(i) + }, func(m android.Module) { + if s, ok := m.(*SdkLibrary); ok { + // TODO(208456999): instead of mapping "current" to latest, min_sdk_version should never be set to "current" + if s.minSdkVersion.Specified() { + if s.minSdkVersion.ApiLevel.IsCurrent() { + jar.minSdkVersion = ctx.Config().LatestPreviewApiLevel().String() + } else { + jar.minSdkVersion = s.minSdkVersion.ApiLevel.String() + } + } + if s.maxSdkVersion.Specified() { + if s.maxSdkVersion.ApiLevel.IsCurrent() { + jar.maxSdkVersion = ctx.Config().LatestPreviewApiLevel().String() + } else { + jar.maxSdkVersion = s.maxSdkVersion.ApiLevel.String() + } + } + } }) + jars = append(jars, jar) } } return jars @@ -161,6 +182,7 @@ func (c *ClasspathFragmentBase) generateClasspathProtoBuildActions(ctx android.M func writeClasspathsJson(ctx android.ModuleContext, output android.WritablePath, jars []classpathJar) { var content strings.Builder + fmt.Fprintf(&content, "{\n") fmt.Fprintf(&content, "\"jars\": [\n") for idx, jar := range jars { @@ -169,6 +191,20 @@ func writeClasspathsJson(ctx android.ModuleContext, output android.WritablePath, fmt.Fprintf(&content, "\"path\": \"%s\",\n", jar.path) fmt.Fprintf(&content, "\"classpath\": \"%s\"\n", jar.classpath) + if jar.minSdkVersion != "" { + fmt.Fprintf(&content, ",\n") + fmt.Fprintf(&content, "\"minSdkVersion\": \"%s\"\n", jar.minSdkVersion) + } else { + fmt.Fprintf(&content, "\n") + } + + if jar.maxSdkVersion != "" { + fmt.Fprintf(&content, ",\n") + fmt.Fprintf(&content, "\"maxSdkVersion\": \"%s\"\n", jar.maxSdkVersion) + } else { + fmt.Fprintf(&content, "\n") + } + if idx < len(jars)-1 { fmt.Fprintf(&content, "},\n") } else { @@ -177,6 +213,7 @@ func writeClasspathsJson(ctx android.ModuleContext, output android.WritablePath, } fmt.Fprintf(&content, "]\n") fmt.Fprintf(&content, "}\n") + android.WriteFileRule(ctx, output, content.String()) } |