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 {
|
fun PsiField.toJK(): JKJavaField {
|
||||||
return JKJavaFieldImpl(
|
return JKJavaFieldImpl(
|
||||||
with(modifierMapper) { modifierList.toJK(finalAsMutability = true) },
|
with(modifierMapper) { modifierList.toJK(finalAsMutability = true) },
|
||||||
@@ -299,6 +307,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun PsiMember.toJK(): JKDeclaration? = when (this) {
|
fun PsiMember.toJK(): JKDeclaration? = when (this) {
|
||||||
|
is PsiEnumConstant -> this.toJK()
|
||||||
is PsiField -> this.toJK()
|
is PsiField -> this.toJK()
|
||||||
is PsiMethod -> this.toJK()
|
is PsiMethod -> this.toJK()
|
||||||
else -> null
|
else -> null
|
||||||
@@ -491,6 +500,10 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
|||||||
resultElement = with(declarationMapper) { field.toJK() }
|
resultElement = with(declarationMapper) { field.toJK() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitEnumConstant(enumConstant: PsiEnumConstant) {
|
||||||
|
resultElement = with(declarationMapper) { enumConstant.toJK() }
|
||||||
|
}
|
||||||
|
|
||||||
override fun visitMethod(method: PsiMethod) {
|
override fun visitMethod(method: PsiMethod) {
|
||||||
resultElement = with(declarationMapper) { method.toJK() }
|
resultElement = with(declarationMapper) { method.toJK() }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -219,16 +219,28 @@ class NewCodeBuilder {
|
|||||||
|
|
||||||
if (klass.declarationList.any { it !is JKKtPrimaryConstructor }) {
|
if (klass.declarationList.any { it !is JKKtPrimaryConstructor }) {
|
||||||
printer.block(multiline = true) {
|
printer.block(multiline = true) {
|
||||||
klass.declarationList.forEach {
|
renderEnumConstants(klass.declarationList.filterIsInstance())
|
||||||
it.accept(this)
|
renderNonEnumClassDeclarations(klass.declarationList.filterNot { it is JKEnumConstant })
|
||||||
printer.printlnWithNoIndent()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
printer.println()
|
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) {
|
override fun visitKtProperty(ktProperty: JKKtProperty) {
|
||||||
ktProperty.modifierList.accept(this)
|
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) {
|
override fun visitKtInitDeclaration(ktInitDeclaration: JKKtInitDeclaration) {
|
||||||
if (ktInitDeclaration.block.statements.isNotEmpty()) {
|
if (ktInitDeclaration.block.statements.isNotEmpty()) {
|
||||||
printer.print("init ")
|
printer.print("init ")
|
||||||
|
|||||||
@@ -469,5 +469,19 @@ class JKTypeParameterTypeImpl(
|
|||||||
override val nullability: Nullability = Nullability.Default
|
override val nullability: Nullability = Nullability.Default
|
||||||
) : JKTypeParameterType
|
) : 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 =
|
fun JKTypeElement.present(): Boolean =
|
||||||
type != JKNoTypeImpl
|
type != JKNoTypeImpl
|
||||||
@@ -286,4 +286,8 @@ interface JKTypeParameter : JKTreeElement {
|
|||||||
|
|
||||||
interface JKTypeParameterListOwner : JKTreeElement {
|
interface JKTypeParameterListOwner : JKTreeElement {
|
||||||
var typeParameterList: JKTypeParameterList
|
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 visitTypeParameterList(typeParameterList: JKTypeParameterList, data: D): R = visitTreeElement(typeParameterList, data)
|
||||||
fun visitTypeParameter(typeParameter: JKTypeParameter, data: D): R = visitTreeElement(typeParameter, data)
|
fun visitTypeParameter(typeParameter: JKTypeParameter, data: D): R = visitTreeElement(typeParameter, data)
|
||||||
fun visitTypeParameterListOwner(typeParameterListOwner: JKTypeParameterListOwner, data: D): R = visitTreeElement(typeParameterListOwner, 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 visitJavaField(javaField: JKJavaField, data: D): R = visitField(javaField, data)
|
||||||
fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): R = visitMethod(javaMethod, data)
|
fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): R = visitMethod(javaMethod, data)
|
||||||
fun visitJavaMethodCallExpression(javaMethodCallExpression: JKJavaMethodCallExpression, data: D): R = visitMethodCallExpression(javaMethodCallExpression, 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)
|
override fun visitTypeParameter(typeParameter: JKTypeParameter, data: Nothing?) = visitTypeParameter(typeParameter)
|
||||||
fun visitTypeParameterListOwner(typeParameterListOwner: JKTypeParameterListOwner) = visitTreeElement(typeParameterListOwner, null)
|
fun visitTypeParameterListOwner(typeParameterListOwner: JKTypeParameterListOwner) = visitTreeElement(typeParameterListOwner, null)
|
||||||
override fun visitTypeParameterListOwner(typeParameterListOwner: JKTypeParameterListOwner, data: Nothing?) = visitTypeParameterListOwner(typeParameterListOwner)
|
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)
|
fun visitJavaField(javaField: JKJavaField) = visitField(javaField, null)
|
||||||
override fun visitJavaField(javaField: JKJavaField, data: Nothing?) = visitJavaField(javaField)
|
override fun visitJavaField(javaField: JKJavaField, data: Nothing?) = visitJavaField(javaField)
|
||||||
fun visitJavaMethod(javaMethod: JKJavaMethod) = visitMethod(javaMethod, null)
|
fun visitJavaMethod(javaMethod: JKJavaMethod) = visitMethod(javaMethod, null)
|
||||||
|
|||||||
Reference in New Issue
Block a user