Merge changes Icfd32d0a,Icc9ff4d4,Ieee07502,I559eeb1f,Iaf2a6f6d, ...
* changes: Use java language 1.9 for sdk_version: "current" Remove special case for sdk_version: "none" Use system modules for turbine Make javaVersion an enum Move TestConfig sdk versions forward Split java 8 and 9 classpaths in TestClasspath
This commit is contained in:
commit
ec90e44ce7
|
@ -212,9 +212,9 @@ func TestConfig(buildDir string, env map[string]string) Config {
|
|||
config := &config{
|
||||
productVariables: productVariables{
|
||||
DeviceName: stringPtr("test_device"),
|
||||
Platform_sdk_version: intPtr(26),
|
||||
Platform_sdk_version: intPtr(30),
|
||||
DeviceSystemSdkVersions: []string{"14", "15"},
|
||||
Platform_systemsdk_versions: []string{"25", "26"},
|
||||
Platform_systemsdk_versions: []string{"29", "30"},
|
||||
AAPTConfig: []string{"normal", "large", "xlarge", "hdpi", "xhdpi", "xxhdpi"},
|
||||
AAPTPreferredConfig: stringPtr("xhdpi"),
|
||||
AAPTCharacteristics: stringPtr("nosdcard"),
|
||||
|
|
|
@ -538,6 +538,10 @@ func (a *AARImport) targetSdkVersion() string {
|
|||
return a.sdkVersion()
|
||||
}
|
||||
|
||||
func (a *AARImport) javaVersion() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
var _ AndroidLibraryDependency = (*AARImport)(nil)
|
||||
|
||||
func (a *AARImport) ExportPackage() android.Path {
|
||||
|
|
|
@ -185,12 +185,13 @@ type javaBuilderFlags struct {
|
|||
javacFlags string
|
||||
bootClasspath classpath
|
||||
classpath classpath
|
||||
java9Classpath classpath
|
||||
processorPath classpath
|
||||
processor string
|
||||
systemModules *systemModules
|
||||
aidlFlags string
|
||||
aidlDeps android.Paths
|
||||
javaVersion string
|
||||
javaVersion javaVersion
|
||||
|
||||
errorProneExtraJavacFlags string
|
||||
errorProneProcessorPath classpath
|
||||
|
@ -239,7 +240,7 @@ func emitXrefRule(ctx android.ModuleContext, xrefFile android.WritablePath, idx
|
|||
deps = append(deps, srcJars...)
|
||||
|
||||
var bootClasspath string
|
||||
if flags.javaVersion == "1.9" {
|
||||
if flags.javaVersion.usesJavaModules() {
|
||||
var systemModuleDeps android.Paths
|
||||
bootClasspath, systemModuleDeps = flags.systemModules.FormJavaSystemModulesPath(ctx.Device())
|
||||
deps = append(deps, systemModuleDeps...)
|
||||
|
@ -279,7 +280,7 @@ func emitXrefRule(ctx android.ModuleContext, xrefFile android.WritablePath, idx
|
|||
"bootClasspath": bootClasspath,
|
||||
"classpath": flags.classpath.FormJavaClassPath("-classpath"),
|
||||
"javacFlags": flags.javacFlags,
|
||||
"javaVersion": flags.javaVersion,
|
||||
"javaVersion": flags.javaVersion.String(),
|
||||
"outDir": android.PathForModuleOut(ctx, "javac", "classes.xref").String(),
|
||||
"processorpath": flags.processorPath.FormJavaClassPath("-processorpath"),
|
||||
"processor": processor,
|
||||
|
@ -294,17 +295,28 @@ func TransformJavaToHeaderClasses(ctx android.ModuleContext, outputFile android.
|
|||
|
||||
var deps android.Paths
|
||||
deps = append(deps, srcJars...)
|
||||
deps = append(deps, flags.bootClasspath...)
|
||||
deps = append(deps, flags.classpath...)
|
||||
|
||||
classpath := flags.classpath
|
||||
|
||||
var bootClasspath string
|
||||
if flags.javaVersion.usesJavaModules() {
|
||||
var systemModuleDeps android.Paths
|
||||
bootClasspath, systemModuleDeps = flags.systemModules.FormTurbineSystemModulesPath(ctx.Device())
|
||||
deps = append(deps, systemModuleDeps...)
|
||||
classpath = append(flags.java9Classpath, classpath...)
|
||||
} else {
|
||||
deps = append(deps, flags.bootClasspath...)
|
||||
if len(flags.bootClasspath) == 0 && ctx.Device() {
|
||||
// explicitly specify -bootclasspath "" if the bootclasspath is empty to
|
||||
// ensure java does not fall back to the default bootclasspath.
|
||||
// ensure turbine does not fall back to the default bootclasspath.
|
||||
bootClasspath = `--bootclasspath ""`
|
||||
} else {
|
||||
bootClasspath = strings.Join(flags.bootClasspath.FormTurbineClasspath("--bootclasspath "), " ")
|
||||
}
|
||||
}
|
||||
|
||||
deps = append(deps, classpath...)
|
||||
deps = append(deps, flags.processorPath...)
|
||||
|
||||
ctx.Build(pctx, android.BuildParams{
|
||||
Rule: turbine,
|
||||
|
@ -316,9 +328,9 @@ func TransformJavaToHeaderClasses(ctx android.ModuleContext, outputFile android.
|
|||
"javacFlags": flags.javacFlags,
|
||||
"bootClasspath": bootClasspath,
|
||||
"srcJars": strings.Join(srcJars.Strings(), " "),
|
||||
"classpath": strings.Join(flags.classpath.FormTurbineClasspath("--classpath "), " "),
|
||||
"classpath": strings.Join(classpath.FormTurbineClasspath("--classpath "), " "),
|
||||
"outDir": android.PathForModuleOut(ctx, "turbine", "classes").String(),
|
||||
"javaVersion": flags.javaVersion,
|
||||
"javaVersion": flags.javaVersion.String(),
|
||||
},
|
||||
})
|
||||
}
|
||||
|
@ -339,11 +351,14 @@ func transformJavaToClasses(ctx android.ModuleContext, outputFile android.Writab
|
|||
|
||||
deps = append(deps, srcJars...)
|
||||
|
||||
classpath := flags.classpath
|
||||
|
||||
var bootClasspath string
|
||||
if flags.javaVersion == "1.9" {
|
||||
if flags.javaVersion.usesJavaModules() {
|
||||
var systemModuleDeps android.Paths
|
||||
bootClasspath, systemModuleDeps = flags.systemModules.FormJavaSystemModulesPath(ctx.Device())
|
||||
deps = append(deps, systemModuleDeps...)
|
||||
classpath = append(flags.java9Classpath, classpath...)
|
||||
} else {
|
||||
deps = append(deps, flags.bootClasspath...)
|
||||
if len(flags.bootClasspath) == 0 && ctx.Device() {
|
||||
|
@ -355,7 +370,7 @@ func transformJavaToClasses(ctx android.ModuleContext, outputFile android.Writab
|
|||
}
|
||||
}
|
||||
|
||||
deps = append(deps, flags.classpath...)
|
||||
deps = append(deps, classpath...)
|
||||
deps = append(deps, flags.processorPath...)
|
||||
|
||||
processor := "-proc:none"
|
||||
|
@ -381,14 +396,14 @@ func transformJavaToClasses(ctx android.ModuleContext, outputFile android.Writab
|
|||
Args: map[string]string{
|
||||
"javacFlags": flags.javacFlags,
|
||||
"bootClasspath": bootClasspath,
|
||||
"classpath": flags.classpath.FormJavaClassPath("-classpath"),
|
||||
"classpath": classpath.FormJavaClassPath("-classpath"),
|
||||
"processorpath": flags.processorPath.FormJavaClassPath("-processorpath"),
|
||||
"processor": processor,
|
||||
"srcJars": strings.Join(srcJars.Strings(), " "),
|
||||
"srcJarDir": android.PathForModuleOut(ctx, intermediatesDir, srcJarDir).String(),
|
||||
"outDir": android.PathForModuleOut(ctx, intermediatesDir, outDir).String(),
|
||||
"annoDir": android.PathForModuleOut(ctx, intermediatesDir, annoDir).String(),
|
||||
"javaVersion": flags.javaVersion,
|
||||
"javaVersion": flags.javaVersion.String(),
|
||||
},
|
||||
})
|
||||
}
|
||||
|
@ -550,9 +565,9 @@ type systemModules struct {
|
|||
deps android.Paths
|
||||
}
|
||||
|
||||
// Returns a --system argument in the form javac expects with -source 1.9. If forceEmpty is true,
|
||||
// returns --system=none if the list is empty to ensure javac does not fall back to the default
|
||||
// system modules.
|
||||
// Returns a --system argument in the form javac expects with -source 1.9 and the list of files to
|
||||
// depend on. If forceEmpty is true, returns --system=none if the list is empty to ensure javac
|
||||
// does not fall back to the default system modules.
|
||||
func (x *systemModules) FormJavaSystemModulesPath(forceEmpty bool) (string, android.Paths) {
|
||||
if x != nil {
|
||||
return "--system=" + x.dir.String(), x.deps
|
||||
|
@ -562,3 +577,16 @@ func (x *systemModules) FormJavaSystemModulesPath(forceEmpty bool) (string, andr
|
|||
return "", nil
|
||||
}
|
||||
}
|
||||
|
||||
// Returns a --system argument in the form turbine expects with -source 1.9 and the list of files to
|
||||
// depend on. If forceEmpty is true, returns --bootclasspath "" if the list is empty to ensure turbine
|
||||
// does not fall back to the default bootclasspath.
|
||||
func (x *systemModules) FormTurbineSystemModulesPath(forceEmpty bool) (string, android.Paths) {
|
||||
if x != nil {
|
||||
return "--system " + x.dir.String(), x.deps
|
||||
} else if forceEmpty {
|
||||
return `--bootclasspath ""`, nil
|
||||
} else {
|
||||
return "", nil
|
||||
}
|
||||
}
|
||||
|
|
|
@ -422,7 +422,6 @@ func (j *Javadoc) targetSdkVersion() string {
|
|||
func (j *Javadoc) addDeps(ctx android.BottomUpMutatorContext) {
|
||||
if ctx.Device() {
|
||||
sdkDep := decodeSdkDep(ctx, sdkContext(j))
|
||||
if sdkDep.hasStandardLibs() {
|
||||
if sdkDep.useDefaultLibs {
|
||||
ctx.AddVariationDependencies(nil, bootClasspathTag, config.DefaultBootclasspathLibraries...)
|
||||
ctx.AddVariationDependencies(nil, systemModulesTag, config.DefaultSystemModules)
|
||||
|
@ -430,13 +429,9 @@ func (j *Javadoc) addDeps(ctx android.BottomUpMutatorContext) {
|
|||
ctx.AddVariationDependencies(nil, libTag, config.DefaultLibraries...)
|
||||
}
|
||||
} else if sdkDep.useModule {
|
||||
ctx.AddVariationDependencies(nil, bootClasspathTag, sdkDep.bootclasspath...)
|
||||
ctx.AddVariationDependencies(nil, systemModulesTag, sdkDep.systemModules)
|
||||
ctx.AddVariationDependencies(nil, bootClasspathTag, sdkDep.modules...)
|
||||
}
|
||||
} else if sdkDep.systemModules != "" {
|
||||
// Add the system modules to both the system modules and bootclasspath.
|
||||
ctx.AddVariationDependencies(nil, systemModulesTag, sdkDep.systemModules)
|
||||
ctx.AddVariationDependencies(nil, bootClasspathTag, sdkDep.systemModules)
|
||||
ctx.AddVariationDependencies(nil, java9LibTag, sdkDep.java9Classpath...)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -511,7 +506,8 @@ func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps {
|
|||
|
||||
sdkDep := decodeSdkDep(ctx, sdkContext(j))
|
||||
if sdkDep.invalidVersion {
|
||||
ctx.AddMissingDependencies(sdkDep.modules)
|
||||
ctx.AddMissingDependencies(sdkDep.bootclasspath)
|
||||
ctx.AddMissingDependencies(sdkDep.java9Classpath)
|
||||
} else if sdkDep.useFiles {
|
||||
deps.bootClasspath = append(deps.bootClasspath, sdkDep.jars...)
|
||||
}
|
||||
|
@ -544,6 +540,13 @@ func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps {
|
|||
default:
|
||||
ctx.ModuleErrorf("depends on non-java module %q", otherName)
|
||||
}
|
||||
case java9LibTag:
|
||||
switch dep := module.(type) {
|
||||
case Dependency:
|
||||
deps.java9Classpath = append(deps.java9Classpath, dep.HeaderJars()...)
|
||||
default:
|
||||
ctx.ModuleErrorf("depends on non-java module %q", otherName)
|
||||
}
|
||||
case systemModulesTag:
|
||||
if deps.systemModules != nil {
|
||||
panic("Found two system module dependencies")
|
||||
|
@ -665,7 +668,7 @@ func (j *Javadoc) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||
cmd := javadocSystemModulesCmd(ctx, rule, j.srcFiles, outDir, srcJarDir, srcJarList,
|
||||
deps.systemModules, deps.classpath, j.sourcepaths)
|
||||
|
||||
cmd.FlagWithArg("-source ", javaVersion).
|
||||
cmd.FlagWithArg("-source ", javaVersion.String()).
|
||||
Flag("-J-Xmx1024m").
|
||||
Flag("-XDignore.symbol.file").
|
||||
Flag("-Xdoclint:none")
|
||||
|
@ -1432,12 +1435,12 @@ func (d *Droidstubs) apiToXmlFlags(ctx android.ModuleContext, cmd *android.RuleB
|
|||
}
|
||||
}
|
||||
|
||||
func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, javaVersion string, srcs android.Paths,
|
||||
func metalavaCmd(ctx android.ModuleContext, rule *android.RuleBuilder, javaVersion javaVersion, srcs android.Paths,
|
||||
srcJarList android.Path, bootclasspath, classpath classpath, sourcepaths android.Paths) *android.RuleBuilderCommand {
|
||||
cmd := rule.Command().BuiltTool(ctx, "metalava").
|
||||
Flag(config.JavacVmFlags).
|
||||
FlagWithArg("-encoding ", "UTF-8").
|
||||
FlagWithArg("-source ", javaVersion).
|
||||
FlagWithArg("-source ", javaVersion.String()).
|
||||
FlagWithRspFileInputList("@", srcs).
|
||||
FlagWithInput("@", srcJarList)
|
||||
|
||||
|
|
108
java/java.go
108
java/java.go
|
@ -140,10 +140,10 @@ type CompilerProperties struct {
|
|||
Use_tools_jar *bool
|
||||
|
||||
Openjdk9 struct {
|
||||
// List of source files that should only be used when passing -source 1.9
|
||||
// List of source files that should only be used when passing -source 1.9 or higher
|
||||
Srcs []string `android:"path"`
|
||||
|
||||
// List of javac flags that should only be used when passing -source 1.9
|
||||
// List of javac flags that should only be used when passing -source 1.9 or higher
|
||||
Javacflags []string
|
||||
}
|
||||
|
||||
|
@ -433,6 +433,7 @@ type jniDependencyTag struct {
|
|||
var (
|
||||
staticLibTag = dependencyTag{name: "staticlib"}
|
||||
libTag = dependencyTag{name: "javalib"}
|
||||
java9LibTag = dependencyTag{name: "java9lib"}
|
||||
pluginTag = dependencyTag{name: "plugin"}
|
||||
bootClasspathTag = dependencyTag{name: "bootclasspath"}
|
||||
systemModulesTag = dependencyTag{name: "system modules"}
|
||||
|
@ -461,12 +462,16 @@ type checkVendorModuleContext interface {
|
|||
type sdkDep struct {
|
||||
useModule, useFiles, useDefaultLibs, invalidVersion bool
|
||||
|
||||
modules []string
|
||||
// The modules that will be added to the bootclasspath when targeting 1.8 or lower
|
||||
bootclasspath []string
|
||||
|
||||
// The default system modules to use. Will be an empty string if no system
|
||||
// modules are to be used.
|
||||
systemModules string
|
||||
|
||||
// The modules that will be added ot the classpath when targeting 1.9 or higher
|
||||
java9Classpath []string
|
||||
|
||||
frameworkResModule string
|
||||
|
||||
jars android.Paths
|
||||
|
@ -524,7 +529,6 @@ func (j *Module) targetSdkVersion() string {
|
|||
func (j *Module) deps(ctx android.BottomUpMutatorContext) {
|
||||
if ctx.Device() {
|
||||
sdkDep := decodeSdkDep(ctx, sdkContext(j))
|
||||
if sdkDep.hasStandardLibs() {
|
||||
if sdkDep.useDefaultLibs {
|
||||
ctx.AddVariationDependencies(nil, bootClasspathTag, config.DefaultBootclasspathLibraries...)
|
||||
ctx.AddVariationDependencies(nil, systemModulesTag, config.DefaultSystemModules)
|
||||
|
@ -532,18 +536,15 @@ func (j *Module) deps(ctx android.BottomUpMutatorContext) {
|
|||
ctx.AddVariationDependencies(nil, libTag, config.DefaultLibraries...)
|
||||
}
|
||||
} else if sdkDep.useModule {
|
||||
ctx.AddVariationDependencies(nil, bootClasspathTag, sdkDep.bootclasspath...)
|
||||
ctx.AddVariationDependencies(nil, systemModulesTag, sdkDep.systemModules)
|
||||
ctx.AddVariationDependencies(nil, bootClasspathTag, sdkDep.modules...)
|
||||
if j.deviceProperties.EffectiveOptimizeEnabled() {
|
||||
ctx.AddVariationDependencies(nil, java9LibTag, sdkDep.java9Classpath...)
|
||||
if j.deviceProperties.EffectiveOptimizeEnabled() && sdkDep.hasStandardLibs() {
|
||||
ctx.AddVariationDependencies(nil, proguardRaiseTag, config.DefaultBootclasspathLibraries...)
|
||||
ctx.AddVariationDependencies(nil, proguardRaiseTag, config.DefaultLibraries...)
|
||||
}
|
||||
}
|
||||
} else if sdkDep.systemModules != "" {
|
||||
// Add the system modules to both the system modules and bootclasspath.
|
||||
ctx.AddVariationDependencies(nil, systemModulesTag, sdkDep.systemModules)
|
||||
ctx.AddVariationDependencies(nil, bootClasspathTag, sdkDep.systemModules)
|
||||
}
|
||||
|
||||
if ctx.ModuleName() == "android_stubs_current" ||
|
||||
ctx.ModuleName() == "android_system_stubs_current" ||
|
||||
ctx.ModuleName() == "android_test_stubs_current" {
|
||||
|
@ -635,6 +636,7 @@ func (j *Module) aidlFlags(ctx android.ModuleContext, aidlPreprocess android.Opt
|
|||
|
||||
type deps struct {
|
||||
classpath classpath
|
||||
java9Classpath classpath
|
||||
bootClasspath classpath
|
||||
processorPath classpath
|
||||
processorClasses []string
|
||||
|
@ -744,7 +746,8 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
|||
if ctx.Device() {
|
||||
sdkDep := decodeSdkDep(ctx, sdkContext(j))
|
||||
if sdkDep.invalidVersion {
|
||||
ctx.AddMissingDependencies(sdkDep.modules)
|
||||
ctx.AddMissingDependencies(sdkDep.bootclasspath)
|
||||
ctx.AddMissingDependencies(sdkDep.java9Classpath)
|
||||
} else if sdkDep.useFiles {
|
||||
// sdkDep.jar is actually equivalent to turbine header.jar.
|
||||
deps.classpath = append(deps.classpath, sdkDep.jars...)
|
||||
|
@ -792,6 +795,8 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
|||
// sdk lib names from dependencies are re-exported
|
||||
j.exportedSdkLibs = append(j.exportedSdkLibs, dep.ExportedSdkLibs()...)
|
||||
deps.aidlIncludeDirs = append(deps.aidlIncludeDirs, dep.AidlIncludeDirs()...)
|
||||
case java9LibTag:
|
||||
deps.java9Classpath = append(deps.java9Classpath, dep.HeaderJars()...)
|
||||
case staticLibTag:
|
||||
deps.classpath = append(deps.classpath, dep.HeaderJars()...)
|
||||
deps.staticJars = append(deps.staticJars, dep.ImplementationJars()...)
|
||||
|
@ -865,8 +870,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
|||
return deps
|
||||
}
|
||||
|
||||
func getJavaVersion(ctx android.ModuleContext, javaVersion string, sdkContext sdkContext) string {
|
||||
var ret string
|
||||
func getJavaVersion(ctx android.ModuleContext, javaVersion string, sdkContext sdkContext) javaVersion {
|
||||
v := sdkContext.sdkVersion()
|
||||
// For PDK builds, use the latest SDK version instead of "current"
|
||||
if ctx.Config().IsPdkBuild() &&
|
||||
|
@ -884,41 +888,65 @@ func getJavaVersion(ctx android.ModuleContext, javaVersion string, sdkContext sd
|
|||
ctx.PropertyErrorf("sdk_version", "%s", err)
|
||||
}
|
||||
if javaVersion != "" {
|
||||
ret = normalizeJavaVersion(ctx, javaVersion)
|
||||
return normalizeJavaVersion(ctx, javaVersion)
|
||||
} else if ctx.Device() && sdk <= 23 {
|
||||
ret = "1.7"
|
||||
return JAVA_VERSION_7
|
||||
} else if ctx.Device() && sdk <= 29 {
|
||||
ret = "1.8"
|
||||
} else if ctx.Device() &&
|
||||
sdkContext.sdkVersion() != "" &&
|
||||
sdkContext.sdkVersion() != "none" &&
|
||||
sdkContext.sdkVersion() != "core_platform" &&
|
||||
sdk == android.FutureApiLevel {
|
||||
// TODO(ccross): once we generate stubs we should be able to use 1.9 for sdk_version: "current"
|
||||
ret = "1.8"
|
||||
return JAVA_VERSION_8
|
||||
} else if ctx.Device() && ctx.Config().UnbundledBuildUsePrebuiltSdks() {
|
||||
// TODO(b/142896162): once we have prebuilt system modules we can use 1.9 for unbundled builds
|
||||
return JAVA_VERSION_8
|
||||
} else {
|
||||
ret = "1.9"
|
||||
return JAVA_VERSION_9
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func normalizeJavaVersion(ctx android.ModuleContext, javaVersion string) string {
|
||||
type javaVersion int
|
||||
|
||||
const (
|
||||
JAVA_VERSION_UNSUPPORTED = 0
|
||||
JAVA_VERSION_6 = 6
|
||||
JAVA_VERSION_7 = 7
|
||||
JAVA_VERSION_8 = 8
|
||||
JAVA_VERSION_9 = 9
|
||||
)
|
||||
|
||||
func (v javaVersion) String() string {
|
||||
switch v {
|
||||
case JAVA_VERSION_6:
|
||||
return "1.6"
|
||||
case JAVA_VERSION_7:
|
||||
return "1.7"
|
||||
case JAVA_VERSION_8:
|
||||
return "1.8"
|
||||
case JAVA_VERSION_9:
|
||||
return "1.9"
|
||||
default:
|
||||
return "unsupported"
|
||||
}
|
||||
}
|
||||
|
||||
// Returns true if javac targeting this version uses system modules instead of a bootclasspath.
|
||||
func (v javaVersion) usesJavaModules() bool {
|
||||
return v >= 9
|
||||
}
|
||||
|
||||
func normalizeJavaVersion(ctx android.BaseModuleContext, javaVersion string) javaVersion {
|
||||
switch javaVersion {
|
||||
case "1.6", "6":
|
||||
return "1.6"
|
||||
return JAVA_VERSION_6
|
||||
case "1.7", "7":
|
||||
return "1.7"
|
||||
return JAVA_VERSION_7
|
||||
case "1.8", "8":
|
||||
return "1.8"
|
||||
return JAVA_VERSION_8
|
||||
case "1.9", "9":
|
||||
return "1.9"
|
||||
return JAVA_VERSION_9
|
||||
case "10", "11":
|
||||
ctx.PropertyErrorf("java_version", "Java language levels above 9 are not supported")
|
||||
return "unsupported"
|
||||
return JAVA_VERSION_UNSUPPORTED
|
||||
default:
|
||||
ctx.PropertyErrorf("java_version", "Unrecognized Java language level")
|
||||
return "unrecognized"
|
||||
return JAVA_VERSION_UNSUPPORTED
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -931,7 +959,7 @@ func (j *Module) collectBuilderFlags(ctx android.ModuleContext, deps deps) javaB
|
|||
|
||||
// javac flags.
|
||||
javacFlags := j.properties.Javacflags
|
||||
if flags.javaVersion == "1.9" {
|
||||
if flags.javaVersion.usesJavaModules() {
|
||||
javacFlags = append(javacFlags, j.properties.Openjdk9.Javacflags...)
|
||||
}
|
||||
if ctx.Config().MinimizeJavaDebugInfo() {
|
||||
|
@ -959,13 +987,13 @@ func (j *Module) collectBuilderFlags(ctx android.ModuleContext, deps deps) javaB
|
|||
// classpath
|
||||
flags.bootClasspath = append(flags.bootClasspath, deps.bootClasspath...)
|
||||
flags.classpath = append(flags.classpath, deps.classpath...)
|
||||
flags.java9Classpath = append(flags.java9Classpath, deps.java9Classpath...)
|
||||
flags.processorPath = append(flags.processorPath, deps.processorPath...)
|
||||
|
||||
flags.processor = strings.Join(deps.processorClasses, ",")
|
||||
|
||||
if len(flags.bootClasspath) == 0 && ctx.Host() && flags.javaVersion != "1.9" &&
|
||||
decodeSdkDep(ctx, sdkContext(j)).hasStandardLibs() &&
|
||||
inList(flags.javaVersion, []string{"1.6", "1.7", "1.8"}) {
|
||||
if len(flags.bootClasspath) == 0 && ctx.Host() && !flags.javaVersion.usesJavaModules() &&
|
||||
decodeSdkDep(ctx, sdkContext(j)).hasStandardLibs() {
|
||||
// Give host-side tools a version of OpenJDK's standard libraries
|
||||
// close to what they're targeting. As of Dec 2017, AOSP is only
|
||||
// bundling OpenJDK 8 and 9, so nothing < 8 is available.
|
||||
|
@ -989,7 +1017,7 @@ func (j *Module) collectBuilderFlags(ctx android.ModuleContext, deps deps) javaB
|
|||
}
|
||||
}
|
||||
|
||||
if j.properties.Patch_module != nil && flags.javaVersion == "1.9" {
|
||||
if j.properties.Patch_module != nil && flags.javaVersion.usesJavaModules() {
|
||||
// Manually specify build directory in case it is not under the repo root.
|
||||
// (javac doesn't seem to expand into symbolc links when searching for patch-module targets, so
|
||||
// just adding a symlink under the root doesn't help.)
|
||||
|
@ -1022,7 +1050,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
|
|||
deps := j.collectDeps(ctx)
|
||||
flags := j.collectBuilderFlags(ctx, deps)
|
||||
|
||||
if flags.javaVersion == "1.9" {
|
||||
if flags.javaVersion.usesJavaModules() {
|
||||
j.properties.Srcs = append(j.properties.Srcs, j.properties.Openjdk9.Srcs...)
|
||||
}
|
||||
srcFiles := android.PathsForModuleSrcExcludes(ctx, j.properties.Srcs, j.properties.Exclude_srcs)
|
||||
|
|
|
@ -148,9 +148,9 @@ func testContext(bp string, fs map[string][]byte) *android.TestContext {
|
|||
"prebuilts/sdk/17/public/android.jar": nil,
|
||||
"prebuilts/sdk/17/public/framework.aidl": nil,
|
||||
"prebuilts/sdk/17/system/android.jar": nil,
|
||||
"prebuilts/sdk/25/public/android.jar": nil,
|
||||
"prebuilts/sdk/25/public/framework.aidl": nil,
|
||||
"prebuilts/sdk/25/system/android.jar": nil,
|
||||
"prebuilts/sdk/29/public/android.jar": nil,
|
||||
"prebuilts/sdk/29/public/framework.aidl": nil,
|
||||
"prebuilts/sdk/29/system/android.jar": nil,
|
||||
"prebuilts/sdk/current/core/android.jar": nil,
|
||||
"prebuilts/sdk/current/public/android.jar": nil,
|
||||
"prebuilts/sdk/current/public/framework.aidl": nil,
|
||||
|
|
|
@ -141,8 +141,8 @@ func kotlinKapt(ctx android.ModuleContext, outputFile android.WritablePath,
|
|||
}
|
||||
|
||||
encodedJavacFlags := kaptEncodeFlags([][2]string{
|
||||
{"-source", flags.javaVersion},
|
||||
{"-target", flags.javaVersion},
|
||||
{"-source", flags.javaVersion.String()},
|
||||
{"-target", flags.javaVersion.String()},
|
||||
})
|
||||
|
||||
kotlinName := filepath.Join(ctx.ModuleDir(), ctx.ModuleSubDir(), ctx.ModuleName())
|
||||
|
|
23
java/sdk.go
23
java/sdk.go
|
@ -122,7 +122,7 @@ func decodeSdkDep(ctx android.BaseModuleContext, sdkContext sdkContext) sdkDep {
|
|||
if (!jarPath.Valid() || !aidlPath.Valid()) && ctx.Config().AllowMissingDependencies() {
|
||||
return sdkDep{
|
||||
invalidVersion: true,
|
||||
modules: []string{fmt.Sprintf("sdk_%s_%s_android", api, v)},
|
||||
bootclasspath: []string{fmt.Sprintf("sdk_%s_%s_android", api, v)},
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -144,20 +144,14 @@ func decodeSdkDep(ctx android.BaseModuleContext, sdkContext sdkContext) sdkDep {
|
|||
}
|
||||
|
||||
toModule := func(m, r string, aidl android.Path) sdkDep {
|
||||
ret := sdkDep{
|
||||
return sdkDep{
|
||||
useModule: true,
|
||||
modules: []string{m, config.DefaultLambdaStubsLibrary},
|
||||
systemModules: m + "_system_modules",
|
||||
bootclasspath: []string{m, config.DefaultLambdaStubsLibrary},
|
||||
systemModules: "core-current-stubs-system-modules",
|
||||
java9Classpath: []string{m},
|
||||
frameworkResModule: r,
|
||||
aidl: android.OptionalPathForPath(aidl),
|
||||
}
|
||||
|
||||
if m == "core.current.stubs" {
|
||||
ret.systemModules = "core-current-stubs-system-modules"
|
||||
// core_current does not include framework classes.
|
||||
ret.noFrameworksLibs = true
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
// Ensures that the specificed system SDK version is one of BOARD_SYSTEMSDK_VERSIONS (for vendor apks)
|
||||
|
@ -192,13 +186,16 @@ func decodeSdkDep(ctx android.BaseModuleContext, sdkContext sdkContext) sdkDep {
|
|||
ctx.PropertyErrorf("sdk_version",
|
||||
`system_modules is required to be set to a non-empty value when sdk_version is "none", did you mean sdk_version: "core_platform"?`)
|
||||
} else if systemModules == "none" {
|
||||
// Normalize no system modules to an empty string.
|
||||
systemModules = ""
|
||||
return sdkDep{
|
||||
noStandardLibs: true,
|
||||
}
|
||||
}
|
||||
|
||||
return sdkDep{
|
||||
useModule: true,
|
||||
noStandardLibs: true,
|
||||
systemModules: systemModules,
|
||||
bootclasspath: []string{systemModules},
|
||||
}
|
||||
case "core_platform":
|
||||
return sdkDep{
|
||||
|
|
148
java/sdk_test.go
148
java/sdk_test.go
|
@ -34,16 +34,25 @@ func TestClasspath(t *testing.T) {
|
|||
moduleType string
|
||||
host android.OsClass
|
||||
properties string
|
||||
|
||||
// for java 8
|
||||
bootclasspath []string
|
||||
java8classpath []string
|
||||
|
||||
// for java 9
|
||||
system string
|
||||
classpath []string
|
||||
java9classpath []string
|
||||
|
||||
forces8 bool // if set, javac will always be called with java 8 arguments
|
||||
|
||||
aidl string
|
||||
}{
|
||||
{
|
||||
name: "default",
|
||||
bootclasspath: config.DefaultBootclasspathLibraries,
|
||||
system: config.DefaultSystemModules,
|
||||
classpath: config.DefaultLibraries,
|
||||
java8classpath: config.DefaultLibraries,
|
||||
java9classpath: config.DefaultLibraries,
|
||||
aidl: "-Iframework/aidl",
|
||||
},
|
||||
{
|
||||
|
@ -51,7 +60,7 @@ func TestClasspath(t *testing.T) {
|
|||
properties: `sdk_version:"core_platform"`,
|
||||
bootclasspath: config.DefaultBootclasspathLibraries,
|
||||
system: config.DefaultSystemModules,
|
||||
classpath: []string{},
|
||||
java8classpath: []string{},
|
||||
aidl: "",
|
||||
},
|
||||
{
|
||||
|
@ -59,24 +68,26 @@ func TestClasspath(t *testing.T) {
|
|||
properties: `sdk_version: "",`,
|
||||
bootclasspath: config.DefaultBootclasspathLibraries,
|
||||
system: config.DefaultSystemModules,
|
||||
classpath: config.DefaultLibraries,
|
||||
java8classpath: config.DefaultLibraries,
|
||||
java9classpath: config.DefaultLibraries,
|
||||
aidl: "-Iframework/aidl",
|
||||
},
|
||||
{
|
||||
|
||||
name: "sdk v25",
|
||||
properties: `sdk_version: "25",`,
|
||||
name: "sdk v29",
|
||||
properties: `sdk_version: "29",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
|
||||
classpath: []string{"prebuilts/sdk/25/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/25/public/framework.aidl",
|
||||
forces8: true,
|
||||
java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/29/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
|
||||
name: "current",
|
||||
properties: `sdk_version: "current",`,
|
||||
bootclasspath: []string{"android_stubs_current", "core-lambda-stubs"},
|
||||
system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
|
||||
system: "core-current-stubs-system-modules",
|
||||
java9classpath: []string{"android_stubs_current"},
|
||||
aidl: "-p" + buildDir + "/framework.aidl",
|
||||
},
|
||||
{
|
||||
|
@ -84,24 +95,26 @@ func TestClasspath(t *testing.T) {
|
|||
name: "system_current",
|
||||
properties: `sdk_version: "system_current",`,
|
||||
bootclasspath: []string{"android_system_stubs_current", "core-lambda-stubs"},
|
||||
system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
|
||||
system: "core-current-stubs-system-modules",
|
||||
java9classpath: []string{"android_system_stubs_current"},
|
||||
aidl: "-p" + buildDir + "/framework.aidl",
|
||||
},
|
||||
{
|
||||
|
||||
name: "system_25",
|
||||
properties: `sdk_version: "system_25",`,
|
||||
name: "system_29",
|
||||
properties: `sdk_version: "system_29",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
|
||||
classpath: []string{"prebuilts/sdk/25/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/25/public/framework.aidl",
|
||||
forces8: true,
|
||||
java8classpath: []string{"prebuilts/sdk/29/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/29/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
|
||||
name: "test_current",
|
||||
properties: `sdk_version: "test_current",`,
|
||||
bootclasspath: []string{"android_test_stubs_current", "core-lambda-stubs"},
|
||||
system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
|
||||
system: "core-current-stubs-system-modules",
|
||||
java9classpath: []string{"android_test_stubs_current"},
|
||||
aidl: "-p" + buildDir + "/framework.aidl",
|
||||
},
|
||||
{
|
||||
|
@ -109,7 +122,8 @@ func TestClasspath(t *testing.T) {
|
|||
name: "core_current",
|
||||
properties: `sdk_version: "core_current",`,
|
||||
bootclasspath: []string{"core.current.stubs", "core-lambda-stubs"},
|
||||
system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
|
||||
system: "core-current-stubs-system-modules",
|
||||
java9classpath: []string{"core.current.stubs"},
|
||||
},
|
||||
{
|
||||
|
||||
|
@ -117,7 +131,7 @@ func TestClasspath(t *testing.T) {
|
|||
properties: `sdk_version: "none", system_modules: "none"`,
|
||||
system: "none",
|
||||
bootclasspath: []string{`""`},
|
||||
classpath: []string{},
|
||||
java8classpath: []string{},
|
||||
},
|
||||
{
|
||||
|
||||
|
@ -125,7 +139,7 @@ func TestClasspath(t *testing.T) {
|
|||
properties: `sdk_version: "none", system_modules: "core-platform-api-stubs-system-modules"`,
|
||||
system: "core-platform-api-stubs-system-modules",
|
||||
bootclasspath: []string{"core-platform-api-stubs-system-modules-lib"},
|
||||
classpath: []string{},
|
||||
java8classpath: []string{},
|
||||
},
|
||||
{
|
||||
|
||||
|
@ -134,31 +148,31 @@ func TestClasspath(t *testing.T) {
|
|||
properties: ``,
|
||||
host: android.Host,
|
||||
bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"},
|
||||
classpath: []string{},
|
||||
java8classpath: []string{},
|
||||
},
|
||||
{
|
||||
|
||||
name: "host supported default",
|
||||
host: android.Host,
|
||||
properties: `host_supported: true,`,
|
||||
classpath: []string{},
|
||||
java8classpath: []string{},
|
||||
bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"},
|
||||
},
|
||||
{
|
||||
name: "host supported nostdlib",
|
||||
host: android.Host,
|
||||
properties: `host_supported: true, sdk_version: "none", system_modules: "none"`,
|
||||
classpath: []string{},
|
||||
java8classpath: []string{},
|
||||
},
|
||||
{
|
||||
|
||||
name: "unbundled sdk v25",
|
||||
name: "unbundled sdk v29",
|
||||
unbundled: true,
|
||||
properties: `sdk_version: "25",`,
|
||||
properties: `sdk_version: "29",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
|
||||
classpath: []string{"prebuilts/sdk/25/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/25/public/framework.aidl",
|
||||
forces8: true,
|
||||
java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/29/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
|
||||
|
@ -166,8 +180,8 @@ func TestClasspath(t *testing.T) {
|
|||
unbundled: true,
|
||||
properties: `sdk_version: "current",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
|
||||
classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
forces8: true,
|
||||
java8classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/current/public/framework.aidl",
|
||||
},
|
||||
|
||||
|
@ -175,27 +189,27 @@ func TestClasspath(t *testing.T) {
|
|||
name: "pdk default",
|
||||
pdk: true,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
|
||||
classpath: []string{"prebuilts/sdk/25/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/25/public/framework.aidl",
|
||||
forces8: true,
|
||||
java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/29/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
name: "pdk current",
|
||||
pdk: true,
|
||||
properties: `sdk_version: "current",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
|
||||
classpath: []string{"prebuilts/sdk/25/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/25/public/framework.aidl",
|
||||
forces8: true,
|
||||
java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/29/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
name: "pdk 25",
|
||||
name: "pdk 29",
|
||||
pdk: true,
|
||||
properties: `sdk_version: "25",`,
|
||||
properties: `sdk_version: "29",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
|
||||
classpath: []string{"prebuilts/sdk/25/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/25/public/framework.aidl",
|
||||
forces8: true,
|
||||
java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/29/public/framework.aidl",
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -235,7 +249,8 @@ func TestClasspath(t *testing.T) {
|
|||
}
|
||||
|
||||
bootclasspath := convertModulesToPaths(testcase.bootclasspath)
|
||||
classpath := convertModulesToPaths(testcase.classpath)
|
||||
java8classpath := convertModulesToPaths(testcase.java8classpath)
|
||||
java9classpath := convertModulesToPaths(testcase.java9classpath)
|
||||
|
||||
bc := ""
|
||||
var bcDeps []string
|
||||
|
@ -246,18 +261,20 @@ func TestClasspath(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
c := ""
|
||||
if len(classpath) > 0 {
|
||||
c = "-classpath " + strings.Join(classpath, ":")
|
||||
j8c := ""
|
||||
if len(java8classpath) > 0 {
|
||||
j8c = "-classpath " + strings.Join(java8classpath, ":")
|
||||
}
|
||||
|
||||
j9c := ""
|
||||
if len(java9classpath) > 0 {
|
||||
j9c = "-classpath " + strings.Join(java9classpath, ":")
|
||||
}
|
||||
|
||||
system := ""
|
||||
var systemDeps []string
|
||||
if testcase.system == "none" {
|
||||
system = "--system=none"
|
||||
} else if testcase.system == "bootclasspath" {
|
||||
system = bc
|
||||
systemDeps = bcDeps
|
||||
} else if testcase.system != "" {
|
||||
system = "--system=" + filepath.Join(buildDir, ".intermediates", testcase.system, "android_common", "system")
|
||||
// The module-relative parts of these paths are hardcoded in system_modules.go:
|
||||
|
@ -280,7 +297,7 @@ func TestClasspath(t *testing.T) {
|
|||
|
||||
got := javac.Args["bootClasspath"]
|
||||
expected := ""
|
||||
if isJava8 {
|
||||
if isJava8 || testcase.forces8 {
|
||||
expected = bc
|
||||
deps = append(deps, bcDeps...)
|
||||
} else {
|
||||
|
@ -291,11 +308,17 @@ func TestClasspath(t *testing.T) {
|
|||
t.Errorf("bootclasspath expected %q != got %q", expected, got)
|
||||
}
|
||||
|
||||
got = javac.Args["classpath"]
|
||||
if got != c {
|
||||
t.Errorf("classpath expected %q != got %q", c, got)
|
||||
if isJava8 || testcase.forces8 {
|
||||
expected = j8c
|
||||
deps = append(deps, java8classpath...)
|
||||
} else {
|
||||
expected = j9c
|
||||
deps = append(deps, java9classpath...)
|
||||
}
|
||||
got = javac.Args["classpath"]
|
||||
if got != expected {
|
||||
t.Errorf("classpath expected %q != got %q", expected, got)
|
||||
}
|
||||
deps = append(deps, classpath...)
|
||||
|
||||
if !reflect.DeepEqual(javac.Implicits.Strings(), deps) {
|
||||
t.Errorf("implicits expected %q != got %q", deps, javac.Implicits.Strings())
|
||||
|
@ -366,8 +389,23 @@ func TestClasspath(t *testing.T) {
|
|||
checkClasspath(t, ctx, true /* isJava8 */)
|
||||
})
|
||||
|
||||
// TODO(b/142896162): Add a with PLATFORM_VERSION_CODENAME=REL, javac -source 9 -target 9, when that all works.
|
||||
// Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 9 -target 9
|
||||
t.Run("REL + Java language level 9", func(t *testing.T) {
|
||||
config := testConfig(nil)
|
||||
config.TestProductVariables.Platform_sdk_codename = proptools.StringPtr("REL")
|
||||
config.TestProductVariables.Platform_sdk_final = proptools.BoolPtr(true)
|
||||
|
||||
if testcase.unbundled {
|
||||
config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true)
|
||||
}
|
||||
if testcase.pdk {
|
||||
config.TestProductVariables.Pdk = proptools.BoolPtr(true)
|
||||
}
|
||||
ctx := testContext(bp, nil)
|
||||
run(t, ctx, config)
|
||||
|
||||
checkClasspath(t, ctx, false /* isJava8 */)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue