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
diff --git a/java/java.go b/java/java.go
index 7014668..89b09d1 100644
--- a/java/java.go
+++ b/java/java.go
@@ -493,7 +493,7 @@
 		// 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 @@
 			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 1b2e642..9c47f98 100644
--- a/java/kotlin.go
+++ b/java/kotlin.go
@@ -121,7 +121,7 @@
 
 	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 3deea13..9406ef9 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 @@
 
 		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 @@
 	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) {