diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/base.go | 54 | ||||
-rw-r--r-- | java/droidstubs.go | 6 | ||||
-rw-r--r-- | java/droidstubs_test.go | 17 | ||||
-rw-r--r-- | java/java_test.go | 4 | ||||
-rw-r--r-- | java/lint.go | 19 | ||||
-rw-r--r-- | java/robolectric.go | 4 |
6 files changed, 65 insertions, 39 deletions
diff --git a/java/base.go b/java/base.go index bcb722603..ab5a7d9a2 100644 --- a/java/base.go +++ b/java/base.go @@ -447,9 +447,11 @@ type Module struct { // installed file for hostdex copy hostdexInstallFile android.InstallPath - // list of .java files and srcjars that was passed to javac - compiledJavaSrcs android.Paths - compiledSrcJars android.Paths + // list of unique .java and .kt source files + uniqueSrcFiles android.Paths + + // list of srcjars that was passed to javac + compiledSrcJars android.Paths // manifest file to use instead of properties.Manifest overrideManifest android.OptionalPath @@ -1078,15 +1080,26 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) { jarName := ctx.ModuleName() + ".jar" - javaSrcFiles := srcFiles.FilterByExt(".java") - var uniqueSrcFiles android.Paths + var uniqueJavaFiles android.Paths set := make(map[string]bool) - for _, v := range javaSrcFiles { + for _, v := range srcFiles.FilterByExt(".java") { if _, found := set[v.String()]; !found { set[v.String()] = true - uniqueSrcFiles = append(uniqueSrcFiles, v) + uniqueJavaFiles = append(uniqueJavaFiles, v) } } + var uniqueKtFiles android.Paths + for _, v := range srcFiles.FilterByExt(".kt") { + if _, found := set[v.String()]; !found { + set[v.String()] = true + uniqueKtFiles = append(uniqueKtFiles, v) + } + } + + var uniqueSrcFiles android.Paths + uniqueSrcFiles = append(uniqueSrcFiles, uniqueJavaFiles...) + uniqueSrcFiles = append(uniqueSrcFiles, uniqueKtFiles...) + j.uniqueSrcFiles = uniqueSrcFiles // We don't currently run annotation processors in turbine, which means we can't use turbine // generated header jars when an annotation processor that generates API is enabled. One @@ -1094,7 +1107,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) { // is used to run all of the annotation processors. disableTurbine := deps.disableTurbine - // Collect .java files for AIDEGen + // Collect .java and .kt files for AIDEGen j.expandIDEInfoCompiledSrcs = append(j.expandIDEInfoCompiledSrcs, uniqueSrcFiles.Strings()...) var kotlinJars android.Paths @@ -1132,12 +1145,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) { flags.kotlincFlags += "$kotlincFlags" } - var kotlinSrcFiles android.Paths - kotlinSrcFiles = append(kotlinSrcFiles, uniqueSrcFiles...) - kotlinSrcFiles = append(kotlinSrcFiles, srcFiles.FilterByExt(".kt")...) - - // Collect .kt files for AIDEGen - j.expandIDEInfoCompiledSrcs = append(j.expandIDEInfoCompiledSrcs, srcFiles.FilterByExt(".kt").Strings()...) + // Collect common .kt files for AIDEGen j.expandIDEInfoCompiledSrcs = append(j.expandIDEInfoCompiledSrcs, kotlinCommonSrcFiles.Strings()...) flags.classpath = append(flags.classpath, deps.kotlinStdlib...) @@ -1150,7 +1158,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) { // Use kapt for annotation processing kaptSrcJar := android.PathForModuleOut(ctx, "kapt", "kapt-sources.jar") kaptResJar := android.PathForModuleOut(ctx, "kapt", "kapt-res.jar") - kotlinKapt(ctx, kaptSrcJar, kaptResJar, kotlinSrcFiles, kotlinCommonSrcFiles, srcJars, flags) + kotlinKapt(ctx, kaptSrcJar, kaptResJar, uniqueSrcFiles, kotlinCommonSrcFiles, srcJars, flags) srcJars = append(srcJars, kaptSrcJar) kotlinJars = append(kotlinJars, kaptResJar) // Disable annotation processing in javac, it's already been handled by kapt @@ -1160,7 +1168,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) { kotlinJar := android.PathForModuleOut(ctx, "kotlin", jarName) kotlinHeaderJar := android.PathForModuleOut(ctx, "kotlin_headers", jarName) - kotlinCompile(ctx, kotlinJar, kotlinHeaderJar, kotlinSrcFiles, kotlinCommonSrcFiles, srcJars, flags) + kotlinCompile(ctx, kotlinJar, kotlinHeaderJar, uniqueSrcFiles, kotlinCommonSrcFiles, srcJars, flags) if ctx.Failed() { return } @@ -1185,8 +1193,6 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) { jars := append(android.Paths(nil), kotlinJars...) - // Store the list of .java files that was passed to javac - j.compiledJavaSrcs = uniqueSrcFiles j.compiledSrcJars = srcJars enableSharding := false @@ -1201,12 +1207,12 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) { // with sharding enabled. See: b/77284273. } headerJarFileWithoutDepsOrJarjar, j.headerJarFile = - j.compileJavaHeader(ctx, uniqueSrcFiles, srcJars, deps, flags, jarName, kotlinHeaderJars) + j.compileJavaHeader(ctx, uniqueJavaFiles, srcJars, deps, flags, jarName, kotlinHeaderJars) if ctx.Failed() { return } } - if len(uniqueSrcFiles) > 0 || len(srcJars) > 0 { + if len(uniqueJavaFiles) > 0 || len(srcJars) > 0 { hasErrorproneableFiles := false for _, ext := range j.sourceExtensions { if ext != ".proto" && ext != ".aidl" { @@ -1231,7 +1237,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) { errorproneFlags := enableErrorproneFlags(flags) errorprone := android.PathForModuleOut(ctx, "errorprone", jarName) - transformJavaToClasses(ctx, errorprone, -1, uniqueSrcFiles, srcJars, errorproneFlags, nil, + transformJavaToClasses(ctx, errorprone, -1, uniqueJavaFiles, srcJars, errorproneFlags, nil, "errorprone", "errorprone") extraJarDeps = append(extraJarDeps, errorprone) @@ -1243,8 +1249,8 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) { } shardSize := int(*(j.properties.Javac_shard_size)) var shardSrcs []android.Paths - if len(uniqueSrcFiles) > 0 { - shardSrcs = android.ShardPaths(uniqueSrcFiles, shardSize) + if len(uniqueJavaFiles) > 0 { + shardSrcs = android.ShardPaths(uniqueJavaFiles, shardSize) for idx, shardSrc := range shardSrcs { classes := j.compileJavaClasses(ctx, jarName, idx, shardSrc, nil, flags, extraJarDeps) @@ -1257,7 +1263,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) { jars = append(jars, classes) } } else { - classes := j.compileJavaClasses(ctx, jarName, -1, uniqueSrcFiles, srcJars, flags, extraJarDeps) + classes := j.compileJavaClasses(ctx, jarName, -1, uniqueJavaFiles, srcJars, flags, extraJarDeps) jars = append(jars, classes) } if ctx.Failed() { diff --git a/java/droidstubs.go b/java/droidstubs.go index d9efb408f..5777b185c 100644 --- a/java/droidstubs.go +++ b/java/droidstubs.go @@ -28,7 +28,7 @@ import ( ) // The values allowed for Droidstubs' Api_levels_sdk_type -var allowedApiLevelSdkTypes = []string{"public", "system", "module-lib"} +var allowedApiLevelSdkTypes = []string{"public", "system", "module-lib", "system-server"} func init() { RegisterStubsBuildComponents(android.InitRegistrationContext) @@ -134,7 +134,7 @@ type DroidstubsProperties struct { // the dirs which Metalava extracts API levels annotations from. Api_levels_annotations_dirs []string - // the sdk kind which Metalava extracts API levels annotations from. Supports 'public', 'system' and 'module-lib' for now; defaults to public. + // the sdk kind which Metalava extracts API levels annotations from. Supports 'public', 'system', 'module-lib' and 'system-server'; defaults to public. Api_levels_sdk_type *string // the filename which Metalava extracts API levels annotations from. Defaults to android.jar. @@ -445,6 +445,8 @@ func (d *Droidstubs) apiLevelsGenerationFlags(ctx android.ModuleContext, cmd *an // for older releases. Similarly, module-lib falls back to system API. var sdkDirs []string switch proptools.StringDefault(d.properties.Api_levels_sdk_type, "public") { + case "system-server": + sdkDirs = []string{"system-server", "module-lib", "system", "public"} case "module-lib": sdkDirs = []string{"module-lib", "system", "public"} case "system": diff --git a/java/droidstubs_test.go b/java/droidstubs_test.go index 24436921c..25f8c8667 100644 --- a/java/droidstubs_test.go +++ b/java/droidstubs_test.go @@ -122,7 +122,7 @@ func getAndroidJarPatternsForDroidstubs(t *testing.T, sdkType string) []string { "some-other-exported-dir", ], api_levels_annotations_enabled: true, - api_levels_sdk_type: "%s", + api_levels_sdk_type: "%s", } `, sdkType), map[string][]byte{ @@ -169,6 +169,21 @@ func TestModuleLibDroidstubs(t *testing.T) { }, patterns) } +func TestSystemServerDroidstubs(t *testing.T) { + patterns := getAndroidJarPatternsForDroidstubs(t, "system-server") + + android.AssertArrayString(t, "order of patterns", []string{ + "--android-jar-pattern somedir/%/system-server/android.jar", + "--android-jar-pattern someotherdir/%/system-server/android.jar", + "--android-jar-pattern somedir/%/module-lib/android.jar", + "--android-jar-pattern someotherdir/%/module-lib/android.jar", + "--android-jar-pattern somedir/%/system/android.jar", + "--android-jar-pattern someotherdir/%/system/android.jar", + "--android-jar-pattern somedir/%/public/android.jar", + "--android-jar-pattern someotherdir/%/public/android.jar", + }, patterns) +} + func TestDroidstubsSandbox(t *testing.T) { ctx, _ := testJavaWithFS(t, ` genrule { diff --git a/java/java_test.go b/java/java_test.go index 7f0cea718..d2373e349 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -588,8 +588,8 @@ func TestPrebuilts(t *testing.T) { sdklibStubsJar := ctx.ModuleForTests("sdklib.stubs", "android_common").Rule("combineJar").Output fooLibrary := fooModule.Module().(*Library) - assertDeepEquals(t, "foo java sources incorrect", - []string{"a.java"}, fooLibrary.compiledJavaSrcs.Strings()) + assertDeepEquals(t, "foo unique sources incorrect", + []string{"a.java"}, fooLibrary.uniqueSrcFiles.Strings()) assertDeepEquals(t, "foo java source jars incorrect", []string{".intermediates/stubs-source/android_common/stubs-source-stubs.srcjar"}, diff --git a/java/lint.go b/java/lint.go index 931820d74..fcd6d31ff 100644 --- a/java/lint.go +++ b/java/lint.go @@ -473,20 +473,23 @@ func (l *linter) lint(ctx android.ModuleContext) { cmd.FlagWithOutput("--write-reference-baseline ", baseline) - cmd.Text("|| (").Text("if [ -e").Input(text).Text("]; then cat").Input(text).Text("; fi; exit 7)") - - rule.Command().Text("rm -rf").Flag(lintPaths.cacheDir.String()).Flag(lintPaths.homeDir.String()) - - // The HTML output contains a date, remove it to make the output deterministic. - rule.Command().Text(`sed -i.tmp -e 's|Check performed at .*\(</nav>\)|\1|'`).Output(html) + cmd.Text("; EXITCODE=$?; ") // The sources in the sandbox may have been modified by --apply-suggestions, zip them up and - // export them out of the sandbox. - rule.Command().BuiltTool("soong_zip"). + // export them out of the sandbox. Do this before exiting so that the suggestions exit even after + // a fatal error. + cmd.BuiltTool("soong_zip"). FlagWithOutput("-o ", android.PathForModuleOut(ctx, "lint", "suggested-fixes.zip")). FlagWithArg("-C ", cmd.PathForInput(android.PathForSource(ctx))). FlagWithInput("-r ", srcsList) + cmd.Text("; if [ $EXITCODE != 0 ]; then if [ -e").Input(text).Text("]; then cat").Input(text).Text("; fi; exit $EXITCODE; fi") + + rule.Command().Text("rm -rf").Flag(lintPaths.cacheDir.String()).Flag(lintPaths.homeDir.String()) + + // The HTML output contains a date, remove it to make the output deterministic. + rule.Command().Text(`sed -i.tmp -e 's|Check performed at .*\(</nav>\)|\1|'`).Output(html) + rule.Build("lint", "lint") l.outputs = lintOutputs{ diff --git a/java/robolectric.go b/java/robolectric.go index 7f2981fa8..b6116ec9d 100644 --- a/java/robolectric.go +++ b/java/robolectric.go @@ -188,9 +188,9 @@ func (r *robolectricTest) GenerateAndroidBuildActions(ctx android.ModuleContext) // TODO: this could all be removed if tradefed was used as the test runner, it will find everything // annotated as a test and run it. - for _, src := range r.compiledJavaSrcs { + for _, src := range r.uniqueSrcFiles { s := src.Rel() - if !strings.HasSuffix(s, "Test.java") { + if !strings.HasSuffix(s, "Test.java") && !strings.HasSuffix(s, "Test.kt") { continue } else if strings.HasSuffix(s, "/BaseRobolectricTest.java") { continue |