Merge "Introduce ExperimentalProcessingAPI annotation for room processing APIs" into androidx-main
diff --git a/buildSrc/src/main/kotlin/androidx/build/LibraryType.kt b/buildSrc/src/main/kotlin/androidx/build/LibraryType.kt
index 9a0f332..276651e 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LibraryType.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LibraryType.kt
@@ -95,6 +95,12 @@
checkApi = RunApiTasks.No("Annotation Processor"),
compilationTarget = CompilationTarget.HOST
),
+ ANNOTATION_PROCESSOR_UTILS(
+ publish = Publish.SNAPSHOT_AND_RELEASE,
+ sourceJars = true,
+ checkApi = RunApiTasks.No("Annotation Processor Helper Library"),
+ compilationTarget = CompilationTarget.HOST
+ ),
OTHER_CODE_PROCESSOR(
publish = Publish.SNAPSHOT_AND_RELEASE,
sourceJars = false,
diff --git a/room/compiler-processing-testing/build.gradle b/room/compiler-processing-testing/build.gradle
index 109c5db..e310d6e 100644
--- a/room/compiler-processing-testing/build.gradle
+++ b/room/compiler-processing-testing/build.gradle
@@ -17,6 +17,8 @@
import androidx.build.LibraryGroups
import androidx.build.LibraryType
import androidx.build.Publish
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
import static androidx.build.dependencies.DependenciesKt.*
plugins {
@@ -68,12 +70,18 @@
tasks.named("compileKotlin").configure {
dependsOn(writeTestPropsTask)
}
+// enable opt in only for tests so that we don't create non experimental APIs by mistake
+// in the source.
+tasks.named("compileTestKotlin", KotlinCompile.class).configure {
+ it.kotlinOptions {
+ freeCompilerArgs += ["-Xopt-in=androidx.room.compiler.processing.ExperimentalProcessingApi"]
+ }
+}
androidx {
name = "AndroidX Room XProcessor Testing"
- type = LibraryType.ANNOTATION_PROCESSOR
+ type = LibraryType.ANNOTATION_PROCESSOR_UTILS
mavenGroup = LibraryGroups.ROOM
inceptionYear = "2020"
- publish = Publish.NONE
description = "Testing helpers for Room XProcessing APIs"
}
diff --git a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/SyntheticJavacProcessor.kt b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/SyntheticJavacProcessor.kt
index d80bd31..95ede95 100644
--- a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/SyntheticJavacProcessor.kt
+++ b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/SyntheticJavacProcessor.kt
@@ -20,6 +20,7 @@
import javax.lang.model.SourceVersion
@Suppress("VisibleForTests")
+@ExperimentalProcessingApi
class SyntheticJavacProcessor private constructor(
private val impl: SyntheticProcessorImpl
) : JavacTestProcessor(), SyntheticProcessor by impl {
diff --git a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/SyntheticKspProcessor.kt b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/SyntheticKspProcessor.kt
index d1bceda..c2f0594 100644
--- a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/SyntheticKspProcessor.kt
+++ b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/SyntheticKspProcessor.kt
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package androidx.room.compiler.processing
import androidx.room.compiler.processing.util.XTestInvocation
@@ -23,6 +22,7 @@
import com.google.devtools.ksp.processing.SymbolProcessor
import com.google.devtools.ksp.symbol.KSAnnotated
+@ExperimentalProcessingApi
class SyntheticKspProcessor private constructor(
private val impl: SyntheticProcessorImpl
) : SymbolProcessor, SyntheticProcessor by impl {
diff --git a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/SyntheticProcessor.kt b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/SyntheticProcessor.kt
index 8cd0076..dbf283c 100644
--- a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/SyntheticProcessor.kt
+++ b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/SyntheticProcessor.kt
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package androidx.room.compiler.processing
import androidx.room.compiler.processing.util.RecordingXMessager
@@ -22,6 +21,7 @@
/**
* Common interface for SyntheticProcessors that we create for testing.
*/
+@ExperimentalProcessingApi
internal interface SyntheticProcessor {
/**
* List of invocations that was sent to the test code.
@@ -54,6 +54,7 @@
* Helper class to implement [SyntheticProcessor] processor that handles the communication with
* the testing infrastructure.
*/
+@ExperimentalProcessingApi
internal class SyntheticProcessorImpl(
handlers: List<(XTestInvocation) -> Unit>
) : SyntheticProcessor {
diff --git a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/CompilationResultSubject.kt b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/CompilationResultSubject.kt
index 4aea1fa..182a8e4 100644
--- a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/CompilationResultSubject.kt
+++ b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/CompilationResultSubject.kt
@@ -16,6 +16,7 @@
package androidx.room.compiler.processing.util
+import androidx.room.compiler.processing.ExperimentalProcessingApi
import androidx.room.compiler.processing.SyntheticJavacProcessor
import androidx.room.compiler.processing.SyntheticProcessor
import androidx.room.compiler.processing.util.runner.CompilationTestRunner
@@ -34,6 +35,7 @@
/**
* Holds the information about a test compilation result.
*/
+@ExperimentalProcessingApi
abstract class CompilationResult internal constructor(
/**
* The test infra which run this test
@@ -87,6 +89,7 @@
* Truth subject that can run assertions on the [CompilationResult].
* see: [XTestInvocation.assertCompilationResult]
*/
+@ExperimentalProcessingApi
class CompilationResultSubject(
failureMetadata: FailureMetadata,
val compilationResult: CompilationResult,
@@ -370,7 +373,7 @@
}
}
}
-
+@ExperimentalProcessingApi
internal class JavaCompileTestingCompilationResult(
testRunner: CompilationTestRunner,
@Suppress("unused")
@@ -397,7 +400,7 @@
}
}
}
-
+@ExperimentalProcessingApi
internal class KotlinCompileTestingCompilationResult(
testRunner: CompilationTestRunner,
@Suppress("unused")
diff --git a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/ProcessorTestExt.kt b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/ProcessorTestExt.kt
index cb942f4..5221c8c 100644
--- a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/ProcessorTestExt.kt
+++ b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/ProcessorTestExt.kt
@@ -16,6 +16,7 @@
package androidx.room.compiler.processing.util
+import androidx.room.compiler.processing.ExperimentalProcessingApi
import androidx.room.compiler.processing.util.runner.CompilationTestRunner
import androidx.room.compiler.processing.util.runner.JavacCompilationTestRunner
import androidx.room.compiler.processing.util.runner.KaptCompilationTestRunner
@@ -27,6 +28,7 @@
import java.io.ByteArrayOutputStream
import java.io.File
+@ExperimentalProcessingApi
private fun runTests(
params: TestCompilationParameters,
vararg runners: CompilationTestRunner
@@ -68,6 +70,7 @@
assertThat(runCount).isAtLeast(minTestCount)
}
+@ExperimentalProcessingApi
fun runProcessorTestWithoutKsp(
sources: List<Source> = emptyList(),
classpath: List<File> = emptyList(),
@@ -99,6 +102,7 @@
* assertion on [XTestInvocation.assertCompilationResult] which expects a failure (e.g. checking
* errors).
*/
+@ExperimentalProcessingApi
fun runProcessorTest(
sources: List<Source> = emptyList(),
classpath: List<File> = emptyList(),
@@ -108,6 +112,7 @@
/**
* @see runProcessorTest
*/
+@ExperimentalProcessingApi
fun runProcessorTest(
sources: List<Source> = emptyList(),
classpath: List<File> = emptyList(),
@@ -134,6 +139,7 @@
*
* @see runProcessorTest
*/
+@ExperimentalProcessingApi
fun runJavaProcessorTest(
sources: List<Source>,
classpath: List<File> = emptyList(),
@@ -147,6 +153,7 @@
/**
* @see runJavaProcessorTest
*/
+@ExperimentalProcessingApi
fun runJavaProcessorTest(
sources: List<Source>,
classpath: List<File> = emptyList(),
@@ -165,6 +172,7 @@
/**
* Runs the test only with kapt compilation backend
*/
+@ExperimentalProcessingApi
fun runKaptTest(
sources: List<Source>,
classpath: List<File> = emptyList(),
@@ -178,6 +186,7 @@
/**
* @see runKaptTest
*/
+@ExperimentalProcessingApi
fun runKaptTest(
sources: List<Source>,
classpath: List<File> = emptyList(),
@@ -196,6 +205,7 @@
/**
* Runs the test only with ksp compilation backend
*/
+@ExperimentalProcessingApi
fun runKspTest(
sources: List<Source>,
classpath: List<File> = emptyList(),
@@ -209,6 +219,7 @@
/**
* @see runKspTest
*/
+@ExperimentalProcessingApi
fun runKspTest(
sources: List<Source>,
classpath: List<File> = emptyList(),
diff --git a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/XTestInvocation.kt b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/XTestInvocation.kt
index a8b1502..1dcf191 100644
--- a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/XTestInvocation.kt
+++ b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/XTestInvocation.kt
@@ -16,6 +16,7 @@
package androidx.room.compiler.processing.util
+import androidx.room.compiler.processing.ExperimentalProcessingApi
import androidx.room.compiler.processing.XProcessingEnv
import androidx.room.compiler.processing.XRoundEnv
import com.google.common.truth.Truth
@@ -24,6 +25,7 @@
/**
* Data holder for XProcessing tests to access the processing environment.
*/
+@ExperimentalProcessingApi
class XTestInvocation(
processingEnv: XProcessingEnv,
roundEnv: XRoundEnv
diff --git a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/CompilationTestRunner.kt b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/CompilationTestRunner.kt
index 43bca34..ba50be6 100644
--- a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/CompilationTestRunner.kt
+++ b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/CompilationTestRunner.kt
@@ -16,6 +16,7 @@
package androidx.room.compiler.processing.util.runner
+import androidx.room.compiler.processing.ExperimentalProcessingApi
import androidx.room.compiler.processing.util.CompilationResult
import androidx.room.compiler.processing.util.Source
import androidx.room.compiler.processing.util.XTestInvocation
@@ -24,6 +25,7 @@
/**
* Common interface for compilation tests
*/
+@ExperimentalProcessingApi
internal interface CompilationTestRunner {
// user visible name that we can print in assertions
val name: String
@@ -33,6 +35,7 @@
fun compile(params: TestCompilationParameters): CompilationResult
}
+@ExperimentalProcessingApi
internal data class TestCompilationParameters(
val sources: List<Source> = emptyList(),
val classpath: List<File> = emptyList(),
diff --git a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/JavacCompilationTestRunner.kt b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/JavacCompilationTestRunner.kt
index a70f146..9097b02 100644
--- a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/JavacCompilationTestRunner.kt
+++ b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/JavacCompilationTestRunner.kt
@@ -16,12 +16,14 @@
package androidx.room.compiler.processing.util.runner
+import androidx.room.compiler.processing.ExperimentalProcessingApi
import androidx.room.compiler.processing.SyntheticJavacProcessor
import androidx.room.compiler.processing.util.CompilationResult
import androidx.room.compiler.processing.util.JavaCompileTestingCompilationResult
import androidx.room.compiler.processing.util.Source
import com.google.testing.compile.Compiler
+@ExperimentalProcessingApi
internal object JavacCompilationTestRunner : CompilationTestRunner {
override val name: String = "javac"
diff --git a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/KaptCompilationTestRunner.kt b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/KaptCompilationTestRunner.kt
index 39426f3..6e1f860 100644
--- a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/KaptCompilationTestRunner.kt
+++ b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/KaptCompilationTestRunner.kt
@@ -16,6 +16,7 @@
package androidx.room.compiler.processing.util.runner
+import androidx.room.compiler.processing.ExperimentalProcessingApi
import androidx.room.compiler.processing.SyntheticJavacProcessor
import androidx.room.compiler.processing.util.CompilationResult
import androidx.room.compiler.processing.util.KotlinCompilationUtil
@@ -23,6 +24,7 @@
import com.tschuchort.compiletesting.KotlinCompilation
import java.io.ByteArrayOutputStream
+@ExperimentalProcessingApi
internal object KaptCompilationTestRunner : CompilationTestRunner {
override val name: String = "kapt"
diff --git a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/KspCompilationTestRunner.kt b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/KspCompilationTestRunner.kt
index a927d56c..3ebaa0b 100644
--- a/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/KspCompilationTestRunner.kt
+++ b/room/compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/runner/KspCompilationTestRunner.kt
@@ -16,6 +16,7 @@
package androidx.room.compiler.processing.util.runner
+import androidx.room.compiler.processing.ExperimentalProcessingApi
import androidx.room.compiler.processing.SyntheticKspProcessor
import androidx.room.compiler.processing.util.CompilationResult
import androidx.room.compiler.processing.util.KotlinCompilationUtil
@@ -30,6 +31,7 @@
import java.io.File
import javax.tools.Diagnostic
+@ExperimentalProcessingApi
internal object KspCompilationTestRunner : CompilationTestRunner {
override val name: String = "ksp"
diff --git a/room/compiler-processing/build.gradle b/room/compiler-processing/build.gradle
index 362439f..0f69d5c 100644
--- a/room/compiler-processing/build.gradle
+++ b/room/compiler-processing/build.gradle
@@ -49,7 +49,8 @@
tasks.withType(KotlinCompile).configureEach {
kotlinOptions {
freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn",
- "-Xopt-in=kotlin.contracts.ExperimentalContracts"]
+ "-Xopt-in=kotlin.contracts.ExperimentalContracts",
+ "-Xopt-in=androidx.room.compiler.processing.ExperimentalProcessingApi"]
}
}
@@ -60,7 +61,7 @@
androidx {
name = "AndroidX Room XProcessor"
- type = LibraryType.ANNOTATION_PROCESSOR
+ type = LibraryType.ANNOTATION_PROCESSOR_UTILS
mavenGroup = LibraryGroups.ROOM
inceptionYear = "2020"
description = "Processing Environment Abstraction for AndroidX Room"
diff --git a/room/compiler-processing/src/main/java/androidx/room/compiler/processing/ExperimentalProcessingApi.kt b/room/compiler-processing/src/main/java/androidx/room/compiler/processing/ExperimentalProcessingApi.kt
new file mode 100644
index 0000000..00a7604
--- /dev/null
+++ b/room/compiler-processing/src/main/java/androidx/room/compiler/processing/ExperimentalProcessingApi.kt
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package androidx.room.compiler.processing
+
+/**
+ * These APIs are experimental and are not designed to be used by external artifacts.
+ *
+ * Make sure to jarjar them if you are using these APIs in your own processor.
+ */
+@RequiresOptIn
+@Retention(AnnotationRetention.BINARY)
+annotation class ExperimentalProcessingApi
\ No newline at end of file
diff --git a/room/compiler-processing/src/main/java/androidx/room/compiler/processing/JavacTestProcessor.kt b/room/compiler-processing/src/main/java/androidx/room/compiler/processing/JavacTestProcessor.kt
index 134cc91..aa9b92a 100644
--- a/room/compiler-processing/src/main/java/androidx/room/compiler/processing/JavacTestProcessor.kt
+++ b/room/compiler-processing/src/main/java/androidx/room/compiler/processing/JavacTestProcessor.kt
@@ -29,6 +29,7 @@
* in Auto Common.
*/
@VisibleForTesting
+@ExperimentalProcessingApi
abstract class JavacTestProcessor : AbstractProcessor() {
val xProcessingEnv by lazy {
// lazily create this as it is not available on construction time
diff --git a/room/compiler-processing/src/main/java/androidx/room/compiler/processing/XProcessingEnv.kt b/room/compiler-processing/src/main/java/androidx/room/compiler/processing/XProcessingEnv.kt
index 2bd34f4..c7e67cc 100644
--- a/room/compiler-processing/src/main/java/androidx/room/compiler/processing/XProcessingEnv.kt
+++ b/room/compiler-processing/src/main/java/androidx/room/compiler/processing/XProcessingEnv.kt
@@ -29,9 +29,10 @@
/**
* API for a Processor that is either backed by Java's Annotation Processing API or KSP.
*/
+@ExperimentalProcessingApi
interface XProcessingEnv {
- val backend: XProcessingEnv.Backend
+ val backend: Backend
/**
* The logger interface to log messages
*/
diff --git a/room/compiler/build.gradle b/room/compiler/build.gradle
index e5dade8..f31a895 100644
--- a/room/compiler/build.gradle
+++ b/room/compiler/build.gradle
@@ -246,7 +246,8 @@
tasks.withType(KotlinCompile).configureEach {
kotlinOptions {
freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn",
- "-Xopt-in=kotlin.contracts.ExperimentalContracts"]
+ "-Xopt-in=kotlin.contracts.ExperimentalContracts",
+ "-Xopt-in=androidx.room.compiler.processing.ExperimentalProcessingApi"]
}
}