New J2K: Add enum constants
This commit is contained in:
committed by
Ilya Kirillov
parent
ff700b5399
commit
7e7d865054
@@ -268,6 +268,14 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
}
|
||||
}
|
||||
|
||||
fun PsiEnumConstant.toJK(): JKEnumConstant =
|
||||
JKEnumConstantImpl(
|
||||
JKNameIdentifierImpl(name),
|
||||
with(expressionTreeMapper) { argumentList.toJK() },
|
||||
JKTypeElementImpl(JKClassTypeImpl(symbolProvider.provideDirectSymbol(containingClass!!) as JKClassSymbol, emptyList())),
|
||||
with(modifierMapper) { modifierList.toJK() }
|
||||
)
|
||||
|
||||
fun PsiField.toJK(): JKJavaField {
|
||||
return JKJavaFieldImpl(
|
||||
with(modifierMapper) { modifierList.toJK(finalAsMutability = true) },
|
||||
@@ -299,6 +307,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
}
|
||||
|
||||
fun PsiMember.toJK(): JKDeclaration? = when (this) {
|
||||
is PsiEnumConstant -> this.toJK()
|
||||
is PsiField -> this.toJK()
|
||||
is PsiMethod -> this.toJK()
|
||||
else -> null
|
||||
@@ -491,6 +500,10 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
resultElement = with(declarationMapper) { field.toJK() }
|
||||
}
|
||||
|
||||
override fun visitEnumConstant(enumConstant: PsiEnumConstant) {
|
||||
resultElement = with(declarationMapper) { enumConstant.toJK() }
|
||||
}
|
||||
|
||||
override fun visitMethod(method: PsiMethod) {
|
||||
resultElement = with(declarationMapper) { method.toJK() }
|
||||
}
|
||||
|
||||
@@ -219,16 +219,28 @@ class NewCodeBuilder {
|
||||
|
||||
if (klass.declarationList.any { it !is JKKtPrimaryConstructor }) {
|
||||
printer.block(multiline = true) {
|
||||
klass.declarationList.forEach {
|
||||
it.accept(this)
|
||||
printer.printlnWithNoIndent()
|
||||
}
|
||||
renderEnumConstants(klass.declarationList.filterIsInstance())
|
||||
renderNonEnumClassDeclarations(klass.declarationList.filterNot { it is JKEnumConstant })
|
||||
}
|
||||
} else {
|
||||
printer.println()
|
||||
}
|
||||
}
|
||||
|
||||
private fun renderEnumConstants(enumConstants: List<JKEnumConstant>) {
|
||||
renderList(enumConstants) {
|
||||
it.accept(this)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun renderNonEnumClassDeclarations(declarations: List<JKDeclaration>) {
|
||||
declarations.forEach {
|
||||
it.accept(this)
|
||||
printer.printlnWithNoIndent()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override fun visitKtProperty(ktProperty: JKKtProperty) {
|
||||
ktProperty.modifierList.accept(this)
|
||||
@@ -244,6 +256,15 @@ class NewCodeBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitEnumConstant(enumConstant: JKEnumConstant) {
|
||||
enumConstant.name.accept(this)
|
||||
if (enumConstant.arguments.expressions.isNotEmpty()) {
|
||||
printer.par {
|
||||
enumConstant.arguments.accept(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitKtInitDeclaration(ktInitDeclaration: JKKtInitDeclaration) {
|
||||
if (ktInitDeclaration.block.statements.isNotEmpty()) {
|
||||
printer.print("init ")
|
||||
|
||||
@@ -469,5 +469,19 @@ class JKTypeParameterTypeImpl(
|
||||
override val nullability: Nullability = Nullability.Default
|
||||
) : JKTypeParameterType
|
||||
|
||||
class JKEnumConstantImpl(
|
||||
name: JKNameIdentifier,
|
||||
arguments: JKExpressionList,
|
||||
type: JKTypeElement,
|
||||
modifierList: JKModifierList
|
||||
) : JKEnumConstant, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||
override var name: JKNameIdentifier by child(name)
|
||||
override val arguments: JKExpressionList by child(arguments)
|
||||
override val type: JKTypeElement by child(type)
|
||||
override var initializer: JKExpression by child(JKStubExpressionImpl())
|
||||
override var modifierList: JKModifierList by child(modifierList)
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitEnumConstant(this, data)
|
||||
}
|
||||
|
||||
fun JKTypeElement.present(): Boolean =
|
||||
type != JKNoTypeImpl
|
||||
@@ -286,4 +286,8 @@ interface JKTypeParameter : JKTreeElement {
|
||||
|
||||
interface JKTypeParameterListOwner : JKTreeElement {
|
||||
var typeParameterList: JKTypeParameterList
|
||||
}
|
||||
|
||||
interface JKEnumConstant : JKField {
|
||||
val arguments: JKExpressionList
|
||||
}
|
||||
@@ -63,6 +63,7 @@ interface JKVisitor<out R, in D> {
|
||||
fun visitTypeParameterList(typeParameterList: JKTypeParameterList, data: D): R = visitTreeElement(typeParameterList, data)
|
||||
fun visitTypeParameter(typeParameter: JKTypeParameter, data: D): R = visitTreeElement(typeParameter, data)
|
||||
fun visitTypeParameterListOwner(typeParameterListOwner: JKTypeParameterListOwner, data: D): R = visitTreeElement(typeParameterListOwner, data)
|
||||
fun visitEnumConstant(enumConstant: JKEnumConstant, data: D): R = visitTreeElement(enumConstant, data)
|
||||
fun visitJavaField(javaField: JKJavaField, data: D): R = visitField(javaField, data)
|
||||
fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): R = visitMethod(javaMethod, data)
|
||||
fun visitJavaMethodCallExpression(javaMethodCallExpression: JKJavaMethodCallExpression, data: D): R = visitMethodCallExpression(javaMethodCallExpression, data)
|
||||
|
||||
@@ -123,6 +123,8 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
||||
override fun visitTypeParameter(typeParameter: JKTypeParameter, data: Nothing?) = visitTypeParameter(typeParameter)
|
||||
fun visitTypeParameterListOwner(typeParameterListOwner: JKTypeParameterListOwner) = visitTreeElement(typeParameterListOwner, null)
|
||||
override fun visitTypeParameterListOwner(typeParameterListOwner: JKTypeParameterListOwner, data: Nothing?) = visitTypeParameterListOwner(typeParameterListOwner)
|
||||
fun visitEnumConstant(enumConstant: JKEnumConstant) = visitTreeElement(enumConstant, null)
|
||||
override fun visitEnumConstant(enumConstant: JKEnumConstant, data: Nothing?) = visitEnumConstant(enumConstant)
|
||||
fun visitJavaField(javaField: JKJavaField) = visitField(javaField, null)
|
||||
override fun visitJavaField(javaField: JKJavaField, data: Nothing?) = visitJavaField(javaField)
|
||||
fun visitJavaMethod(javaMethod: JKJavaMethod) = visitMethod(javaMethod, null)
|
||||
|
||||
Reference in New Issue
Block a user