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)
+}