From 73ba1af779f903deea54570fb50a7848cde54f3e Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 24 Jun 2014 14:31:48 +0400 Subject: [PATCH] Java to Kotlin converter: minor code refactoring --- j2k/src/org/jetbrains/jet/j2k/Converter.kt | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/j2k/src/org/jetbrains/jet/j2k/Converter.kt b/j2k/src/org/jetbrains/jet/j2k/Converter.kt index db1a1a60199..05e91822095 100644 --- a/j2k/src/org/jetbrains/jet/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/jet/j2k/Converter.kt @@ -286,25 +286,32 @@ public class Converter private(val project: Project, val settings: ConverterSett convertElement(field.getArgumentList())) } else { - val initializer = field.getInitializer() val convertedType = typeConverter.convertVariableType(field) val isVal = isVal(field) - val omitType = !settings.specifyFieldTypeByDefault && - initializer != null && - (modifiers.isPrivate && (isVal || convertedType == typeConverter.convertExpressionType(initializer)) || - modifiers.isInternal && convertedType == typeConverter.convertExpressionType(initializer)) Field(name, annotations, modifiers, convertedType, - convertExpression(initializer, field.getType()), + convertExpression(field.getInitializer(), field.getType()), isVal, - !omitType, + shouldDeclareType(field, isVal, convertedType), field.hasWriteAccesses(field.getContainingClass())) } return converted.assignPrototype(field) } + private fun shouldDeclareType(field: PsiField, isVal: Boolean, convertedType: Type): Boolean { + if (settings.specifyFieldTypeByDefault) return true + val initializer = field.getInitializer() ?: return true + fun typeMatches() = convertedType == typeConverter.convertExpressionType(initializer) + return if (field.hasModifierProperty(PsiModifier.PRIVATE)) + !isVal && !typeMatches() + else if (field.hasModifierProperty(PsiModifier.PACKAGE_LOCAL)) + !typeMatches() + else + true + } + private fun isVal(field: PsiField): Boolean { if (field.hasModifierProperty(PsiModifier.FINAL)) return true if (!field.hasModifierProperty(PsiModifier.PRIVATE)) return false