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.lang.java.JavaLanguage
|
||||||
import com.intellij.psi.*
|
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.PsiLiteralExpressionImpl
|
||||||
|
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl
|
||||||
import org.jetbrains.kotlin.j2k.tree.*
|
import org.jetbrains.kotlin.j2k.tree.*
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.*
|
import org.jetbrains.kotlin.j2k.tree.impl.*
|
||||||
|
|
||||||
@@ -39,7 +41,10 @@ class JavaToJKTreeBuilder {
|
|||||||
is PsiLiteralExpression -> {
|
is PsiLiteralExpression -> {
|
||||||
return toJK()
|
return toJK()
|
||||||
}
|
}
|
||||||
is PsiCallExpression -> {
|
is PsiMethodCallExpression -> {
|
||||||
|
return toJK()
|
||||||
|
}
|
||||||
|
is PsiReferenceExpression -> {
|
||||||
return toJK()
|
return toJK()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -74,16 +79,23 @@ class JavaToJKTreeBuilder {
|
|||||||
return JKPostfixExpressionImpl(operand.toJK(), operationSign.toJK())
|
return JKPostfixExpressionImpl(operand.toJK(), operationSign.toJK())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiCallExpression.toJK(): JKExpression {
|
fun PsiMethodCallExpression.toJK(): JKExpression {
|
||||||
return JKJavaCallExpressionImpl(resolveMethod().toJK(), argumentList.toJK())
|
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 {
|
fun PsiExpressionList.toJK(): JKExpressionList {
|
||||||
this ?: return JKExpressionListImpl(emptyArray())
|
|
||||||
return JKExpressionListImpl(expressions.map { it.toJK() }.toTypedArray())
|
return JKExpressionListImpl(expressions.map { it.toJK() }.toTypedArray())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiMethod?.toJK(): JKJavaMethodReference {
|
fun PsiIdentifier.convertMethodReference(): JKJavaMethodReference {
|
||||||
return JKJavaMethodReferenceImpl()
|
return JKJavaMethodReferenceImpl()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,12 +77,12 @@ sealed class JKJavaQualificationIdentifierImpl : JKJavaQualificationIdentifier,
|
|||||||
object DOT : JKJavaQualificationIdentifierImpl()
|
object DOT : JKJavaQualificationIdentifierImpl()
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKJavaCallExpressionImpl(override val method: JKJavaMethodReference,
|
class JKJavaCallExpressionImpl(override val arguments: JKExpressionList,
|
||||||
override val arguments: JKExpressionList) : JKJavaCallExpression, JKElementBase() {
|
override val identifier: JKJavaMethodReference) : JKJavaCallExpression, JKElementBase() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaCallExpression(this, data)
|
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) {
|
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
|
||||||
method.accept(visitor, data)
|
identifier.accept(visitor, data)
|
||||||
arguments.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) {
|
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
|
||||||
expressions.forEach { it.accept(visitor, data) }
|
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 JKJavaAssignmentExpression : JKExpression
|
||||||
|
|
||||||
interface JKJavaCall : JKCall
|
|
||||||
|
|
||||||
interface JKJavaTypeIdentifier : JKTypeIdentifier {
|
interface JKJavaTypeIdentifier : JKTypeIdentifier {
|
||||||
val typeName: String
|
val typeName: String
|
||||||
}
|
}
|
||||||
@@ -48,7 +46,7 @@ interface JKJavaOperatorIdentifier : JKOperatorIdentifier
|
|||||||
interface JKJavaQualificationIdentifier : JKQualificationIdentifier
|
interface JKJavaQualificationIdentifier : JKQualificationIdentifier
|
||||||
|
|
||||||
interface JKJavaCallExpression : JKCallExpression {
|
interface JKJavaCallExpression : JKCallExpression {
|
||||||
override val method: JKJavaMethodReference
|
override val identifier: JKJavaMethodReference
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaMethodReference : JKMethodReference
|
interface JKJavaMethodReference : JKMethodReference
|
||||||
|
|||||||
@@ -60,14 +60,14 @@ interface JKPostfixExpression : JKUnaryExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface JKQualifiedExpression : JKExpression {
|
interface JKQualifiedExpression : JKExpression {
|
||||||
val reciever: JKExpression
|
val receiver: JKExpression
|
||||||
val operator: JKQualificationIdentifier
|
val operator: JKQualificationIdentifier
|
||||||
val selector: JKStatement
|
val selector: JKStatement
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKCallExpression : JKExpression {
|
interface JKCallExpression : JKExpression {
|
||||||
|
val identifier: JKMethodReference
|
||||||
val arguments: JKExpressionList
|
val arguments: JKExpressionList
|
||||||
val method: JKMethodReference
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKExpressionList : JKElement {
|
interface JKExpressionList : JKElement {
|
||||||
@@ -90,8 +90,6 @@ interface JKBlock : JKElement {
|
|||||||
var statements: List<JKStatement>
|
var statements: List<JKStatement>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKCall : JKExpression
|
|
||||||
|
|
||||||
interface JKIdentifier : JKElement
|
interface JKIdentifier : JKElement
|
||||||
|
|
||||||
interface JKTypeIdentifier : JKIdentifier
|
interface JKTypeIdentifier : JKIdentifier
|
||||||
|
|||||||
@@ -53,12 +53,6 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
|||||||
override fun visitModifier(modifier: JKModifier, data: Nothing?) = visitModifier(modifier)
|
override fun visitModifier(modifier: JKModifier, data: Nothing?) = visitModifier(modifier)
|
||||||
fun visitAccessModifier(accessModifier: JKAccessModifier) = visitModifier(accessModifier, null)
|
fun visitAccessModifier(accessModifier: JKAccessModifier) = visitModifier(accessModifier, null)
|
||||||
override fun visitAccessModifier(accessModifier: JKAccessModifier, data: Nothing?) = visitAccessModifier(accessModifier)
|
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)
|
fun visitJavaField(javaField: JKJavaField) = visitDeclaration(javaField, null)
|
||||||
override fun visitJavaField(javaField: JKJavaField, data: Nothing?) = visitJavaField(javaField)
|
override fun visitJavaField(javaField: JKJavaField, data: Nothing?) = visitJavaField(javaField)
|
||||||
fun visitJavaMethod(javaMethod: JKJavaMethod) = visitDeclaration(javaMethod, null)
|
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)
|
override fun visitJavaMethodReference(javaMethodReference: JKJavaMethodReference, data: Nothing?) = visitJavaMethodReference(javaMethodReference)
|
||||||
fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier) = visitAccessModifier(javaAccessModifier, null)
|
fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier) = visitAccessModifier(javaAccessModifier, null)
|
||||||
override fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier, data: Nothing?) = visitJavaAccessModifier(javaAccessModifier)
|
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)
|
fun visitKtFun(ktFun: JKKtFun) = visitDeclaration(ktFun, null)
|
||||||
override fun visitKtFun(ktFun: JKKtFun, data: Nothing?) = visitKtFun(ktFun)
|
override fun visitKtFun(ktFun: JKKtFun, data: Nothing?) = visitKtFun(ktFun)
|
||||||
fun visitKtConstructor(ktConstructor: JKKtConstructor) = visitDeclaration(ktConstructor, null)
|
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)
|
override fun visitKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement, data: Nothing?) = visitKtAssignmentStatement(ktAssignmentStatement)
|
||||||
fun visitKtCall(ktCall: JKKtCall) = visitCall(ktCall, null)
|
fun visitKtCall(ktCall: JKKtCall) = visitCall(ktCall, null)
|
||||||
override fun visitKtCall(ktCall: JKKtCall, data: Nothing?) = visitKtCall(ktCall)
|
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