J2K: no call to super constructor in the header of class when there is no primary constructor

This commit is contained in:
Valentin Kipyatkov
2015-03-30 13:33:30 +03:00
parent c57f2b10d6
commit 7e50f72d5b
10 changed files with 23 additions and 18 deletions
@@ -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,
+1 -3
View File
@@ -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) {
}