@@ -65,6 +65,7 @@ constructor(processorManager: ProcessorManager, element: Element,
6565 var length = - 1
6666 var notNull = false
6767 var isNotNullType = false
68+ var isNullableType = true
6869 var onNullConflict: ConflictAction ? = null
6970 var onUniqueConflict: ConflictAction ? = null
7071 var unique = false
@@ -113,14 +114,22 @@ constructor(processorManager: ProcessorManager, element: Element,
113114 notNull = true
114115 }
115116
117+ if (elementTypeName?.isPrimitive == true ) {
118+ isNullableType = false
119+ isNotNullType = true
120+ }
121+
116122 // if specified, usually from Kotlin targets, we will not set null on the field.
117123 element.annotation< org.jetbrains.annotations.NotNull > ()?.let {
118124 isNotNullType = true
125+ isNullableType = false
119126 }
120127
128+ // android support annotation
121129 element.annotationMirrors
122- .find { it.annotationType.toTypeElement().toClassName() == ClassNames .NON_NULL }?.let {
130+ .find { it.annotationType.toTypeElement().toClassName() == ClassNames .NON_NULL }?.let {
123131 isNotNullType = true
132+ isNullableType = false
124133 }
125134
126135 column?.let {
@@ -144,13 +153,13 @@ constructor(processorManager: ProcessorManager, element: Element,
144153
145154 val isString = (elementTypeName == ClassName .get(String ::class .java))
146155 if (defaultValue != null
147- && isString
148- && ! QUOTE_PATTERN .matcher(defaultValue).find()) {
156+ && isString
157+ && ! QUOTE_PATTERN .matcher(defaultValue).find()) {
149158 defaultValue = " \" " + defaultValue + " \" "
150159 }
151160
152161 if (isNotNullType && defaultValue == null
153- && isString) {
162+ && isString) {
154163 defaultValue = " \"\" "
155164 }
156165
@@ -159,19 +168,19 @@ constructor(processorManager: ProcessorManager, element: Element,
159168
160169 if (isPackagePrivate) {
161170 columnAccessor = PackagePrivateScopeColumnAccessor (elementName, packageName,
162- baseTableDefinition.databaseDefinition?.classSeparator,
163- ClassName .get(element.enclosingElement as TypeElement ).simpleName())
171+ baseTableDefinition.databaseDefinition?.classSeparator,
172+ ClassName .get(element.enclosingElement as TypeElement ).simpleName())
164173
165174 PackagePrivateScopeColumnAccessor .putElement(
166- (columnAccessor as PackagePrivateScopeColumnAccessor ).helperClassName,
167- columnName)
175+ (columnAccessor as PackagePrivateScopeColumnAccessor ).helperClassName,
176+ columnName)
168177
169178 } else {
170179 val isPrivate = element.modifiers.contains(Modifier .PRIVATE )
171180 if (isPrivate) {
172181 val isBoolean = elementTypeName?.box() == TypeName .BOOLEAN .box()
173182 val useIs = isBoolean
174- && baseTableDefinition is TableDefinition && (baseTableDefinition as TableDefinition ).useIsForPrivateBooleans
183+ && baseTableDefinition is TableDefinition && (baseTableDefinition as TableDefinition ).useIsForPrivateBooleans
175184 columnAccessor = PrivateScopeColumnAccessor (elementName, object : GetterSetter {
176185 override val getterName: String = column?.getterName ? : " "
177186 override val setterName: String = column?.setterName ? : " "
@@ -220,7 +229,7 @@ constructor(processorManager: ProcessorManager, element: Element,
220229
221230 hasCustomConverter = false
222231 if (typeConverterClassName != null && typeMirror != null &&
223- typeConverterClassName != ClassNames .TYPE_CONVERTER ) {
232+ typeConverterClassName != ClassNames .TYPE_CONVERTER ) {
224233 typeConverterDefinition = TypeConverterDefinition (typeConverterClassName, typeMirror, manager)
225234 evaluateTypeConverter(typeConverterDefinition, true )
226235 }
@@ -234,11 +243,12 @@ constructor(processorManager: ProcessorManager, element: Element,
234243 wrapperAccessor = BlobColumnAccessor ()
235244 wrapperTypeName = ArrayTypeName .of(TypeName .BYTE )
236245 } else {
237- if (elementTypeName is ParameterizedTypeName ) {
246+ if (elementTypeName is ParameterizedTypeName ||
247+ elementTypeName == ArrayTypeName .of(TypeName .BYTE .unbox())) {
238248 // do nothing, for now.
239249 } else if (elementTypeName is ArrayTypeName ) {
240250 processorManager.messager.printMessage(Diagnostic .Kind .ERROR ,
241- " Columns cannot be of array type." )
251+ " Columns cannot be of array type. Found $elementTypeName " )
242252 } else {
243253 if (elementTypeName == TypeName .BOOLEAN ) {
244254 wrapperAccessor = BooleanColumnAccessor ()
@@ -258,7 +268,7 @@ constructor(processorManager: ProcessorManager, element: Element,
258268 }
259269
260270 combiner = Combiner (columnAccessor, elementTypeName!! , wrapperAccessor, wrapperTypeName,
261- subWrapperAccessor)
271+ subWrapperAccessor)
262272 }
263273
264274 private fun evaluateTypeConverter (typeConverterDefinition : TypeConverterDefinition ? ,
@@ -268,7 +278,7 @@ constructor(processorManager: ProcessorManager, element: Element,
268278
269279 if (it.modelTypeName != elementTypeName) {
270280 manager.logError(" The specified custom TypeConverter's Model Value ${it.modelTypeName} " +
271- " from ${it.className} must match the type of the column $elementTypeName . " )
281+ " from ${it.className} must match the type of the column $elementTypeName . " )
272282 } else {
273283 hasTypeConverter = true
274284 hasCustomConverter = isCustom
@@ -312,21 +322,21 @@ constructor(processorManager: ProcessorManager, element: Element,
312322 }
313323
314324 val fieldBuilder = FieldSpec .builder(propParam,
315- propertyFieldName, Modifier .PUBLIC , Modifier .STATIC , Modifier .FINAL )
325+ propertyFieldName, Modifier .PUBLIC , Modifier .STATIC , Modifier .FINAL )
316326
317327 if (isNonPrimitiveTypeConverter) {
318328 val codeBlock = CodeBlock .builder()
319329 codeBlock.add(" new \$ T(\$ T.class, \$ S, true," , propParam, tableClass, columnName)
320330 codeBlock.add(" \n new \$ T() {" +
321- " \n @Override" +
322- " \n public \$ T getTypeConverter(Class<?> modelClass) {" +
323- " \n \$ T adapter = (\$ T) \$ T.getInstanceAdapter(modelClass);" +
324- " \n return adapter.\$ L;" +
325- " \n }" +
326- " \n })" , ClassNames .TYPE_CONVERTER_GETTER , ClassNames .TYPE_CONVERTER ,
327- baseTableDefinition.outputClassName, baseTableDefinition.outputClassName,
328- ClassNames .FLOW_MANAGER ,
329- (wrapperAccessor as TypeConverterScopeColumnAccessor ).typeConverterFieldName)
331+ " \n @Override" +
332+ " \n public \$ T getTypeConverter(Class<?> modelClass) {" +
333+ " \n \$ T adapter = (\$ T) \$ T.getInstanceAdapter(modelClass);" +
334+ " \n return adapter.\$ L;" +
335+ " \n }" +
336+ " \n })" , ClassNames .TYPE_CONVERTER_GETTER , ClassNames .TYPE_CONVERTER ,
337+ baseTableDefinition.outputClassName, baseTableDefinition.outputClassName,
338+ ClassNames .FLOW_MANAGER ,
339+ (wrapperAccessor as TypeConverterScopeColumnAccessor ).typeConverterFieldName)
330340 fieldBuilder.initializer(codeBlock.build())
331341 } else {
332342 fieldBuilder.initializer(" new \$ T(\$ T.class, \$ S)" , propParam, tableClass, columnName)
@@ -375,7 +385,7 @@ constructor(processorManager: ProcessorManager, element: Element,
375385 defineProperty : Boolean = true) = code {
376386 SqliteStatementAccessCombiner (combiner).apply {
377387 addCode(if (useStart) " start" else " " , getDefaultValueBlock(), index.get(), modelBlock,
378- defineProperty)
388+ defineProperty)
379389 }
380390 this
381391 }
@@ -390,8 +400,8 @@ constructor(processorManager: ProcessorManager, element: Element,
390400 }
391401
392402 LoadFromCursorAccessCombiner (combiner, defaultValue != null ,
393- nameAllocator, baseTableDefinition.orderedCursorLookUp,
394- assignDefaultValue).apply {
403+ nameAllocator, baseTableDefinition.orderedCursorLookUp,
404+ assignDefaultValue).apply {
395405 addCode(columnName, getDefaultValueBlock(), index.get(), modelBlock)
396406 }
397407 this
@@ -426,10 +436,10 @@ constructor(processorManager: ProcessorManager, element: Element,
426436
427437 open fun appendExistenceMethod (codeBuilder : CodeBlock .Builder ) {
428438 ExistenceAccessCombiner (combiner, isRowId || isPrimaryKeyAutoIncrement,
429- isQuickCheckPrimaryKeyAutoIncrement, baseTableDefinition.elementClassName!! )
430- .apply {
431- codeBuilder.addCode(columnName, getDefaultValueBlock(), 0 , modelBlock)
432- }
439+ isQuickCheckPrimaryKeyAutoIncrement, baseTableDefinition.elementClassName!! )
440+ .apply {
441+ codeBuilder.addCode(columnName, getDefaultValueBlock(), 0 , modelBlock)
442+ }
433443 }
434444
435445 open fun appendPropertyComparisonAccessStatement (codeBuilder : CodeBlock .Builder ) {
@@ -446,9 +456,9 @@ constructor(processorManager: ProcessorManager, element: Element,
446456 codeBlockBuilder.add(" PRIMARY KEY " )
447457
448458 if (baseTableDefinition is TableDefinition &&
449- ! (baseTableDefinition as TableDefinition ).primaryKeyConflictActionName.isNullOrEmpty()) {
459+ ! (baseTableDefinition as TableDefinition ).primaryKeyConflictActionName.isNullOrEmpty()) {
450460 codeBlockBuilder.add(" ON CONFLICT \$ L " ,
451- (baseTableDefinition as TableDefinition ).primaryKeyConflictActionName)
461+ (baseTableDefinition as TableDefinition ).primaryKeyConflictActionName)
452462 }
453463
454464 codeBlockBuilder.add(" AUTOINCREMENT" )
@@ -484,8 +494,8 @@ constructor(processorManager: ProcessorManager, element: Element,
484494 if (elementTypeName == TypeName .BOOLEAN ) {
485495 defaultValue = " false"
486496 } else if (elementTypeName == TypeName .BYTE || elementTypeName == TypeName .INT
487- || elementTypeName == TypeName .DOUBLE || elementTypeName == TypeName .FLOAT
488- || elementTypeName == TypeName .LONG || elementTypeName == TypeName .SHORT ) {
497+ || elementTypeName == TypeName .DOUBLE || elementTypeName == TypeName .FLOAT
498+ || elementTypeName == TypeName .LONG || elementTypeName == TypeName .SHORT ) {
489499 defaultValue = " ($elementTypeName ) 0"
490500 } else if (elementTypeName == TypeName .CHAR ) {
491501 defaultValue = " '\\ u0000'"
0 commit comments