12259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar/*
22259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar * Copyright (C) 2016 The Android Open Source Project
32259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar *
42259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar * Licensed under the Apache License, Version 2.0 (the "License");
52259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar * you may not use this file except in compliance with the License.
62259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar * You may obtain a copy of the License at
72259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar *
82259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar *      http://www.apache.org/licenses/LICENSE-2.0
92259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar *
102259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar * Unless required by applicable law or agreed to in writing, software
112259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar * distributed under the License is distributed on an "AS IS" BASIS,
122259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar * See the License for the specific language governing permissions and
142259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar * limitations under the License.
152259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar */
162259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar
17ba069d50913c3fb250bb60ec310439db36895337Alan Viverettepackage androidx.room.ext
182259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyar
198e543c445cb5559e579f54c1ac00d0ca83ec3fbbYigit Boyarimport com.squareup.javapoet.ArrayTypeName
208e543c445cb5559e579f54c1ac00d0ca83ec3fbbYigit Boyarimport com.squareup.javapoet.ClassName
218e543c445cb5559e579f54c1ac00d0ca83ec3fbbYigit Boyarimport com.squareup.javapoet.TypeName
228e543c445cb5559e579f54c1ac00d0ca83ec3fbbYigit Boyarimport javax.lang.model.type.TypeMirror
238e543c445cb5559e579f54c1ac00d0ca83ec3fbbYigit Boyarimport kotlin.reflect.KClass
248e543c445cb5559e579f54c1ac00d0ca83ec3fbbYigit Boyar
252259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyarval L = "\$L"
262259e4dc433701d006db35df4c5e9f8d51e7d29bYigit Boyarval T = "\$T"
278e543c445cb5559e579f54c1ac00d0ca83ec3fbbYigit Boyarval N = "\$N"
288e543c445cb5559e579f54c1ac00d0ca83ec3fbbYigit Boyarval S = "\$S"
298e543c445cb5559e579f54c1ac00d0ca83ec3fbbYigit Boyar
308e543c445cb5559e579f54c1ac00d0ca83ec3fbbYigit Boyarfun KClass<*>.typeName() = ClassName.get(this.java)
318e543c445cb5559e579f54c1ac00d0ca83ec3fbbYigit Boyarfun KClass<*>.arrayTypeName() = ArrayTypeName.of(typeName())
32250a3e6dc5d50c533575b7d276730b89eecc7c19Yigit Boyarfun TypeMirror.typeName() = TypeName.get(this)
33250a3e6dc5d50c533575b7d276730b89eecc7c19Yigit Boyar
34efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyarobject SupportDbTypeNames {
35ba069d50913c3fb250bb60ec310439db36895337Alan Viverette    val DB: ClassName = ClassName.get("androidx.sqlite.db", "SupportSQLiteDatabase")
366f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val SQLITE_STMT: ClassName =
37ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.sqlite.db", "SupportSQLiteStatement")
386f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val SQLITE_OPEN_HELPER: ClassName =
39ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.sqlite.db", "SupportSQLiteOpenHelper")
406f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val SQLITE_OPEN_HELPER_CALLBACK: ClassName =
41ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.sqlite.db", "SupportSQLiteOpenHelper.Callback")
426f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val SQLITE_OPEN_HELPER_CONFIG: ClassName =
43ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.sqlite.db", "SupportSQLiteOpenHelper.Configuration")
44de23b91b2c982ef5c93349b16415654ae3fe5ac9Yigit Boyar    val QUERY: ClassName =
45ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.sqlite.db", "SupportSQLiteQuery")
46efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar}
47efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar
48250a3e6dc5d50c533575b7d276730b89eecc7c19Yigit Boyarobject RoomTypeNames {
49ba069d50913c3fb250bb60ec310439db36895337Alan Viverette    val STRING_UTIL: ClassName = ClassName.get("androidx.room.util", "StringUtil")
50ba069d50913c3fb250bb60ec310439db36895337Alan Viverette    val ROOM_DB: ClassName = ClassName.get("androidx.room", "RoomDatabase")
51ba069d50913c3fb250bb60ec310439db36895337Alan Viverette    val ROOM_DB_CONFIG: ClassName = ClassName.get("androidx.room",
52d72e20e472815b7d0918e0d309cee48a71c7988bYigit Boyar            "DatabaseConfiguration")
536f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val INSERTION_ADAPTER: ClassName =
54ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.room", "EntityInsertionAdapter")
556f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val DELETE_OR_UPDATE_ADAPTER: ClassName =
56ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.room", "EntityDeletionOrUpdateAdapter")
576f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val SHARED_SQLITE_STMT: ClassName =
58ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.room", "SharedSQLiteStatement")
596f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val INVALIDATION_TRACKER: ClassName =
60ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.room", "InvalidationTracker")
616f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val INVALIDATION_OBSERVER: ClassName =
62ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.room.InvalidationTracker", "Observer")
636f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val ROOM_SQL_QUERY: ClassName =
64ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.room", "RoomSQLiteQuery")
656f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val OPEN_HELPER: ClassName =
66ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.room", "RoomOpenHelper")
67a64756a18111a7312b3fa03b76d13381a8907176Yigit Boyar    val OPEN_HELPER_DELEGATE: ClassName =
68ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.room", "RoomOpenHelper.Delegate")
696f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val TABLE_INFO: ClassName =
70ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.room.util", "TableInfo")
716f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val TABLE_INFO_COLUMN: ClassName =
72ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.room.util", "TableInfo.Column")
736f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val TABLE_INFO_FOREIGN_KEY: ClassName =
74ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.room.util", "TableInfo.ForeignKey")
756f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val TABLE_INFO_INDEX: ClassName =
76ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.room.util", "TableInfo.Index")
776f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val LIMIT_OFFSET_DATA_SOURCE: ClassName =
78ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.room.paging", "LimitOffsetDataSource")
799fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik}
809fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik
819fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craikobject PagingTypeNames {
82abd098954d3fe996f336201ccb25884aaa34e07fYigit Boyar    val DATA_SOURCE: ClassName =
83ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.paging", "DataSource")
84dc60cacc66972b47f27acdf727332878ce5958aeChris Craik    val POSITIONAL_DATA_SOURCE: ClassName =
85ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.paging", "PositionalDataSource")
86dc60cacc66972b47f27acdf727332878ce5958aeChris Craik    val DATA_SOURCE_FACTORY: ClassName =
87ba069d50913c3fb250bb60ec310439db36895337Alan Viverette            ClassName.get("androidx.paging", "DataSource.Factory")
88846dfcf52e22de6d912f8ece05ff939c2c9bd154Yigit Boyar}
89846dfcf52e22de6d912f8ece05ff939c2c9bd154Yigit Boyar
90846dfcf52e22de6d912f8ece05ff939c2c9bd154Yigit Boyarobject LifecyclesTypeNames {
91ba069d50913c3fb250bb60ec310439db36895337Alan Viverette    val LIVE_DATA: ClassName = ClassName.get("androidx.lifecycle", "LiveData")
92ba069d50913c3fb250bb60ec310439db36895337Alan Viverette    val COMPUTABLE_LIVE_DATA: ClassName = ClassName.get("androidx.lifecycle",
93846dfcf52e22de6d912f8ece05ff939c2c9bd154Yigit Boyar            "ComputableLiveData")
94efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar}
95efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar
96efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyarobject AndroidTypeNames {
976f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikas    val CURSOR: ClassName = ClassName.get("android.database", "Cursor")
98ba069d50913c3fb250bb60ec310439db36895337Alan Viverette    val ARRAY_MAP: ClassName = ClassName.get("androidx.collection", "ArrayMap")
993f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki    val BUILD: ClassName = ClassName.get("android.os", "Build")
100092164e5501d0a254001225acd9dca42e5fa57e9Yigit Boyar}
101092164e5501d0a254001225acd9dca42e5fa57e9Yigit Boyar
102092164e5501d0a254001225acd9dca42e5fa57e9Yigit Boyarobject CommonTypeNames {
103092164e5501d0a254001225acd9dca42e5fa57e9Yigit Boyar    val LIST = ClassName.get("java.util", "List")
104092164e5501d0a254001225acd9dca42e5fa57e9Yigit Boyar    val SET = ClassName.get("java.util", "Set")
1053a433f7ddbffa6131883cc3b23fc80edf54add19Yigit Boyar    val STRING = ClassName.get("java.lang", "String")
1069fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik    val INTEGER = ClassName.get("java.lang", "Integer")
107c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning    val OPTIONAL = ClassName.get("java.util", "Optional")
108250a3e6dc5d50c533575b7d276730b89eecc7c19Yigit Boyar}
1093c592c4ccbc6052b11443b0fa575052c08fefa55Yigit Boyar
11067ff17da9546803a38f8144b7a466a116e622866Tyson Henningobject GuavaBaseTypeNames {
11167ff17da9546803a38f8144b7a466a116e622866Tyson Henning    val OPTIONAL = ClassName.get("com.google.common.base", "Optional")
11267ff17da9546803a38f8144b7a466a116e622866Tyson Henning}
11367ff17da9546803a38f8144b7a466a116e622866Tyson Henning
114f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henningobject GuavaUtilConcurrentTypeNames {
115f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning    val LISTENABLE_FUTURE = ClassName.get("com.google.common.util.concurrent", "ListenableFuture")
116f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning}
117f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning
1183c592c4ccbc6052b11443b0fa575052c08fefa55Yigit Boyarobject RxJava2TypeNames {
1193c592c4ccbc6052b11443b0fa575052c08fefa55Yigit Boyar    val FLOWABLE = ClassName.get("io.reactivex", "Flowable")
1200cf0bfe0e88f5d511a2a23495005c2da9ea91fd5Yigit Boyar    val MAYBE = ClassName.get("io.reactivex", "Maybe")
1210cf0bfe0e88f5d511a2a23495005c2da9ea91fd5Yigit Boyar    val SINGLE = ClassName.get("io.reactivex", "Single")
1223c592c4ccbc6052b11443b0fa575052c08fefa55Yigit Boyar}
1233c592c4ccbc6052b11443b0fa575052c08fefa55Yigit Boyar
1243c592c4ccbc6052b11443b0fa575052c08fefa55Yigit Boyarobject ReactiveStreamsTypeNames {
1253c592c4ccbc6052b11443b0fa575052c08fefa55Yigit Boyar    val PUBLISHER = ClassName.get("org.reactivestreams", "Publisher")
1263c592c4ccbc6052b11443b0fa575052c08fefa55Yigit Boyar}
1273c592c4ccbc6052b11443b0fa575052c08fefa55Yigit Boyar
128f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henningobject RoomGuavaTypeNames {
129ba069d50913c3fb250bb60ec310439db36895337Alan Viverette    val GUAVA_ROOM = ClassName.get("androidx.room.guava", "GuavaRoom")
130f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning}
131f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning
1323c592c4ccbc6052b11443b0fa575052c08fefa55Yigit Boyarobject RoomRxJava2TypeNames {
133ba069d50913c3fb250bb60ec310439db36895337Alan Viverette    val RX_ROOM = ClassName.get("androidx.room", "RxRoom")
134ba069d50913c3fb250bb60ec310439db36895337Alan Viverette    val RX_EMPTY_RESULT_SET_EXCEPTION = ClassName.get("androidx.room",
1350cf0bfe0e88f5d511a2a23495005c2da9ea91fd5Yigit Boyar            "EmptyResultSetException")
1363c592c4ccbc6052b11443b0fa575052c08fefa55Yigit Boyar}
137f8c3624579d5761a2d34a7199932492d267f5f85Yigit Boyar
1386f1f5567abe765d30fda9c8fedce5617ecdeda9cAurimas Liutikasfun TypeName.defaultValue(): String {
139f8c3624579d5761a2d34a7199932492d267f5f85Yigit Boyar    return if (!isPrimitive) {
140f8c3624579d5761a2d34a7199932492d267f5f85Yigit Boyar        "null"
141f8c3624579d5761a2d34a7199932492d267f5f85Yigit Boyar    } else if (this == TypeName.BOOLEAN) {
142f8c3624579d5761a2d34a7199932492d267f5f85Yigit Boyar        "false"
143f8c3624579d5761a2d34a7199932492d267f5f85Yigit Boyar    } else {
144f8c3624579d5761a2d34a7199932492d267f5f85Yigit Boyar        "0"
145f8c3624579d5761a2d34a7199932492d267f5f85Yigit Boyar    }
146f8c3624579d5761a2d34a7199932492d267f5f85Yigit Boyar}
147