New J2K: Add typeParameters to JKClass

This commit is contained in:
Ilya Kirillov
2018-11-07 16:08:05 +03:00
committed by Ilya Kirillov
parent 1f59f91aeb
commit 33b66ec17e
6 changed files with 19 additions and 6 deletions
@@ -253,8 +253,11 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
val implTypes = this.implementsList?.mapTypes().orEmpty()
val extTypes = this.extendsList?.mapTypes().orEmpty()
return JKClassImpl(
with(modifierMapper) { modifierList.toJK() }, JKNameIdentifierImpl(name!!), JKInheritanceInfoImpl(extTypes + implTypes),
classKind
with(modifierMapper) { modifierList.toJK() },
JKNameIdentifierImpl(name!!),
JKInheritanceInfoImpl(extTypes + implTypes),
classKind,
typeParameterList?.toJK() ?: JKTypeParameterListImpl()
).also { jkClassImpl ->
jkClassImpl.declarationList = children.mapNotNull {
ElementVisitor().apply { it.accept(this) }.resultElement as? JKDeclaration
@@ -174,6 +174,7 @@ class NewCodeBuilder {
printer.print(classKindString(klass.classKind))
builder.append(" ")
printer.printWithNoIndent(klass.name.value)
klass.typeParameterList.accept(this)
val primaryConstructor = klass.primaryConstructor()
if (primaryConstructor != null && primaryConstructor.parameters.isNotEmpty()) {
@@ -23,7 +23,13 @@ class ClassToObjectPromotionConversion : RecursiveApplicableConversionBase() {
companion.invalidate()
element.invalidate()
return recurse(
JKClassImpl(element.modifierList, element.name, element.inheritance, JKClass.ClassKind.OBJECT)
JKClassImpl(
element.modifierList,
element.name,
element.inheritance,
JKClass.ClassKind.OBJECT,
element.typeParameterList
)
.apply {
declarationList = companion.declarationList
}
@@ -48,7 +48,8 @@ class StaticsToCompanionExtractConversion : RecursiveApplicableConversionBase()
),
JKNameIdentifierImpl(""),
JKInheritanceInfoImpl(emptyList()),
JKClass.ClassKind.COMPANION
JKClass.ClassKind.COMPANION,
JKTypeParameterListImpl()
).also { element.declarationList += it }
}
}
@@ -43,7 +43,8 @@ class JKClassImpl(
modifierList: JKModifierList,
name: JKNameIdentifier,
inheritance: JKInheritanceInfo,
override var classKind: JKClass.ClassKind
override var classKind: JKClass.ClassKind,
typeParameterList: JKTypeParameterList
) : JKClass, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitClass(this, data)
@@ -51,6 +52,7 @@ class JKClassImpl(
override var modifierList by child(modifierList)
override var declarationList by children<JKDeclaration>()
override val inheritance by child(inheritance)
override var typeParameterList: JKTypeParameterList by child(typeParameterList)
}
class JKNameIdentifierImpl(override val value: String) : JKNameIdentifier, JKElementBase(), PsiOwner by PsiOwnerImpl() {
@@ -45,7 +45,7 @@ interface JKFile : JKTreeElement, JKBranchElement {
var declarationList: List<JKDeclaration>
}
interface JKClass : JKDeclaration, JKModifierListOwner, JKBranchElement {
interface JKClass : JKDeclaration, JKModifierListOwner, JKTypeParameterListOwner, JKBranchElement {
val name: JKNameIdentifier
val inheritance: JKInheritanceInfo