EntityProcessor.kt revision aa82fce1d73394bdc7f4c2510cf94a3572032b24
11600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar/* 21600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * Copyright (C) 2016 The Android Open Source Project 31600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * 41600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 51600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * you may not use this file except in compliance with the License. 61600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * You may obtain a copy of the License at 71600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * 81600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 91600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * 101600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * Unless required by applicable law or agreed to in writing, software 111600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 121600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * See the License for the specific language governing permissions and 141600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * limitations under the License. 151600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar */ 161600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar 171600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyarpackage com.android.support.room.processor 181600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar 19faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyarimport com.android.support.room.vo.Entity 200fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyarimport com.google.auto.common.AnnotationMirrors 211600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyarimport com.google.auto.common.MoreElements 221600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyarimport javax.lang.model.element.TypeElement 231600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar 24aa82fce1d73394bdc7f4c2510cf94a3572032b24Yigit Boyarclass EntityProcessor(baseContext: Context, val element: TypeElement) { 25aa82fce1d73394bdc7f4c2510cf94a3572032b24Yigit Boyar val context = baseContext.fork(element) 261600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar 27aa82fce1d73394bdc7f4c2510cf94a3572032b24Yigit Boyar fun process(): Entity { 28faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar context.checker.hasAnnotation(element, com.android.support.room.Entity::class, 298bad027c789d3fb3da8e68fa0154f2a24ccc2865Yigit Boyar ProcessorErrors.ENTITY_MUST_BE_ANNOTATED_WITH_ENTITY) 30aa82fce1d73394bdc7f4c2510cf94a3572032b24Yigit Boyar val pojo = PojoProcessor(context, element).process() 310fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar val annotation = MoreElements.getAnnotationMirror(element, 32faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar com.android.support.room.Entity::class.java).orNull() 330fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar val tableName : String 34faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar if (annotation != null) { 350fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar val annotationValue = AnnotationMirrors 36faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar .getAnnotationValue(annotation, "tableName").value.toString() 370fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar if (annotationValue == "") { 380fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar tableName = element.simpleName.toString() 390fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar } else { 400fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar tableName = annotationValue 410fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar } 420fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar } else { 430fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar tableName = element.simpleName.toString() 440fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar } 45faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar context.checker.notBlank(tableName, element, 46faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar ProcessorErrors.ENTITY_TABLE_NAME_CANNOT_BE_EMPTY) 4713a2048db98b1cc2dbd1692b73b794527975a446Yigit Boyar val entity = Entity(element, tableName, pojo.type, pojo.fields) 48faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar context.checker.check(entity.primaryKeys.isNotEmpty(), element, 49faf0a687b4b6022196c4a9223d2c901b1e9cebe7Yigit Boyar ProcessorErrors.MISSING_PRIMARY_KEY) 50e6325fbeaa2e6759496ea2ca9a4d3d958df690d7Yigit Boyar return entity 511600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar } 521600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar} 53