332 lines
7.5 KiB
Python
332 lines
7.5 KiB
Python
# 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",
|
|
],
|
|
)
|