diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index f64e866f58f..c198ddc4929 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -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.toJK(): List { + 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}") } } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt index f8d8169d5a2..bc3383e9219 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt @@ -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 accept(visitor: JKVisitor, 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, - block: JKBlock + modifierList: JKModifierList, returnType: JKTypeElement, name: JKNameIdentifier, valueArguments: List, block: JKBlock ) : JKJavaMethod, JKBranchElementBase() { - override fun accept(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaAccessModifier(this, data) } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt index fd1b8c256b1..2d0362e34ce 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -36,7 +36,6 @@ class JKClassImpl( } - class JKNameIdentifierImpl(override val value: String) : JKNameIdentifier, JKElementBase() {} class JKModifierListImpl( @@ -59,6 +58,7 @@ class JKBlockImpl(statements: List = 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 accept(visitor: JKVisitor, data: D): R = visitor.visitExpressionStatement(this, data) override val expression: JKExpression by child(expression) } +class JKDeclarationStatementImpl(declaredStatements: List) : JKDeclarationStatement, JKBranchElementBase() { + override val declaredStatements by children(declaredStatements) + + override fun accept(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitLocalVariable(this, data) +} + +class JKStubExpressionImpl() : JKStubExpression, JKElementBase() diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/symbols.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/symbols.kt index 70da9129d7a..ee39d365c98 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/symbols.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/symbols.kt @@ -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. diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt index bdf86c2bd45..310c45969d9 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt @@ -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 diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index 14561390aed..87cabebbdae 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -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 +} + interface JKBinaryExpression : JKExpression { var left: JKExpression var right: JKExpression @@ -147,4 +154,6 @@ interface JKValueArgument : JKTreeElement { interface JKStringLiteralExpression : JKLiteralExpression { val text: String -} \ No newline at end of file +} + +interface JKStubExpression : JKExpression diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt index 5ac8ce746cd..e3c66a9d774 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.j2k.tree interface JKKtProperty : JKField { - val initializer: JKExpression val getter: JKBlock val setter: JKBlock } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt index df70266f10b..11a5a57065d 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt @@ -8,6 +8,7 @@ interface JKVisitor { 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 { 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 { 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) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt index 374684655a9..6bc92854545 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt @@ -13,6 +13,8 @@ interface JKVisitorVoid : JKVisitor { 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 { 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 { 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)