Introduce Context data class for environment params
Added a new Context class that has all environment related variables
as fields so that we can easily pass it around to processors.
Bug: 32342709
Test: clean check passes
Change-Id: I73e357c0601be09528878a6b9f89b3004fe78da7
diff --git a/room/compiler/src/main/kotlin/com/android/support/room/processor/Context.kt b/room/compiler/src/main/kotlin/com/android/support/room/processor/Context.kt
new file mode 100644
index 0000000..89ec984
--- /dev/null
+++ b/room/compiler/src/main/kotlin/com/android/support/room/processor/Context.kt
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2016 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 com.android.support.room.processor
+
+import javax.annotation.processing.ProcessingEnvironment
+import javax.annotation.processing.RoundEnvironment
+
+data class Context(val roundEnv: RoundEnvironment,
+ val processingEnv: ProcessingEnvironment)
diff --git a/room/compiler/src/main/kotlin/com/android/support/room/processor/DaoProcessor.kt b/room/compiler/src/main/kotlin/com/android/support/room/processor/DaoProcessor.kt
index 6b59458..35ee5f2 100644
--- a/room/compiler/src/main/kotlin/com/android/support/room/processor/DaoProcessor.kt
+++ b/room/compiler/src/main/kotlin/com/android/support/room/processor/DaoProcessor.kt
@@ -22,15 +22,12 @@
import com.google.auto.common.MoreElements
import com.google.auto.common.MoreTypes
import com.squareup.javapoet.TypeName
-import javax.annotation.processing.ProcessingEnvironment
-import javax.annotation.processing.RoundEnvironment
import javax.lang.model.element.ElementKind
import javax.lang.model.element.Modifier.ABSTRACT
import javax.lang.model.element.TypeElement
-class DaoProcessor(val roundEnv: RoundEnvironment,
- val processingEnvironment: ProcessingEnvironment) {
- val queryParser = QueryMethodProcessor(roundEnv, processingEnvironment)
+class DaoProcessor(val context : Context) {
+ val queryParser = QueryMethodProcessor(context)
fun parse(element: TypeElement) : Dao {
Checks.hasAnnotation(element, com.android.support.room.Dao::class,
ProcessorErrors.DAO_MUST_BE_ANNOTATED_WITH_DAO)
@@ -38,7 +35,7 @@
element, ProcessorErrors.DAO_MUST_BE_AN_ABSTRACT_CLASS_OR_AN_INTERFACE)
val declaredType = MoreTypes.asDeclared(element.asType())
- val allMembers = processingEnvironment.elementUtils.getAllMembers(element)
+ val allMembers = context.processingEnv.elementUtils.getAllMembers(element)
val methods = allMembers.filter {
it.hasAnyOf(ABSTRACT) && it.kind == ElementKind.METHOD
}.map {
diff --git a/room/compiler/src/main/kotlin/com/android/support/room/processor/DatabaseProcessor.kt b/room/compiler/src/main/kotlin/com/android/support/room/processor/DatabaseProcessor.kt
index 6d85938..d797d21 100644
--- a/room/compiler/src/main/kotlin/com/android/support/room/processor/DatabaseProcessor.kt
+++ b/room/compiler/src/main/kotlin/com/android/support/room/processor/DatabaseProcessor.kt
@@ -23,8 +23,6 @@
import com.google.auto.common.AnnotationMirrors
import com.google.auto.common.MoreElements
import com.google.auto.common.MoreTypes
-import javax.annotation.processing.ProcessingEnvironment
-import javax.annotation.processing.RoundEnvironment
import javax.lang.model.element.AnnotationValue
import javax.lang.model.element.ElementKind
import javax.lang.model.element.Modifier
@@ -33,10 +31,9 @@
import javax.lang.model.util.SimpleAnnotationValueVisitor6
-class DatabaseProcessor(val roundEnv: RoundEnvironment,
- val processingEnvironment: ProcessingEnvironment) {
- val entityParser = EntityProcessor(roundEnv, processingEnvironment)
- val daoParser = DaoProcessor(roundEnv, processingEnvironment)
+class DatabaseProcessor(val context: Context) {
+ val entityParser = EntityProcessor(context)
+ val daoParser = DaoProcessor(context)
fun parse(element: TypeElement): Database {
Checks.hasAnnotation(element, com.android.support.room.Database::class,
@@ -53,7 +50,7 @@
entityParser.parse(MoreTypes.asTypeElement(it))
}
- val allMembers = processingEnvironment.elementUtils.getAllMembers(element)
+ val allMembers = context.processingEnv.elementUtils.getAllMembers(element)
val daoMethods = allMembers.filter {
it.hasAnyOf(Modifier.ABSTRACT) && it.kind == ElementKind.METHOD
}.map {
diff --git a/room/compiler/src/main/kotlin/com/android/support/room/processor/EntityProcessor.kt b/room/compiler/src/main/kotlin/com/android/support/room/processor/EntityProcessor.kt
index aaba338..b5fe562 100644
--- a/room/compiler/src/main/kotlin/com/android/support/room/processor/EntityProcessor.kt
+++ b/room/compiler/src/main/kotlin/com/android/support/room/processor/EntityProcessor.kt
@@ -26,8 +26,6 @@
import com.google.auto.common.MoreElements
import com.google.auto.common.MoreTypes
import com.squareup.javapoet.TypeName
-import javax.annotation.processing.ProcessingEnvironment
-import javax.annotation.processing.RoundEnvironment
import javax.lang.model.element.ElementKind
import javax.lang.model.element.ExecutableElement
import javax.lang.model.element.Modifier
@@ -35,15 +33,14 @@
import javax.lang.model.element.TypeElement
import javax.lang.model.type.TypeKind
-class EntityProcessor(val roundEnv: RoundEnvironment,
- val processingEnvironment: ProcessingEnvironment) {
- val fieldParser = FieldProcessor(roundEnv, processingEnvironment)
+class EntityProcessor(val context: Context) {
+ val fieldParser = FieldProcessor(context)
fun parse(element: TypeElement): Entity {
Checks.hasAnnotation(element, com.android.support.room.Entity::class,
ProcessorErrors.ENTITY_MUST_BE_ANNOTATED_WITH_ENTITY)
val declaredType = MoreTypes.asDeclared(element.asType())
- val allMembers = processingEnvironment.elementUtils.getAllMembers(element)
+ val allMembers = context.processingEnv.elementUtils.getAllMembers(element)
val fields = allMembers
.filter {
it.kind == ElementKind.FIELD
@@ -91,7 +88,7 @@
}
private fun assignGetters(fields: List<Field>, getterCandidates: List<ExecutableElement>) {
- val types = processingEnvironment.typeUtils
+ val types = context.processingEnv.typeUtils
fields.forEach { field ->
if (!field.element.hasAnyOf(PRIVATE)) {
@@ -120,7 +117,7 @@
}
private fun assignSetters(fields: List<Field>, setterCandidates: List<ExecutableElement>) {
- val types = processingEnvironment.typeUtils
+ val types = context.processingEnv.typeUtils
fields.forEach { field ->
if (!field.element.hasAnyOf(PRIVATE)) {
diff --git a/room/compiler/src/main/kotlin/com/android/support/room/processor/FieldProcessor.kt b/room/compiler/src/main/kotlin/com/android/support/room/processor/FieldProcessor.kt
index 153cd11..05fea9c 100644
--- a/room/compiler/src/main/kotlin/com/android/support/room/processor/FieldProcessor.kt
+++ b/room/compiler/src/main/kotlin/com/android/support/room/processor/FieldProcessor.kt
@@ -23,15 +23,12 @@
import com.google.auto.common.AnnotationMirrors
import com.google.auto.common.MoreElements
import com.squareup.javapoet.TypeName
-import javax.annotation.processing.ProcessingEnvironment
-import javax.annotation.processing.RoundEnvironment
import javax.lang.model.element.Element
import javax.lang.model.type.DeclaredType
-class FieldProcessor(val roundEnv: RoundEnvironment,
- val processingEnvironment: ProcessingEnvironment) {
+class FieldProcessor(val context: Context) {
fun parse(containing : DeclaredType, element : Element) : Field {
- val member = processingEnvironment.typeUtils.asMemberOf(containing, element)
+ val member = context.processingEnv.typeUtils.asMemberOf(containing, element)
val type = TypeName.get(member)
val columnNameAnnotation = MoreElements.getAnnotationMirror(element,
ColumnName::class.java)
diff --git a/room/compiler/src/main/kotlin/com/android/support/room/processor/ParameterParser.kt b/room/compiler/src/main/kotlin/com/android/support/room/processor/ParameterParser.kt
index e703414..3ee1abe 100644
--- a/room/compiler/src/main/kotlin/com/android/support/room/processor/ParameterParser.kt
+++ b/room/compiler/src/main/kotlin/com/android/support/room/processor/ParameterParser.kt
@@ -19,15 +19,12 @@
import com.android.support.room.vo.Parameter
import com.google.auto.common.MoreTypes
import com.squareup.javapoet.TypeName
-import javax.annotation.processing.ProcessingEnvironment
-import javax.annotation.processing.RoundEnvironment
import javax.lang.model.element.VariableElement
import javax.lang.model.type.DeclaredType
-class ParameterParser(val roundEnv: RoundEnvironment,
- val processingEnvironment: ProcessingEnvironment) {
+class ParameterParser(val context: Context) {
fun parse(containing: DeclaredType, element: VariableElement): Parameter {
- val asMember = MoreTypes.asMemberOf(processingEnvironment.typeUtils, containing, element)
+ val asMember = MoreTypes.asMemberOf(context.processingEnv.typeUtils, containing, element)
return Parameter(element.simpleName.toString(), TypeName.get(asMember))
}
}
diff --git a/room/compiler/src/main/kotlin/com/android/support/room/processor/QueryMethodProcessor.kt b/room/compiler/src/main/kotlin/com/android/support/room/processor/QueryMethodProcessor.kt
index 340154d..a6ddd33 100644
--- a/room/compiler/src/main/kotlin/com/android/support/room/processor/QueryMethodProcessor.kt
+++ b/room/compiler/src/main/kotlin/com/android/support/room/processor/QueryMethodProcessor.kt
@@ -23,17 +23,14 @@
import com.google.auto.common.MoreElements
import com.google.auto.common.MoreTypes
import com.squareup.javapoet.TypeName
-import javax.annotation.processing.ProcessingEnvironment
-import javax.annotation.processing.RoundEnvironment
import javax.lang.model.element.ExecutableElement
import javax.lang.model.type.DeclaredType
import javax.lang.model.type.TypeKind
-class QueryMethodProcessor(val roundEnv: RoundEnvironment,
- val processingEnvironment: ProcessingEnvironment) {
- val parameterParser = ParameterParser(roundEnv, processingEnvironment)
+class QueryMethodProcessor(val context: Context) {
+ val parameterParser = ParameterParser(context)
fun parse(containing: DeclaredType, executableElement: ExecutableElement): QueryMethod {
- val asMember = processingEnvironment.typeUtils.asMemberOf(containing, executableElement)
+ val asMember = context.processingEnv.typeUtils.asMemberOf(containing, executableElement)
val executableType = MoreTypes.asExecutable(asMember)
Checks.check(MoreElements.isAnnotationPresent(executableElement, Query::class.java),
executableElement, ProcessorErrors.MISSING_QUERY_ANNOTATION)
diff --git a/room/compiler/src/test/kotlin/com/android/support/room/processor/BaseEntityParserTest.kt b/room/compiler/src/test/kotlin/com/android/support/room/processor/BaseEntityParserTest.kt
index fd1a5e1..02a386d 100644
--- a/room/compiler/src/test/kotlin/com/android/support/room/processor/BaseEntityParserTest.kt
+++ b/room/compiler/src/test/kotlin/com/android/support/room/processor/BaseEntityParserTest.kt
@@ -58,8 +58,7 @@
.getElementsAnnotatedWith(
com.android.support.room.Entity::class.java)
.first()
- val parser = EntityProcessor(invocation.roundEnv,
- invocation.processingEnv)
+ val parser = EntityProcessor(invocation.context)
val parsedQuery = parser.parse(MoreElements.asType(entity))
handler(parsedQuery, invocation)
true
diff --git a/room/compiler/src/test/kotlin/com/android/support/room/processor/DaoProcessorTest.kt b/room/compiler/src/test/kotlin/com/android/support/room/processor/DaoProcessorTest.kt
index 47ab832..fd1c656 100644
--- a/room/compiler/src/test/kotlin/com/android/support/room/processor/DaoProcessorTest.kt
+++ b/room/compiler/src/test/kotlin/com/android/support/room/processor/DaoProcessorTest.kt
@@ -98,7 +98,7 @@
.getElementsAnnotatedWith(
com.android.support.room.Dao::class.java)
.first()
- val parser = DaoProcessor(invocation.roundEnv, invocation.processingEnv)
+ val parser = DaoProcessor(invocation.context)
val parsedDao = parser.parse(MoreElements.asType(entity))
handler(parsedDao, invocation)
true
diff --git a/room/compiler/src/test/kotlin/com/android/support/room/processor/DatabaseProcessorTest.kt b/room/compiler/src/test/kotlin/com/android/support/room/processor/DatabaseProcessorTest.kt
index f0513b1..3fa8d27 100644
--- a/room/compiler/src/test/kotlin/com/android/support/room/processor/DatabaseProcessorTest.kt
+++ b/room/compiler/src/test/kotlin/com/android/support/room/processor/DatabaseProcessorTest.kt
@@ -124,13 +124,11 @@
.getElementsAnnotatedWith(
com.android.support.room.Database::class.java)
.first()
- val parser = DatabaseProcessor(invocation.roundEnv,
- invocation.processingEnv)
+ val parser = DatabaseProcessor(invocation.context)
val parsedDb = parser.parse(MoreElements.asType(entity))
handler(parsedDb, invocation)
true
}
.build())
}
-
-}
\ No newline at end of file
+}
diff --git a/room/compiler/src/test/kotlin/com/android/support/room/processor/FieldProcessorTest.kt b/room/compiler/src/test/kotlin/com/android/support/room/processor/FieldProcessorTest.kt
index 4b6a566..5416732 100644
--- a/room/compiler/src/test/kotlin/com/android/support/room/processor/FieldProcessorTest.kt
+++ b/room/compiler/src/test/kotlin/com/android/support/room/processor/FieldProcessorTest.kt
@@ -243,8 +243,7 @@
.firstOrNull { it.kind == ElementKind.FIELD })
}
.first { it.second != null }
- val parser = FieldProcessor(invocation.roundEnv,
- invocation.processingEnv)
+ val parser = FieldProcessor(invocation.context)
handler(parser.parse(
MoreTypes.asDeclared(owner.asType()), field!!), invocation)
true
diff --git a/room/compiler/src/test/kotlin/com/android/support/room/processor/QueryMethodProcessorTest.kt b/room/compiler/src/test/kotlin/com/android/support/room/processor/QueryMethodProcessorTest.kt
index 7f547be..aed4002 100644
--- a/room/compiler/src/test/kotlin/com/android/support/room/processor/QueryMethodProcessorTest.kt
+++ b/room/compiler/src/test/kotlin/com/android/support/room/processor/QueryMethodProcessorTest.kt
@@ -161,8 +161,7 @@
}
)
}.filter { it.second.isNotEmpty() }.first()
- val parser = QueryMethodProcessor(invocation.roundEnv,
- invocation.processingEnv)
+ val parser = QueryMethodProcessor(invocation.context)
val parsedQuery = parser.parse(MoreTypes.asDeclared(owner.asType()),
MoreElements.asExecutable(methods.first()))
handler(parsedQuery)
@@ -170,4 +169,4 @@
}
.build())
}
-}
\ No newline at end of file
+}
diff --git a/room/compiler/src/test/kotlin/com/android/support/room/testing/TestInvocation.kt b/room/compiler/src/test/kotlin/com/android/support/room/testing/TestInvocation.kt
index 5342404..c642a9d 100644
--- a/room/compiler/src/test/kotlin/com/android/support/room/testing/TestInvocation.kt
+++ b/room/compiler/src/test/kotlin/com/android/support/room/testing/TestInvocation.kt
@@ -16,6 +16,7 @@
package com.android.support.room.testing
+import com.android.support.room.processor.Context
import javax.annotation.processing.ProcessingEnvironment
import javax.annotation.processing.RoundEnvironment
import javax.lang.model.element.TypeElement
@@ -23,4 +24,5 @@
data class TestInvocation(val processingEnv: ProcessingEnvironment,
val annotations: MutableSet<out TypeElement>,
val roundEnv: RoundEnvironment) {
-}
\ No newline at end of file
+ val context = Context(roundEnv, processingEnv)
+}