From 6135ea56038eeaa77c55de2eac9c0be719cffc0e Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 20 Jun 2014 22:30:00 +0400 Subject: [PATCH] Java to Kotlin converter: minor code refactoring --- j2k/src/org/jetbrains/jet/j2k/Converter.kt | 44 +++++++++++----------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/j2k/src/org/jetbrains/jet/j2k/Converter.kt b/j2k/src/org/jetbrains/jet/j2k/Converter.kt index 977415ce42c..853877dea11 100644 --- a/j2k/src/org/jetbrains/jet/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/jet/j2k/Converter.kt @@ -66,7 +66,7 @@ public class Converter private(val project: Project, val settings: ConverterSett return builder.result } - private fun convertTopElement(element: PsiElement?): Element? = when(element) { + private fun convertTopElement(element: PsiElement?): Element? = when (element) { is PsiJavaFile -> convertFile(element) is PsiClass -> convertClass(element) is PsiMethod -> convertMethod(element, HashSet()) @@ -125,21 +125,7 @@ public class Converter private(val project: Project, val settings: ConverterSett val primaryConstructor = convertedMembers.values().filterIsInstance(javaClass()).firstOrNull() val secondaryConstructors = convertedMembers.values().filterIsInstance(javaClass()) - // do not convert private static methods into class object if possible - val useClassObject = if (psiClass.isEnum()) { - false - } - else { - val members = convertedMembers.keySet().filter { it !is PsiMethod || !it.isConstructor() } - val classObjectMembers = members.filter { it !is PsiClass && it.hasModifierProperty(PsiModifier.STATIC) } - val nestedClasses = members.filterIsInstance(javaClass()).filter { it.hasModifierProperty(PsiModifier.STATIC) } - if (classObjectMembers.all { it is PsiMethod && it.hasModifierProperty(PsiModifier.PRIVATE) }) { - nestedClasses.any { nestedClass -> classObjectMembers.any { findMethodCalls(it as PsiMethod, nestedClass).isNotEmpty() } } - } - else { - true - } - } + val useClassObject = shouldGenerateClassObject(psiClass, convertedMembers) val normalMembers = ArrayList() val classObjectMembers = ArrayList() @@ -158,7 +144,21 @@ public class Converter private(val project: Project, val settings: ConverterSett return ClassBody(primaryConstructor, secondaryConstructors, normalMembers, classObjectMembers, lBrace, rBrace) } - private fun convertMember(member: PsiMember, membersToRemove: MutableSet): Member = when(member) { + // do not convert private static methods into class object if possible + private fun shouldGenerateClassObject(psiClass: PsiClass, convertedMembers: Map): Boolean { + if (psiClass.isEnum()) return false + val members = convertedMembers.keySet().filter { it !is PsiMethod || !it.isConstructor() } + val classObjectMembers = members.filter { it !is PsiClass && it.hasModifierProperty(PsiModifier.STATIC) } + val nestedClasses = members.filterIsInstance(javaClass()).filter { it.hasModifierProperty(PsiModifier.STATIC) } + if (classObjectMembers.all { it is PsiMethod && it.hasModifierProperty(PsiModifier.PRIVATE) }) { + return nestedClasses.any { nestedClass -> classObjectMembers.any { findMethodCalls(it as PsiMethod, nestedClass).isNotEmpty() } } + } + else { + return true + } + } + + private fun convertMember(member: PsiMember, membersToRemove: MutableSet): Member = when (member) { is PsiMethod -> convertMethod(member, membersToRemove) is PsiField -> convertField(member) is PsiClass -> convertClass(member) @@ -351,7 +351,7 @@ public class Converter private(val project: Project, val settings: ConverterSett it.getMethod().getContainingClass()?.getQualifiedName() == JAVA_LANG_OBJECT } if (overridesMethodFromObject) { - when(method.getName()) { + when (method.getName()) { "equals", "hashCode", "toString" -> return true // these methods from java.lang.Object exist in kotlin.Any else -> { @@ -435,7 +435,7 @@ public class Converter private(val project: Project, val settings: ConverterSett if (refs.any { PsiUtil.isAccessedForWriting(it) }) return null - for(ref in refs) { + for (ref in refs) { val assignment = ref.getParent() as? PsiAssignmentExpression ?: continue if (assignment.getOperationSign().getTokenType() != JavaTokenType.EQ) continue val assignee = assignment.getLExpression() as? PsiReferenceExpression ?: continue @@ -459,7 +459,7 @@ public class Converter private(val project: Project, val settings: ConverterSett return null } - fun convertBlock(block: PsiCodeBlock?, notEmpty: Boolean = true, statementFilter: (PsiStatement) -> Boolean = {true}): Block { + fun convertBlock(block: PsiCodeBlock?, notEmpty: Boolean = true, statementFilter: (PsiStatement) -> Boolean = { true }): Block { if (block == null) return Block.Empty val lBrace = LBrace().assignPrototype(block.getLBrace()) @@ -570,7 +570,7 @@ public class Converter private(val project: Project, val settings: ConverterSett } else { var child: PsiElement? = modifierList - while(true) { + while (true) { child = child!!.getNextSibling() if (child == null || child!!.getTextLength() != 0) break } @@ -608,7 +608,7 @@ public class Converter private(val project: Project, val settings: ConverterSett } private fun convertAttributeValue(value: PsiAnnotationMemberValue?, expectedType: PsiType?, isVararg: Boolean, isUnnamed: Boolean): List { - return when(value) { + return when (value) { is PsiExpression -> listOf(convertExpression(value as? PsiExpression, expectedType)) is PsiArrayInitializerMemberValue -> {