1/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.arch.persistence.room.ext
18
19import com.squareup.javapoet.ArrayTypeName
20import com.squareup.javapoet.ClassName
21import com.squareup.javapoet.TypeName
22import javax.lang.model.type.TypeMirror
23import kotlin.reflect.KClass
24
25val L = "\$L"
26val T = "\$T"
27val N = "\$N"
28val S = "\$S"
29
30fun KClass<*>.typeName() = ClassName.get(this.java)
31fun KClass<*>.arrayTypeName() = ArrayTypeName.of(typeName())
32fun TypeMirror.typeName() = TypeName.get(this)
33
34object SupportDbTypeNames {
35    val DB: ClassName = ClassName.get("android.arch.persistence.db", "SupportSQLiteDatabase")
36    val SQLITE_STMT : ClassName =
37            ClassName.get("android.arch.persistence.db", "SupportSQLiteStatement")
38    val SQLITE_OPEN_HELPER : ClassName =
39            ClassName.get("android.arch.persistence.db", "SupportSQLiteOpenHelper")
40    val SQLITE_OPEN_HELPER_CALLBACK : ClassName =
41            ClassName.get("android.arch.persistence.db", "SupportSQLiteOpenHelper.Callback")
42    val SQLITE_OPEN_HELPER_FACTORY : ClassName =
43            ClassName.get("android.arch.persistence.db", "SupportSQLiteOpenHelper.Factory")
44    val SQLITE_OPEN_HELPER_CONFIG : ClassName =
45            ClassName.get("android.arch.persistence.db", "SupportSQLiteOpenHelper.Configuration")
46    val SQLITE_OPEN_HELPER_CONFIG_BUILDER : ClassName =
47            ClassName.get("android.arch.persistence.db",
48                    "SupportSQLiteOpenHelper.Configuration.Builder")
49}
50
51object RoomTypeNames {
52    val STRING_UTIL: ClassName = ClassName.get("android.arch.persistence.room.util", "StringUtil")
53    val CURSOR_CONVERTER : ClassName =
54            ClassName.get("android.arch.persistence.room", "CursorConverter")
55    val ROOM : ClassName = ClassName.get("android.arch.persistence.room", "Room")
56    val ROOM_DB : ClassName = ClassName.get("android.arch.persistence.room", "RoomDatabase")
57    val ROOM_DB_CONFIG : ClassName = ClassName.get("android.arch.persistence.room",
58            "DatabaseConfiguration")
59    val INSERTION_ADAPTER : ClassName =
60            ClassName.get("android.arch.persistence.room", "EntityInsertionAdapter")
61    val DELETE_OR_UPDATE_ADAPTER : ClassName =
62            ClassName.get("android.arch.persistence.room", "EntityDeletionOrUpdateAdapter")
63    val SHARED_SQLITE_STMT : ClassName =
64            ClassName.get("android.arch.persistence.room", "SharedSQLiteStatement")
65    val INVALIDATION_TRACKER : ClassName =
66            ClassName.get("android.arch.persistence.room", "InvalidationTracker")
67    val INVALIDATION_OBSERVER : ClassName =
68            ClassName.get("android.arch.persistence.room.InvalidationTracker", "Observer")
69    val ROOM_SQL_QUERY : ClassName =
70            ClassName.get("android.arch.persistence.room", "RoomSQLiteQuery")
71    val OPEN_HELPER : ClassName =
72            ClassName.get("android.arch.persistence.room", "RoomOpenHelper")
73    val OPEN_HELPER_DELEGATE: ClassName =
74            ClassName.get("android.arch.persistence.room", "RoomOpenHelper.Delegate")
75    val TABLE_INFO : ClassName =
76            ClassName.get("android.arch.persistence.room.util", "TableInfo")
77    val TABLE_INFO_COLUMN : ClassName =
78            ClassName.get("android.arch.persistence.room.util", "TableInfo.Column")
79    val TABLE_INFO_FOREIGN_KEY : ClassName =
80            ClassName.get("android.arch.persistence.room.util", "TableInfo.ForeignKey")
81    val LIMIT_OFFSET_DATA_SOURCE : ClassName =
82            ClassName.get("android.arch.persistence.room.paging", "LimitOffsetDataSource")
83}
84
85object ArchTypeNames {
86    val APP_EXECUTOR : ClassName =
87            ClassName.get("android.arch.core.executor", "AppToolkitTaskExecutor")
88}
89
90object PagingTypeNames {
91    val DATA_SOURCE: ClassName =
92            ClassName.get("android.arch.paging", "DataSource")
93    val TILED_DATA_SOURCE: ClassName =
94            ClassName.get("android.arch.paging", "TiledDataSource")
95    val LIVE_PAGED_LIST_PROVIDER: ClassName =
96            ClassName.get("android.arch.paging", "LivePagedListProvider")
97
98}
99
100object LifecyclesTypeNames {
101    val LIVE_DATA: ClassName = ClassName.get("android.arch.lifecycle", "LiveData")
102    val COMPUTABLE_LIVE_DATA : ClassName = ClassName.get("android.arch.lifecycle",
103            "ComputableLiveData")
104}
105
106object AndroidTypeNames {
107    val CURSOR : ClassName = ClassName.get("android.database", "Cursor")
108    val ARRAY_MAP : ClassName = ClassName.get("android.support.v4.util", "ArrayMap")
109}
110
111object CommonTypeNames {
112    val LIST = ClassName.get("java.util", "List")
113    val SET = ClassName.get("java.util", "Set")
114    val STRING = ClassName.get("java.lang", "String")
115    val INTEGER = ClassName.get("java.lang", "Integer")
116}
117
118object RxJava2TypeNames {
119    val FLOWABLE = ClassName.get("io.reactivex", "Flowable")
120    val MAYBE = ClassName.get("io.reactivex", "Maybe")
121    val SINGLE = ClassName.get("io.reactivex", "Single")
122}
123
124object ReactiveStreamsTypeNames {
125    val PUBLISHER = ClassName.get("org.reactivestreams", "Publisher")
126}
127
128object RoomRxJava2TypeNames {
129    val RX_ROOM = ClassName.get("android.arch.persistence.room", "RxRoom")
130    val RX_EMPTY_RESULT_SET_EXCEPTION = ClassName.get("android.arch.persistence.room",
131            "EmptyResultSetException")
132}
133
134fun TypeName.defaultValue() : String {
135    return if (!isPrimitive) {
136        "null"
137    } else if (this == TypeName.BOOLEAN) {
138        "false"
139    } else {
140        "0"
141    }
142}
143