J2K: no call to super constructor in the header of class when there is no primary constructor
This commit is contained in:
@@ -71,7 +71,7 @@ class ClassBodyConverter(private val psiClass: PsiClass,
|
||||
val rBrace = RBrace().assignPrototype(psiClass.getRBrace())
|
||||
|
||||
if (isObject) {
|
||||
return ClassBody(null, emptyList(), convertedMembers.values().toList(), emptyList(), lBrace, rBrace)
|
||||
return ClassBody(null, null, convertedMembers.values().toList(), emptyList(), lBrace, rBrace)
|
||||
}
|
||||
|
||||
val useCompanionObject = shouldGenerateCompanionObject(convertedMembers)
|
||||
@@ -102,7 +102,7 @@ class ClassBodyConverter(private val psiClass: PsiClass,
|
||||
primaryConstructorSignature = null // no "()" after class name is needed in this case
|
||||
}
|
||||
|
||||
return ClassBody(primaryConstructorSignature, constructorConverter?.baseClassParams ?: listOf(), members, companionObjectMembers, lBrace, rBrace)
|
||||
return ClassBody(primaryConstructorSignature, constructorConverter?.baseClassParams, members, companionObjectMembers, lBrace, rBrace)
|
||||
}
|
||||
|
||||
private fun Converter.convertMember(member: PsiMember,
|
||||
|
||||
@@ -145,7 +145,7 @@ class ConstructorConverter(
|
||||
}
|
||||
}
|
||||
|
||||
public var baseClassParams: List<DeferredElement<Expression>> = listOf()
|
||||
public var baseClassParams: List<DeferredElement<Expression>>? = if (constructors.isEmpty()) emptyList() else null
|
||||
private set
|
||||
|
||||
public fun convertConstructor(constructor: PsiMethod,
|
||||
@@ -263,6 +263,9 @@ class ConstructorConverter(
|
||||
correctedConverter.deferredElement { codeConverter -> codeConverter.correct().convertExpression(it) }
|
||||
}
|
||||
}
|
||||
else {
|
||||
baseClassParams = emptyList()
|
||||
}
|
||||
|
||||
val parameterList = ParameterList(params.indices.map { i ->
|
||||
val parameter = params[i]
|
||||
|
||||
@@ -158,12 +158,12 @@ class Converter private(
|
||||
return when {
|
||||
psiClass.isInterface() -> {
|
||||
val classBody = ClassBodyConverter(psiClass, this, isOpenClass = false, isObject = false).convertBody()
|
||||
Trait(name, annotations, modifiers, typeParameters, extendsTypes, listOf(), implementsTypes, classBody)
|
||||
Trait(name, annotations, modifiers, typeParameters, extendsTypes, implementsTypes, classBody)
|
||||
}
|
||||
|
||||
psiClass.isEnum() -> {
|
||||
val classBody = ClassBodyConverter(psiClass, this, isOpenClass = false, isObject = false).convertBody()
|
||||
Enum(name, annotations, modifiers, typeParameters, listOf(), listOf(), implementsTypes, classBody)
|
||||
Enum(name, annotations, modifiers, typeParameters, implementsTypes, classBody)
|
||||
}
|
||||
|
||||
else -> {
|
||||
@@ -254,7 +254,7 @@ class Converter private(
|
||||
convertModifiers(psiClass).without(Modifier.ABSTRACT),
|
||||
TypeParameterList.Empty,
|
||||
listOf(),
|
||||
listOf(),
|
||||
null,
|
||||
listOf(),
|
||||
classBody).assignPrototype(psiClass)
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.j2k.ast
|
||||
import org.jetbrains.kotlin.j2k.CodeBuilder
|
||||
|
||||
class AnonymousClassBody(body: ClassBody, val extendsTrait: Boolean)
|
||||
: Class(Identifier.Empty, Annotations.Empty, Modifiers.Empty, TypeParameterList.Empty, listOf(), listOf(), listOf(), body) {
|
||||
: Class(Identifier.Empty, Annotations.Empty, Modifiers.Empty, TypeParameterList.Empty, listOf(), null, listOf(), body) {
|
||||
override fun generateCode(builder: CodeBuilder) {
|
||||
body.append(builder)
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ open class Class(
|
||||
modifiers: Modifiers,
|
||||
val typeParameterList: TypeParameterList,
|
||||
val extendsTypes: List<Type>,
|
||||
val baseClassParams: List<DeferredElement<Expression>>,
|
||||
val baseClassParams: List<DeferredElement<Expression>>?,
|
||||
val implementsTypes: List<Type>,
|
||||
val body: ClassBody
|
||||
) : Member(annotations, modifiers) {
|
||||
@@ -56,7 +56,7 @@ open class Class(
|
||||
}
|
||||
|
||||
private fun baseClassSignatureWithParams(builder: CodeBuilder): List<() -> CodeBuilder> {
|
||||
if (keyword.equals("class") && extendsTypes.size() == 1) {
|
||||
if (keyword.equals("class") && extendsTypes.size() == 1 && baseClassParams != null) {
|
||||
return listOf({
|
||||
builder append extendsTypes[0] append "("
|
||||
builder.append(baseClassParams, ", ")
|
||||
@@ -75,7 +75,7 @@ class Object(
|
||||
annotations: Annotations,
|
||||
modifiers: Modifiers,
|
||||
body: ClassBody
|
||||
) : Class(name, annotations, modifiers, TypeParameterList.Empty, emptyList(), emptyList(), emptyList(), body) {
|
||||
) : Class(name, annotations, modifiers, TypeParameterList.Empty, emptyList(), null, emptyList(), body) {
|
||||
|
||||
override val keyword: String
|
||||
get() = "object"
|
||||
|
||||
@@ -22,7 +22,7 @@ abstract class Member(val annotations: Annotations, val modifiers: Modifiers) :
|
||||
|
||||
class ClassBody (
|
||||
val primaryConstructorSignature: PrimaryConstructorSignature?,
|
||||
val baseClassParams: List<DeferredElement<Expression>>,
|
||||
val baseClassParams: List<DeferredElement<Expression>>?,
|
||||
val members: List<Member>,
|
||||
val companionObjectMembers: List<Member>,
|
||||
val lBrace: LBrace,
|
||||
|
||||
@@ -23,11 +23,9 @@ class Enum(
|
||||
annotations: Annotations,
|
||||
modifiers: Modifiers,
|
||||
typeParameterList: TypeParameterList,
|
||||
extendsTypes: List<Type>,
|
||||
baseClassParams: List<DeferredElement<Expression>>,
|
||||
implementsTypes: List<Type>,
|
||||
body: ClassBody
|
||||
) : Class(name, annotations, modifiers, typeParameterList, extendsTypes, baseClassParams, implementsTypes, body) {
|
||||
) : Class(name, annotations, modifiers, typeParameterList, emptyList(), null, implementsTypes, body) {
|
||||
|
||||
override fun generateCode(builder: CodeBuilder) {
|
||||
builder append annotations appendWithSpaceAfter presentationModifiers() append "enum class " append name
|
||||
|
||||
@@ -22,10 +22,9 @@ class Trait(
|
||||
modifiers: Modifiers,
|
||||
typeParameterList: TypeParameterList,
|
||||
extendsTypes: List<Type>,
|
||||
baseClassParams: List<DeferredElement<Expression>>,
|
||||
implementsTypes: List<Type>,
|
||||
body: ClassBody
|
||||
) : Class(name, annotations, modifiers, typeParameterList, extendsTypes, baseClassParams, implementsTypes, body) {
|
||||
) : Class(name, annotations, modifiers, typeParameterList, extendsTypes, null, implementsTypes, body) {
|
||||
|
||||
override val keyword: String
|
||||
get() = "trait"
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
class C {
|
||||
class Base {
|
||||
}
|
||||
|
||||
class C extends Base {
|
||||
C(int arg1, int arg2, int arg3) {
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
class C {
|
||||
open class Base
|
||||
|
||||
class C : Base {
|
||||
constructor(arg1: Int, arg2: Int, arg3: Int) {
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user