New J2K: Added java -> jk converter for method call.
This commit is contained in:
@@ -18,7 +18,9 @@ package org.jetbrains.kotlin.j2k
|
||||
|
||||
import com.intellij.lang.java.JavaLanguage
|
||||
import com.intellij.psi.*
|
||||
import com.intellij.psi.impl.source.tree.ChildRole
|
||||
import com.intellij.psi.impl.source.tree.java.PsiLiteralExpressionImpl
|
||||
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl
|
||||
import org.jetbrains.kotlin.j2k.tree.*
|
||||
import org.jetbrains.kotlin.j2k.tree.impl.*
|
||||
|
||||
@@ -39,7 +41,10 @@ class JavaToJKTreeBuilder {
|
||||
is PsiLiteralExpression -> {
|
||||
return toJK()
|
||||
}
|
||||
is PsiCallExpression -> {
|
||||
is PsiMethodCallExpression -> {
|
||||
return toJK()
|
||||
}
|
||||
is PsiReferenceExpression -> {
|
||||
return toJK()
|
||||
}
|
||||
}
|
||||
@@ -74,16 +79,23 @@ class JavaToJKTreeBuilder {
|
||||
return JKPostfixExpressionImpl(operand.toJK(), operationSign.toJK())
|
||||
}
|
||||
|
||||
fun PsiCallExpression.toJK(): JKExpression {
|
||||
return JKJavaCallExpressionImpl(resolveMethod().toJK(), argumentList.toJK())
|
||||
fun PsiMethodCallExpression.toJK(): JKExpression {
|
||||
val method = methodExpression as PsiReferenceExpressionImpl
|
||||
val identifier = (method.referenceNameElement as PsiIdentifier).convertMethodReference()
|
||||
val call = JKJavaCallExpressionImpl(argumentList.toJK(), identifier)
|
||||
return if (method.findChildByRole(ChildRole.DOT) != null) {
|
||||
JKQualifiedExpressionImpl((method.qualifier as PsiExpression).toJK(), JKJavaQualificationIdentifierImpl.DOT, call)
|
||||
}
|
||||
else {
|
||||
call
|
||||
}
|
||||
}
|
||||
|
||||
fun PsiExpressionList?.toJK(): JKExpressionList {
|
||||
this ?: return JKExpressionListImpl(emptyArray())
|
||||
fun PsiExpressionList.toJK(): JKExpressionList {
|
||||
return JKExpressionListImpl(expressions.map { it.toJK() }.toTypedArray())
|
||||
}
|
||||
|
||||
fun PsiMethod?.toJK(): JKJavaMethodReference {
|
||||
fun PsiIdentifier.convertMethodReference(): JKJavaMethodReference {
|
||||
return JKJavaMethodReferenceImpl()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,12 +77,12 @@ sealed class JKJavaQualificationIdentifierImpl : JKJavaQualificationIdentifier,
|
||||
object DOT : JKJavaQualificationIdentifierImpl()
|
||||
}
|
||||
|
||||
class JKJavaCallExpressionImpl(override val method: JKJavaMethodReference,
|
||||
override val arguments: JKExpressionList) : JKJavaCallExpression, JKElementBase() {
|
||||
class JKJavaCallExpressionImpl(override val arguments: JKExpressionList,
|
||||
override val identifier: JKJavaMethodReference) : JKJavaCallExpression, JKElementBase() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaCallExpression(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
|
||||
method.accept(visitor, data)
|
||||
identifier.accept(visitor, data)
|
||||
arguments.accept(visitor, data)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,4 +111,14 @@ class JKExpressionListImpl(override val expressions: Array<JKExpression>) : JKEx
|
||||
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
|
||||
expressions.forEach { it.accept(visitor, data) }
|
||||
}
|
||||
}
|
||||
|
||||
class JKQualifiedExpressionImpl(override val receiver: JKExpression, override val operator: JKQualificationIdentifier,
|
||||
override val selector: JKStatement) : JKQualifiedExpression, JKElementBase() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitQualifiedExpression(this, data)
|
||||
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
|
||||
receiver.accept(visitor, data)
|
||||
operator.accept(visitor, data)
|
||||
selector.accept(visitor, data)
|
||||
}
|
||||
}
|
||||
@@ -33,8 +33,6 @@ interface JKJavaForLoop : JKLoop
|
||||
|
||||
interface JKJavaAssignmentExpression : JKExpression
|
||||
|
||||
interface JKJavaCall : JKCall
|
||||
|
||||
interface JKJavaTypeIdentifier : JKTypeIdentifier {
|
||||
val typeName: String
|
||||
}
|
||||
@@ -48,7 +46,7 @@ interface JKJavaOperatorIdentifier : JKOperatorIdentifier
|
||||
interface JKJavaQualificationIdentifier : JKQualificationIdentifier
|
||||
|
||||
interface JKJavaCallExpression : JKCallExpression {
|
||||
override val method: JKJavaMethodReference
|
||||
override val identifier: JKJavaMethodReference
|
||||
}
|
||||
|
||||
interface JKJavaMethodReference : JKMethodReference
|
||||
|
||||
@@ -60,14 +60,14 @@ interface JKPostfixExpression : JKUnaryExpression {
|
||||
}
|
||||
|
||||
interface JKQualifiedExpression : JKExpression {
|
||||
val reciever: JKExpression
|
||||
val receiver: JKExpression
|
||||
val operator: JKQualificationIdentifier
|
||||
val selector: JKStatement
|
||||
}
|
||||
|
||||
interface JKCallExpression : JKExpression {
|
||||
val identifier: JKMethodReference
|
||||
val arguments: JKExpressionList
|
||||
val method: JKMethodReference
|
||||
}
|
||||
|
||||
interface JKExpressionList : JKElement {
|
||||
@@ -90,8 +90,6 @@ interface JKBlock : JKElement {
|
||||
var statements: List<JKStatement>
|
||||
}
|
||||
|
||||
interface JKCall : JKExpression
|
||||
|
||||
interface JKIdentifier : JKElement
|
||||
|
||||
interface JKTypeIdentifier : JKIdentifier
|
||||
|
||||
@@ -53,12 +53,6 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
||||
override fun visitModifier(modifier: JKModifier, data: Nothing?) = visitModifier(modifier)
|
||||
fun visitAccessModifier(accessModifier: JKAccessModifier) = visitModifier(accessModifier, null)
|
||||
override fun visitAccessModifier(accessModifier: JKAccessModifier, data: Nothing?) = visitAccessModifier(accessModifier)
|
||||
fun visitValueArgument(valueArgument: JKValueArgument) = visitElement(valueArgument, null)
|
||||
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 visitModalityModifier(modalityModifier: JKModalityModifier) = visitModifier(modalityModifier, null)
|
||||
override fun visitModalityModifier(modalityModifier: JKModalityModifier, data: Nothing?) = visitModalityModifier(modalityModifier)
|
||||
fun visitJavaField(javaField: JKJavaField) = visitDeclaration(javaField, null)
|
||||
override fun visitJavaField(javaField: JKJavaField, data: Nothing?) = visitJavaField(javaField)
|
||||
fun visitJavaMethod(javaMethod: JKJavaMethod) = visitDeclaration(javaMethod, null)
|
||||
@@ -83,8 +77,6 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
||||
override fun visitJavaMethodReference(javaMethodReference: JKJavaMethodReference, data: Nothing?) = visitJavaMethodReference(javaMethodReference)
|
||||
fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier) = visitAccessModifier(javaAccessModifier, null)
|
||||
override fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier, data: Nothing?) = visitJavaAccessModifier(javaAccessModifier)
|
||||
fun visitJavaModifier(javaModifier: JKJavaModifier) = visitModifier(javaModifier, null)
|
||||
override fun visitJavaModifier(javaModifier: JKJavaModifier, data: Nothing?) = visitJavaModifier(javaModifier)
|
||||
fun visitKtFun(ktFun: JKKtFun) = visitDeclaration(ktFun, null)
|
||||
override fun visitKtFun(ktFun: JKKtFun, data: Nothing?) = visitKtFun(ktFun)
|
||||
fun visitKtConstructor(ktConstructor: JKKtConstructor) = visitDeclaration(ktConstructor, null)
|
||||
@@ -95,6 +87,4 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
||||
override fun visitKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement, data: Nothing?) = visitKtAssignmentStatement(ktAssignmentStatement)
|
||||
fun visitKtCall(ktCall: JKKtCall) = visitCall(ktCall, null)
|
||||
override fun visitKtCall(ktCall: JKKtCall, data: Nothing?) = visitKtCall(ktCall)
|
||||
fun visitKtProperty(ktProperty: JKKtProperty) = visitDeclaration(ktProperty, null)
|
||||
override fun visitKtProperty(ktProperty: JKKtProperty, data: Nothing?) = visitKtProperty(ktProperty)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user