diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index 964fcce9cab..e248023ba35 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -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() } } 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 e4e31297917..992df4bf084 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt @@ -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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaCallExpression(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { - method.accept(visitor, data) + identifier.accept(visitor, data) arguments.accept(visitor, 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 3afbd9de808..df31b0b4369 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -111,4 +111,14 @@ class JKExpressionListImpl(override val expressions: Array) : JKEx override fun acceptChildren(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitQualifiedExpression(this, data) + override fun acceptChildren(visitor: JKVisitor, data: D) { + receiver.accept(visitor, data) + operator.accept(visitor, data) + selector.accept(visitor, data) + } } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt index 51f442e3d80..16529f24ba3 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt @@ -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 diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index edfce28cb4c..757c47d3bf4 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -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 } -interface JKCall : JKExpression - interface JKIdentifier : JKElement interface JKTypeIdentifier : JKIdentifier 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 47e54f1dd2f..a375c3bcae3 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt @@ -53,12 +53,6 @@ interface JKVisitorVoid : JKVisitor { 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 { 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 { 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) }