New J2K: Added declaration statements, local variables and stub expression.
This commit is contained in:
@@ -232,8 +232,8 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
return JKJavaFieldImpl(
|
||||
with(modifierMapper) { modifierList.toJK() },
|
||||
with(expressionTreeMapper) { typeElement?.toJK() } ?: TODO(),
|
||||
JKNameIdentifierImpl(this.name),
|
||||
with(expressionTreeMapper) { initializer?.toJK() } ?: TODO()
|
||||
JKNameIdentifierImpl(name),
|
||||
with(expressionTreeMapper) { initializer?.toJK() } ?: JKStubExpressionImpl()
|
||||
).also {
|
||||
(symbolProvider.provideSymbol(this) as? JKUniverseFieldSymbol)?.run { target = it }
|
||||
}
|
||||
@@ -265,14 +265,26 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
return JKBlockImpl(statements.map { it.toJK() })
|
||||
}
|
||||
|
||||
fun Array<out PsiElement>.toJK(): List<JKDeclaration> {
|
||||
return this.map {
|
||||
if (it is PsiLocalVariable) {
|
||||
JKLocalVariableImpl(
|
||||
with(modifierMapper) { it.modifierList.toJK() },
|
||||
with(expressionTreeMapper) { it.typeElement.toJK() },
|
||||
JKNameIdentifierImpl(it.name ?: TODO()),
|
||||
with(expressionTreeMapper) { it.initializer?.toJK() } ?: JKStubExpressionImpl()
|
||||
).also { i -> symbolProvider.symbols[it] = JKUniverseFieldSymbol(i) }
|
||||
} else TODO()
|
||||
}
|
||||
}
|
||||
|
||||
fun PsiStatement.toJK(): JKStatement {
|
||||
if (this is PsiExpressionStatement) {
|
||||
return JKExpressionStatementImpl(with(expressionTreeMapper) { expression.toJK() })
|
||||
return when (this) {
|
||||
is PsiExpressionStatement -> JKExpressionStatementImpl(with(expressionTreeMapper) { expression.toJK() })
|
||||
is PsiReturnStatement -> JKReturnStatementImpl(with(expressionTreeMapper) { returnValue?.toJK() ?: JKStubExpressionImpl() })
|
||||
is PsiDeclarationStatement -> JKDeclarationStatementImpl(declaredElements.toJK())
|
||||
else -> TODO("for ${this::class}")
|
||||
}
|
||||
if (this is PsiReturnStatement) {
|
||||
return JKReturnStatementImpl(with(expressionTreeMapper) { returnValue?.toJK() ?: TODO() })
|
||||
}
|
||||
TODO("for ${this::class}")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,13 +21,8 @@ import org.jetbrains.kotlin.j2k.tree.JKLiteralExpression.LiteralType.*
|
||||
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
|
||||
|
||||
class JKJavaFieldImpl(
|
||||
modifierList: JKModifierList,
|
||||
type: JKTypeElement,
|
||||
name: JKNameIdentifier,
|
||||
initializer: JKExpression
|
||||
) : JKJavaField, JKBranchElementBase() {
|
||||
|
||||
class JKJavaFieldImpl(modifierList: JKModifierList, type: JKTypeElement, name: JKNameIdentifier, initializer: JKExpression) : JKJavaField,
|
||||
JKBranchElementBase() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaField(this, data)
|
||||
|
||||
override var initializer: JKExpression by child(initializer)
|
||||
@@ -37,13 +32,8 @@ class JKJavaFieldImpl(
|
||||
}
|
||||
|
||||
class JKJavaMethodImpl(
|
||||
modifierList: JKModifierList,
|
||||
returnType: JKTypeElement,
|
||||
name: JKNameIdentifier,
|
||||
valueArguments: List<JKValueArgument>,
|
||||
block: JKBlock
|
||||
modifierList: JKModifierList, returnType: JKTypeElement, name: JKNameIdentifier, valueArguments: List<JKValueArgument>, block: JKBlock
|
||||
) : JKJavaMethod, JKBranchElementBase() {
|
||||
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethod(this, data)
|
||||
|
||||
override var modifierList: JKModifierList by child(modifierList)
|
||||
@@ -65,7 +55,6 @@ class JKJavaLiteralExpressionImpl(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class JKJavaAccessModifierImpl(override val type: JKJavaAccessModifier.AccessModifierType) : JKJavaAccessModifier, JKElementBase() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaAccessModifier(this, data)
|
||||
}
|
||||
|
||||
@@ -36,7 +36,6 @@ class JKClassImpl(
|
||||
|
||||
}
|
||||
|
||||
|
||||
class JKNameIdentifierImpl(override val value: String) : JKNameIdentifier, JKElementBase() {}
|
||||
|
||||
class JKModifierListImpl(
|
||||
@@ -59,6 +58,7 @@ class JKBlockImpl(statements: List<JKStatement> = emptyList()) : JKBlock, JKBran
|
||||
override var statements by children(statements)
|
||||
}
|
||||
|
||||
|
||||
class JKBinaryExpressionImpl(
|
||||
left: JKExpression,
|
||||
right: JKExpression,
|
||||
@@ -100,14 +100,18 @@ class JKQualifiedExpressionImpl(
|
||||
override var selector: JKExpression by child(selector)
|
||||
}
|
||||
|
||||
class JKExpressionStatementImpl(
|
||||
expression: JKExpression
|
||||
) : JKExpressionStatement, JKBranchElementBase() {
|
||||
class JKExpressionStatementImpl(expression: JKExpression) : JKExpressionStatement, JKBranchElementBase() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitExpressionStatement(this, data)
|
||||
|
||||
override val expression: JKExpression by child(expression)
|
||||
}
|
||||
|
||||
class JKDeclarationStatementImpl(declaredStatements: List<JKDeclaration>) : JKDeclarationStatement, JKBranchElementBase() {
|
||||
override val declaredStatements by children(declaredStatements)
|
||||
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitDeclarationStatement(this, data)
|
||||
}
|
||||
|
||||
class JKArrayAccessExpressionImpl(
|
||||
expression: JKExpression,
|
||||
indexExpression: JKExpression
|
||||
@@ -151,3 +155,15 @@ class JKBooleanLiteral(val value: Boolean) : JKLiteralExpression, JKElementBase(
|
||||
override val type: LiteralType
|
||||
get() = BOOLEAN
|
||||
}
|
||||
|
||||
class JKLocalVariableImpl(modifierList: JKModifierList, type: JKTypeElement, name: JKNameIdentifier, initializer: JKExpression) :
|
||||
JKLocalVariable, JKBranchElementBase() {
|
||||
override var modifierList by child(modifierList)
|
||||
override val initializer by child(initializer)
|
||||
override val name by child(name)
|
||||
override val type by child(type)
|
||||
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitLocalVariable(this, data)
|
||||
}
|
||||
|
||||
class JKStubExpressionImpl() : JKStubExpression, JKElementBase()
|
||||
|
||||
@@ -69,7 +69,11 @@ class JKMultiverseMethodSymbol(override val target: PsiMethod) : JKMethodSymbol
|
||||
|
||||
}
|
||||
|
||||
class JKUniverseFieldSymbol : JKFieldSymbol {
|
||||
class JKUniverseFieldSymbol() : JKFieldSymbol {
|
||||
constructor(target: JKField) : this() {
|
||||
this.target = target
|
||||
}
|
||||
|
||||
override lateinit var target: JKField
|
||||
override val declaredIn: JKSymbol
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
|
||||
@@ -18,9 +18,7 @@ package org.jetbrains.kotlin.j2k.tree
|
||||
|
||||
import org.jetbrains.kotlin.j2k.tree.impl.JKMethodSymbol
|
||||
|
||||
interface JKJavaField : JKField, JKBranchElement {
|
||||
val initializer: JKExpression
|
||||
}
|
||||
interface JKJavaField : JKField, JKBranchElement
|
||||
|
||||
interface JKJavaMethod : JKMethod, JKBranchElement {
|
||||
val block: JKBlock
|
||||
|
||||
@@ -47,8 +47,11 @@ interface JKMethod : JKDeclaration, JKModifierListOwner {
|
||||
interface JKField : JKDeclaration, JKModifierListOwner {
|
||||
val type: JKTypeElement
|
||||
val name: JKNameIdentifier
|
||||
val initializer: JKExpression
|
||||
}
|
||||
|
||||
interface JKLocalVariable : JKField
|
||||
|
||||
interface JKModifier : JKTreeElement
|
||||
|
||||
interface JKModifierList : JKTreeElement {
|
||||
@@ -83,6 +86,10 @@ interface JKExpressionStatement : JKStatement {
|
||||
val expression: JKExpression
|
||||
}
|
||||
|
||||
interface JKDeclarationStatement : JKStatement {
|
||||
val declaredStatements: List<JKDeclaration>
|
||||
}
|
||||
|
||||
interface JKBinaryExpression : JKExpression {
|
||||
var left: JKExpression
|
||||
var right: JKExpression
|
||||
@@ -147,4 +154,6 @@ interface JKValueArgument : JKTreeElement {
|
||||
|
||||
interface JKStringLiteralExpression : JKLiteralExpression {
|
||||
val text: String
|
||||
}
|
||||
}
|
||||
|
||||
interface JKStubExpression : JKExpression
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package org.jetbrains.kotlin.j2k.tree
|
||||
|
||||
interface JKKtProperty : JKField {
|
||||
val initializer: JKExpression
|
||||
val getter: JKBlock
|
||||
val setter: JKBlock
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ interface JKVisitor<out R, in D> {
|
||||
fun visitClass(klass: JKClass, data: D): R = visitDeclaration(klass, data)
|
||||
fun visitMethod(method: JKMethod, data: D): R = visitDeclaration(method, data)
|
||||
fun visitField(field: JKField, data: D): R = visitDeclaration(field, data)
|
||||
fun visitLocalVariable(localVariable: JKLocalVariable, data: D): R = visitField(localVariable, data)
|
||||
fun visitModifier(modifier: JKModifier, data: D): R = visitTreeElement(modifier, data)
|
||||
fun visitModifierList(modifierList: JKModifierList, data: D): R = visitTreeElement(modifierList, data)
|
||||
fun visitAccessModifier(accessModifier: JKAccessModifier, data: D): R = visitModifier(accessModifier, data)
|
||||
@@ -20,6 +21,7 @@ interface JKVisitor<out R, in D> {
|
||||
fun visitNameIdentifier(nameIdentifier: JKNameIdentifier, data: D): R = visitIdentifier(nameIdentifier, data)
|
||||
fun visitExpression(expression: JKExpression, data: D): R = visitTreeElement(expression, data)
|
||||
fun visitExpressionStatement(expressionStatement: JKExpressionStatement, data: D): R = visitStatement(expressionStatement, data)
|
||||
fun visitDeclarationStatement(declarationStatement: JKDeclarationStatement, data: D): R = visitStatement(declarationStatement, data)
|
||||
fun visitBinaryExpression(binaryExpression: JKBinaryExpression, data: D): R = visitExpression(binaryExpression, data)
|
||||
fun visitUnaryExpression(unaryExpression: JKUnaryExpression, data: D): R = visitExpression(unaryExpression, data)
|
||||
fun visitPrefixExpression(prefixExpression: JKPrefixExpression, data: D): R = visitUnaryExpression(prefixExpression, data)
|
||||
@@ -34,6 +36,7 @@ interface JKVisitor<out R, in D> {
|
||||
fun visitLiteralExpression(literalExpression: JKLiteralExpression, data: D): R = visitExpression(literalExpression, data)
|
||||
fun visitValueArgument(valueArgument: JKValueArgument, data: D): R = visitTreeElement(valueArgument, data)
|
||||
fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression, data: D): R = visitLiteralExpression(stringLiteralExpression, data)
|
||||
fun visitStubExpression(stubExpression: JKStubExpression, data: D): R = visitExpression(stubExpression, data)
|
||||
fun visitJavaField(javaField: JKJavaField, data: D): R = visitField(javaField, data)
|
||||
fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): R = visitMethod(javaMethod, data)
|
||||
fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: D): R = visitLoop(javaForLoop, data)
|
||||
|
||||
@@ -13,6 +13,8 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
||||
override fun visitMethod(method: JKMethod, data: Nothing?) = visitMethod(method)
|
||||
fun visitField(field: JKField) = visitDeclaration(field, null)
|
||||
override fun visitField(field: JKField, data: Nothing?) = visitField(field)
|
||||
fun visitLocalVariable(localVariable: JKLocalVariable) = visitField(localVariable, null)
|
||||
override fun visitLocalVariable(localVariable: JKLocalVariable, data: Nothing?) = visitLocalVariable(localVariable)
|
||||
fun visitModifier(modifier: JKModifier) = visitTreeElement(modifier, null)
|
||||
override fun visitModifier(modifier: JKModifier, data: Nothing?) = visitModifier(modifier)
|
||||
fun visitModifierList(modifierList: JKModifierList) = visitTreeElement(modifierList, null)
|
||||
@@ -37,6 +39,8 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
||||
override fun visitExpression(expression: JKExpression, data: Nothing?) = visitExpression(expression)
|
||||
fun visitExpressionStatement(expressionStatement: JKExpressionStatement) = visitStatement(expressionStatement, null)
|
||||
override fun visitExpressionStatement(expressionStatement: JKExpressionStatement, data: Nothing?) = visitExpressionStatement(expressionStatement)
|
||||
fun visitDeclarationStatement(declarationStatement: JKDeclarationStatement) = visitStatement(declarationStatement, null)
|
||||
override fun visitDeclarationStatement(declarationStatement: JKDeclarationStatement, data: Nothing?) = visitDeclarationStatement(declarationStatement)
|
||||
fun visitBinaryExpression(binaryExpression: JKBinaryExpression) = visitExpression(binaryExpression, null)
|
||||
override fun visitBinaryExpression(binaryExpression: JKBinaryExpression, data: Nothing?) = visitBinaryExpression(binaryExpression)
|
||||
fun visitUnaryExpression(unaryExpression: JKUnaryExpression) = visitExpression(unaryExpression, null)
|
||||
@@ -65,6 +69,8 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
||||
override fun visitValueArgument(valueArgument: JKValueArgument, data: Nothing?) = visitValueArgument(valueArgument)
|
||||
fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression) = visitLiteralExpression(stringLiteralExpression, null)
|
||||
override fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression, data: Nothing?) = visitStringLiteralExpression(stringLiteralExpression)
|
||||
fun visitStubExpression(stubExpression: JKStubExpression) = visitExpression(stubExpression, null)
|
||||
override fun visitStubExpression(stubExpression: JKStubExpression, data: Nothing?) = visitStubExpression(stubExpression)
|
||||
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