blob: ea6ad66decc17231576f8bde13bafe1feff18afe [file] [log] [blame]
# Copyright 2022 Google LLC. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the License);
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
load(
"//kotlin:rules.bzl",
"kt_jvm_library",
"kt_jvm_test",
)
load("@bazel_skylib//rules:build_test.bzl", "build_test")
licenses(["notice"])
package(default_visibility = [
"//tests/android/java/com/google/local_test:__subpackages__",
])
build_test(
name = "kapt_regressions",
tags = ["darwin_x86_64_compatible"],
targets = [
":test_interface_with_default_impls",
":test_javac",
":test_kapt",
":test_javac",
":test_javac_with_exported_plugin",
":test_kapt_with_exported_plugin",
":test_no_processors",
":test_noop",
":test_noop_processors_ignored",
":test_processor_flags",
":test_processor_with_data",
":test_reference",
":test_stubs",
":test_direct_classpath",
],
)
# Regression test for no processor outputs (b/79878966)
# and running non-service processors (b/110540324)
kt_jvm_library(
name = "test_noop",
srcs = ["Noop.kt"],
plugins = [
":non_service_processor",
],
)
kt_jvm_library(
name = "test_interface_with_default_impls",
srcs = [
"InterfaceWithDefaultImpls.kt",
],
plugins = [":AP"], # trigger kapt for regression test (b/121222399)
)
kt_jvm_library(
name = "test_kapt",
srcs = [
"KTest.kt",
],
plugins = [":AP"],
deps = [
":anno",
],
)
# Test support for -A processor flags (b/134963914).
kt_jvm_library(
name = "test_processor_flags",
srcs = ["FlagTest.kt"],
javacopts = ["-Akapt.AP.indexPrefix=Gen"],
plugins = [":AP"],
deps = [":anno"],
)
# Skip kapt altogether when no plugin defines a processor (b/110540324).
kt_jvm_library(
name = "test_no_processors",
srcs = [
"Noop.kt",
],
plugins = [
":ignored_failing_processor", # would fail if run
],
deps = [
":anno",
],
)
# Skip plugins without processors, for consistency with how Blaze runs javac (b/110540324).
kt_jvm_library(
name = "test_noop_processors_ignored",
srcs = [
"KTest.kt",
],
plugins = [
":AP",
":ignored_failing_processor", # would fail if run
],
deps = [
":anno",
],
)
# Use kapt to annotation-process a .java file
kt_jvm_library(
name = "test_kapt_java",
srcs = [
"Noop.kt", # needed so kapt is used
"Test.java",
],
plugins = [":AP"],
deps = [
":anno",
],
)
# No .kt sources: javac is used for annotation processing
kt_jvm_library(
name = "test_javac",
srcs = ["Test.java"],
plugins = [":AP"],
deps = [
":anno",
],
)
# Test for java_library picking up exported_plugin from kt_jvm_library
java_library(
name = "test_javac_with_exported_plugin",
srcs = ["Test.java"],
deps = [
":anno_with_plugin",
],
)
# Reference build with java_library
java_library(
name = "test_reference",
srcs = ["Test.java"],
plugins = [":AP"],
deps = [
":anno",
],
)
# This target compiles repro code for b/118338417 and b/110373008. Since these are issues with the
# kapt-generated .java stub files, which aren't currently used by the Kotlin build rules, this
# target compiles, but we can manually inspect the stubs to see if issues were fixed.
# TODO: Turn this into a dump test asserting the content of the generated stubs
kt_jvm_library(
name = "test_stubs",
srcs = [
"InnerEnumImport.kt", # repro for https://youtrack.jetbrains.net/issue/KT-28220
"SealedClasses.kt", # repro for https://youtrack.jetbrains.net/issue/KT-29924
"StaticImport.kt", # Static* repro https://youtrack.jetbrains.net/issue/KT-25071 (fixed)
"StaticMethod.java",
],
plugins = [":AP"],
)
java_plugin(
name = "AP",
generates_api = 1,
processor_class = "kapt.AP",
deps = [":AP_lib"],
)
java_library(
name = "AP_lib",
srcs = ["AP.java"],
deps = [
":anno",
"//bazel:auto_service",
],
)
# Processor that doesn't advertise itself to j.u.ServiceLoader (regression for b/110540324)
java_plugin(
name = "non_service_processor",
srcs = ["NonServiceProcessor.java"],
processor_class = "kapt.NonServiceProcessor",
)
# Processor that would fail but doesn't declare processor_class and hence shouldn't run.
java_plugin(
name = "ignored_failing_processor",
srcs = ["FailingProcessor.java"],
deps = [
"//bazel:auto_service",
],
)
java_library(
name = "anno",
srcs = ["Count.java"],
)
java_library(
name = "anno-android",
srcs = ["Count.java"],
)
kt_jvm_library(
name = "anno_with_plugin",
srcs = ["Count.java"],
exported_plugins = [":AP"],
)
kt_jvm_library(
name = "test_kapt_with_exported_plugin",
srcs = ["KTest.kt"],
deps = [
":anno_with_plugin",
],
)
# Regression test for b/199932860: processor with data dependency
java_plugin(
name = "ProcessorWithData",
data = ["MakeHelperClass.java.template"],
processor_class = "kapt.ProcessorWithData",
deps = [":processor_with_data"],
)
kt_jvm_library(
name = "processor_with_data",
srcs = [
"MakeHelper.kt",
"ProcessorWithData.kt",
],
deps = [
"//bazel:auto_service",
],
)
kt_jvm_library(
name = "make_helper",
srcs = ["MakeHelper.kt"],
exported_plugins = [":ProcessorWithData"],
)
kt_jvm_library(
name = "test_processor_with_data",
srcs = ["TriggerHelper.kt"],
deps = [":make_helper"],
)
kt_jvm_library(
name = "generates_services",
srcs = ["GeneratesServices.kt"],
deps = [
"//bazel:auto_service",
],
)
kt_jvm_test(
name = "GeneratesServicesTest",
srcs = ["GeneratesServicesTest.kt"],
tags = ["darwin_x86_64_compatible"],
deps = [
":generates_services",
"@maven//:com_google_truth_truth",
"@maven//:junit_junit",
],
)
kt_jvm_library(
name = "dagger_c",
testonly = 1,
srcs = ["DaggerC.kt"],
deps = [
"@maven//:javax_inject_jsr330_api",
],
)
kt_jvm_library(
name = "dagger_b",
testonly = 1,
srcs = ["DaggerB.kt"],
deps = [
":dagger_c",
"@maven//:javax_inject_jsr330_api",
],
)
kt_jvm_library(
name = "dagger_a",
testonly = 1,
srcs = ["DaggerA.kt"],
deps = [
":dagger_b",
":dagger_c",
"@dagger",
],
)
# Tests a scenario where Dagger generates code referencing indirect dependencies, which can confuse
# Blaze's direct classpath optimization for running Turbine.
kt_jvm_library(
name = "test_direct_classpath",
testonly = 1,
srcs = ["DaggerTopLevel.kt"],
deps = [
":dagger_a",
],
)
# Demonstrates a simple compile test that uses Kotlin kapt stubs (b/199411692)
kt_jvm_test(
name = "APTest",
srcs = ["APTest.kt"],
tags = ["darwin_x86_64_compatible"],
deps = [
":AP_lib",
"@maven//:com_google_testing_compile_compile_testing",
"@maven//:com_google_truth_truth",
"@maven//:junit_junit",
],
)