From 3a3e94c09a68ff49686f78f9c8a862e2d646bf7d Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 23 Jan 2019 15:39:50 -0800 Subject: [PATCH] Fix kotlin annotation processing after java_plugin I37c1e80eba71ae2d6a06199fb102194a51994989 broke kotlin annotation processing with a typo in the processors flag to kapt and by passing -processor to javac with an empty processorpath. Bug: 77284273 Bug: 122251693 Test: kotlin_test.go Test: m checkbuild Change-Id: I17c45d5b3f9df089231af5d2930646ad0e6bf9be --- java/java.go | 3 ++- java/kotlin.go | 2 +- java/kotlin_test.go | 26 ++++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/java/java.go b/java/java.go index 7014668f4..89b09d10b 100644 --- a/java/java.go +++ b/java/java.go @@ -493,7 +493,7 @@ func (j *Module) deps(ctx android.BottomUpMutatorContext) { // TODO(ccross): move this to a mutator pass that can tell if generated sources contain // Kotlin files ctx.AddVariationDependencies(nil, kotlinStdlibTag, "kotlin-stdlib") - if len(j.properties.Annotation_processors) > 0 { + if len(j.properties.Annotation_processors) > 0 || len(j.properties.Plugins) > 0 { ctx.AddVariationDependencies(nil, kotlinAnnotationsTag, "kotlin-annotations") } } @@ -1017,6 +1017,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path srcJars = append(srcJars, kaptSrcJar) // Disable annotation processing in javac, it's already been handled by kapt flags.processorPath = nil + flags.processor = "" } kotlinJar := android.PathForModuleOut(ctx, "kotlin", jarName) diff --git a/java/kotlin.go b/java/kotlin.go index 1b2e6429e..9c47f98a7 100644 --- a/java/kotlin.go +++ b/java/kotlin.go @@ -121,7 +121,7 @@ func kotlinKapt(ctx android.ModuleContext, outputFile android.WritablePath, kaptProcessor := "" if flags.processor != "" { - kaptProcessor = "-P plugin:org.jetbrains.kotlin.kapt3:processor=" + flags.processor + kaptProcessor = "-P plugin:org.jetbrains.kotlin.kapt3:processors=" + flags.processor } encodedJavacFlags := kaptEncodeFlags([][2]string{ diff --git a/java/kotlin_test.go b/java/kotlin_test.go index 3deea1373..9406ef9d7 100644 --- a/java/kotlin_test.go +++ b/java/kotlin_test.go @@ -15,6 +15,7 @@ package java import ( + "android/soong/android" "strconv" "strings" "testing" @@ -92,13 +93,19 @@ func TestKapt(t *testing.T) { java_plugin { name: "bar", + processor_class: "com.bar", + srcs: ["b.java"], } `) + buildOS := android.BuildOs.String() + kapt := ctx.ModuleForTests("foo", "android_common").Rule("kapt") kotlinc := ctx.ModuleForTests("foo", "android_common").Rule("kotlinc") javac := ctx.ModuleForTests("foo", "android_common").Rule("javac") + bar := ctx.ModuleForTests("bar", buildOS+"_common").Rule("javac").Output.String() + // Test that the kotlin and java sources are passed to kapt and kotlinc if len(kapt.Inputs) != 2 || kapt.Inputs[0].String() != "a.java" || kapt.Inputs[1].String() != "b.kt" { t.Errorf(`foo kapt inputs %v != ["a.java", "b.kt"]`, kapt.Inputs) @@ -127,6 +134,25 @@ func TestKapt(t *testing.T) { if javac.Args["srcJars"] != kapt.Output.String() { t.Errorf("expected %q in javac srcjars %v", kapt.Output.String(), kotlinc.Args["srcJars"]) } + + // Test that the processors are passed to kapt + expectedProcessorPath := "-P plugin:org.jetbrains.kotlin.kapt3:apclasspath=" + bar + if kapt.Args["kaptProcessorPath"] != expectedProcessorPath { + t.Errorf("expected kaptProcessorPath %q, got %q", expectedProcessorPath, kapt.Args["kaptProcessorPath"]) + } + expectedProcessor := "-P plugin:org.jetbrains.kotlin.kapt3:processors=com.bar" + if kapt.Args["kaptProcessor"] != expectedProcessor { + t.Errorf("expected kaptProcessor %q, got %q", expectedProcessor, kapt.Args["kaptProcessor"]) + } + + // Test that the processors are not passed to javac + if javac.Args["processorPath"] != "" { + t.Errorf("expected processorPath '', got %q", javac.Args["processorPath"]) + } + // TODO(b/77284273): test for -processor:none + if javac.Args["processor"] != "" { + t.Errorf("expected processor '', got %q", javac.Args["processor"]) + } } func TestKaptEncodeFlags(t *testing.T) {