diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ClassBodyConverter.kt b/j2k/src/org/jetbrains/kotlin/j2k/ClassBodyConverter.kt index fdb6b56c961..3e5d2727f8c 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ClassBodyConverter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ClassBodyConverter.kt @@ -93,7 +93,7 @@ class ClassBodyConverter(private val psiClass: PsiClass, } } - return ClassBody(null, null, convertedMembers.values().toList(), emptyList(), lBrace, rBrace) + return ClassBody(null, null, convertedMembers.values().toList(), emptyList(), lBrace, rBrace, false) } val useCompanionObject = shouldGenerateCompanionObject(convertedMembers) @@ -120,15 +120,15 @@ class ClassBodyConverter(private val psiClass: PsiClass, } if (primaryConstructorSignature != null - && primaryConstructorSignature!!.annotations.isEmpty - && primaryConstructorSignature!!.accessModifier == null - && primaryConstructorSignature!!.parameterList.parameters.isEmpty() + && primaryConstructorSignature.annotations.isEmpty + && primaryConstructorSignature.accessModifier == null + && primaryConstructorSignature.parameterList.parameters.isEmpty() && members.none { it is SecondaryConstructor } ) { primaryConstructorSignature = null // no "()" after class name is needed in this case } - return ClassBody(primaryConstructorSignature, constructorConverter?.baseClassParams, members, companionObjectMembers, lBrace, rBrace) + return ClassBody(primaryConstructorSignature, constructorConverter?.baseClassParams, members, companionObjectMembers, lBrace, rBrace, psiClass.isEnum()) } private fun Converter.convertMember(member: PsiMember, diff --git a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt index a3e3c918ee4..a8732e33adf 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt @@ -278,7 +278,7 @@ class Converter private( // to convert fields and nested types - they are not allowed in Kotlin but we convert them and let user refactor code var classBody = ClassBodyConverter(psiClass, this, isOpenClass = false, isObject = false).convertBody() classBody = ClassBody(constructorSignature, classBody.baseClassParams, classBody.members, - classBody.companionObjectMembers, classBody.lBrace, classBody.rBrace) + classBody.companionObjectMembers, classBody.lBrace, classBody.rBrace, classBody.isEnumBody) val annotationAnnotation = Annotation(Identifier("annotation").assignNoPrototype(), listOf(), false, false).assignNoPrototype() return Class(psiClass.declarationIdentifier(), @@ -310,8 +310,7 @@ class Converter private( EnumConstant(name, annotations, modifiers, - typeConverter.convertType(field.getType(), Nullability.NotNull), - deferredElement { codeConverter -> ExpressionList(codeConverter.convertExpressions(argumentList?.getExpressions() ?: array())).assignPrototype(argumentList) }) + deferredElement { codeConverter -> ExpressionList(codeConverter.convertExpressions(argumentList?.getExpressions() ?: arrayOf())).assignPrototype(argumentList) }) } else { val isVal = isVal(referenceSearcher, field) diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ast/ClassBody.kt b/j2k/src/org/jetbrains/kotlin/j2k/ast/ClassBody.kt index 11ad8f325a4..d1931409e42 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ast/ClassBody.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ast/ClassBody.kt @@ -30,7 +30,8 @@ class ClassBody ( val members: List, val companionObjectMembers: List, val lBrace: LBrace, - val rBrace: RBrace) { + val rBrace: RBrace, + val isEnumBody: Boolean) { fun append(builder: CodeBuilder) { val membersFiltered = members.filter { !it.isEmpty } @@ -38,7 +39,20 @@ class ClassBody ( builder append " " append lBrace append "\n" - builder.append(membersFiltered, "\n") + if (!isEnumBody) { + builder.append(membersFiltered, "\n") + } + else { + val (constants, otherMembers) = membersFiltered.partition { it is EnumConstant } + + builder.append(constants, ",\n") + + if (otherMembers.isNotEmpty() || companionObjectMembers.isNotEmpty()) { + builder.append(";\n") + } + + builder.append(otherMembers, "\n") + } appendCompanionObject(builder, membersFiltered.isNotEmpty()) diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ast/EnumConstant.kt b/j2k/src/org/jetbrains/kotlin/j2k/ast/EnumConstant.kt index e886f2eca96..520edeaee4e 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ast/EnumConstant.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ast/EnumConstant.kt @@ -22,7 +22,6 @@ class EnumConstant( val identifier: Identifier, annotations: Annotations, modifiers: Modifiers, - val type: Type, val params: DeferredElement ) : Member(annotations, modifiers) { @@ -32,6 +31,6 @@ class EnumConstant( return } - builder append annotations append identifier append " : " append type append "(" append params append ")" + builder append annotations append identifier append "(" append params append ")" } } diff --git a/j2k/testData/fileOrElement/annotations/annotationInterface3.kt b/j2k/testData/fileOrElement/annotations/annotationInterface3.kt index 7a85ee670d6..5bdc3a19d4c 100644 --- a/j2k/testData/fileOrElement/annotations/annotationInterface3.kt +++ b/j2k/testData/fileOrElement/annotations/annotationInterface3.kt @@ -2,7 +2,7 @@ annotation class Anon(public val value: String) { public enum class E { - A + A, B } diff --git a/j2k/testData/fileOrElement/class/innerEnum.kt b/j2k/testData/fileOrElement/class/innerEnum.kt index 96c0c373d58..3be13d7e019 100644 --- a/j2k/testData/fileOrElement/class/innerEnum.kt +++ b/j2k/testData/fileOrElement/class/innerEnum.kt @@ -1,7 +1,7 @@ class A { enum class E { - A - B + A, + B, C } } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/enum/colorEnum.kt b/j2k/testData/fileOrElement/enum/colorEnum.kt index 2f115c1275d..e0be3de3982 100644 --- a/j2k/testData/fileOrElement/enum/colorEnum.kt +++ b/j2k/testData/fileOrElement/enum/colorEnum.kt @@ -1,6 +1,6 @@ package demo enum class MyEnum private constructor(public val color: Int) { - RED : MyEnum(10) - BLUE : MyEnum(20) + RED(10), + BLUE(20) } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/enum/companionObject.kt b/j2k/testData/fileOrElement/enum/companionObject.kt index e1034b44bd6..aaa023de3a5 100644 --- a/j2k/testData/fileOrElement/enum/companionObject.kt +++ b/j2k/testData/fileOrElement/enum/companionObject.kt @@ -1,6 +1,7 @@ public enum class TestEnum { - A - B + A, + B; + companion object { diff --git a/j2k/testData/fileOrElement/enum/enumConstantIsNotNull.kt b/j2k/testData/fileOrElement/enum/enumConstantIsNotNull.kt index b55fb50de2b..799373e6f4d 100644 --- a/j2k/testData/fileOrElement/enum/enumConstantIsNotNull.kt +++ b/j2k/testData/fileOrElement/enum/enumConstantIsNotNull.kt @@ -1,5 +1,5 @@ enum class E { - FOO + FOO; fun foo() { FOO.toString() diff --git a/j2k/testData/fileOrElement/enum/enumWithNameField.kt b/j2k/testData/fileOrElement/enum/enumWithNameField.kt index 367dd4d3235..7834ad54751 100644 --- a/j2k/testData/fileOrElement/enum/enumWithNameField.kt +++ b/j2k/testData/fileOrElement/enum/enumWithNameField.kt @@ -1,5 +1,4 @@ enum class E { - I - + I; private val name: String? = null } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/enum/fieldsWithPrimaryPrivateConstructor.kt b/j2k/testData/fileOrElement/enum/fieldsWithPrimaryPrivateConstructor.kt index a4e4586c567..ddb41f893bf 100644 --- a/j2k/testData/fileOrElement/enum/fieldsWithPrimaryPrivateConstructor.kt +++ b/j2k/testData/fileOrElement/enum/fieldsWithPrimaryPrivateConstructor.kt @@ -1,7 +1,7 @@ enum class Color private constructor(public val code: Int) { - WHITE : Color(21) - BLACK : Color(22) - RED : Color(23) - YELLOW : Color(24) - BLUE : Color(25) + WHITE(21), + BLACK(22), + RED(23), + YELLOW(24), + BLUE(25) } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/enum/overrideToString.kt b/j2k/testData/fileOrElement/enum/overrideToString.kt index 78d0d11e532..0e183306785 100644 --- a/j2k/testData/fileOrElement/enum/overrideToString.kt +++ b/j2k/testData/fileOrElement/enum/overrideToString.kt @@ -1,10 +1,9 @@ enum class Color { - WHITE - BLACK - RED - YELLOW - BLUE - + WHITE, + BLACK, + RED, + YELLOW, + BLUE; override fun toString(): String { return "COLOR" } diff --git a/j2k/testData/fileOrElement/enum/runnableImplementation.kt b/j2k/testData/fileOrElement/enum/runnableImplementation.kt index ecf36efd4c9..8cccda48f33 100644 --- a/j2k/testData/fileOrElement/enum/runnableImplementation.kt +++ b/j2k/testData/fileOrElement/enum/runnableImplementation.kt @@ -1,9 +1,9 @@ enum class Color : Runnable { - WHITE - BLACK - RED - YELLOW - BLUE + WHITE, + BLACK, + RED, + YELLOW, + BLUE; override fun run() { println("name()=" + name() + ", toString()=" + toString()) diff --git a/j2k/testData/fileOrElement/enum/typeSafeEnum.kt b/j2k/testData/fileOrElement/enum/typeSafeEnum.kt index 5e49520179f..d6b5b5b6992 100644 --- a/j2k/testData/fileOrElement/enum/typeSafeEnum.kt +++ b/j2k/testData/fileOrElement/enum/typeSafeEnum.kt @@ -1,6 +1,6 @@ enum class Coin { - PENNY - NICKEL - DIME + PENNY, + NICKEL, + DIME, QUARTER } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/settings/openByDefault.kt b/j2k/testData/fileOrElement/settings/openByDefault.kt index 3e4530c9fbd..bb24bb1c815 100644 --- a/j2k/testData/fileOrElement/settings/openByDefault.kt +++ b/j2k/testData/fileOrElement/settings/openByDefault.kt @@ -30,6 +30,7 @@ open class D : I { } enum class E { + ; fun foo(): Int { return 0 }