New J2K: Reference resolve for parameters.
This commit is contained in:
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.j2k
|
|||||||
|
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKLocalVariable
|
import org.jetbrains.kotlin.j2k.tree.JKLocalVariable
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.JKParameter
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.*
|
import org.jetbrains.kotlin.j2k.tree.impl.*
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
|
|
||||||
@@ -26,7 +27,7 @@ class JKSymbolProvider {
|
|||||||
is KtClassOrObject -> JKMultiverseKtClassSymbol(psi)
|
is KtClassOrObject -> JKMultiverseKtClassSymbol(psi)
|
||||||
is PsiMethod -> JKMultiverseMethodSymbol(psi)
|
is PsiMethod -> JKMultiverseMethodSymbol(psi)
|
||||||
is PsiField -> JKMultiverseFieldSymbol(psi)
|
is PsiField -> JKMultiverseFieldSymbol(psi)
|
||||||
else -> TODO()
|
else -> TODO(psi::class.toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -41,6 +42,10 @@ class JKSymbolProvider {
|
|||||||
return symbols.getOrPut(psi) { JKUniverseFieldSymbol(variable) }
|
return symbols.getOrPut(psi) { JKUniverseFieldSymbol(variable) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun provideParameterSymbol(psi: PsiParameter, variable: JKParameter): JKSymbol {
|
||||||
|
return symbols.getOrPut(psi) { JKUniverseFieldSymbol(variable) }
|
||||||
|
}
|
||||||
|
|
||||||
private inner class ElementVisitor : JavaElementVisitor() {
|
private inner class ElementVisitor : JavaElementVisitor() {
|
||||||
override fun visitClass(aClass: PsiClass) {
|
override fun visitClass(aClass: PsiClass) {
|
||||||
symbols[aClass] = JKUniverseClassSymbol()
|
symbols[aClass] = JKUniverseClassSymbol()
|
||||||
|
|||||||
@@ -252,7 +252,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
|||||||
?: TODO()
|
?: TODO()
|
||||||
},
|
},
|
||||||
JKNameIdentifierImpl(name),
|
JKNameIdentifierImpl(name),
|
||||||
parameterList.parameters.map { it -> it.toJK() },
|
parameterList.parameters.map { it.toJK() },
|
||||||
body?.toJK() ?: JKBodyStub
|
body?.toJK() ?: JKBodyStub
|
||||||
).also {
|
).also {
|
||||||
(symbolProvider.provideDirectSymbol(this) as? JKUniverseMethodSymbol)?.run { target = it }
|
(symbolProvider.provideDirectSymbol(this) as? JKUniverseMethodSymbol)?.run { target = it }
|
||||||
@@ -265,8 +265,12 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
|||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiParameter.toJK(): JKValueArgumentImpl {
|
fun PsiParameter.toJK(): JKParameter {
|
||||||
return JKValueArgumentImpl(with(expressionTreeMapper) { typeElement?.toJK() } ?: TODO(), name!!)
|
return JKParameterImpl(with(expressionTreeMapper) { typeElement?.toJK() } ?: TODO(),
|
||||||
|
JKNameIdentifierImpl(name!!),
|
||||||
|
with(modifierMapper) { modifierList.toJK() }).also {
|
||||||
|
symbolProvider.provideParameterSymbol(this, it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiCodeBlock.toJK(): JKBlock {
|
fun PsiCodeBlock.toJK(): JKBlock {
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ class FieldToPropertyConversion : RecursiveApplicableConversionBase() {
|
|||||||
|
|
||||||
private fun JKMethod.getterFor(): JKJavaField? {
|
private fun JKMethod.getterFor(): JKJavaField? {
|
||||||
if (JvmAbi.isGetterName(name.value)) return null
|
if (JvmAbi.isGetterName(name.value)) return null
|
||||||
if (this.valueArguments.isNotEmpty()) return null
|
if (this.parameters.isNotEmpty()) return null
|
||||||
if (this !is JKJavaMethod) return null
|
if (this !is JKJavaMethod) return null
|
||||||
val returnStatement = block.statements.singleOrNull() as? JKReturnStatement ?: return null
|
val returnStatement = block.statements.singleOrNull() as? JKReturnStatement ?: return null
|
||||||
val fieldAccess = returnStatement.expression as? JKFieldAccessExpression ?: return null
|
val fieldAccess = returnStatement.expression as? JKFieldAccessExpression ?: return null
|
||||||
|
|||||||
+1
-3
@@ -19,9 +19,7 @@ package org.jetbrains.kotlin.j2k.conversions
|
|||||||
import org.jetbrains.kotlin.j2k.tree.JKClass
|
import org.jetbrains.kotlin.j2k.tree.JKClass
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKJavaMethod
|
import org.jetbrains.kotlin.j2k.tree.JKJavaMethod
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKTreeElement
|
import org.jetbrains.kotlin.j2k.tree.JKTreeElement
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.JKJavaPrimitiveTypeImpl
|
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.JKKtFunctionImpl
|
import org.jetbrains.kotlin.j2k.tree.impl.JKKtFunctionImpl
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.JKTypeElementImpl
|
|
||||||
|
|
||||||
class JavaMethodToKotlinFunctionConversion : TransformerBasedConversion() {
|
class JavaMethodToKotlinFunctionConversion : TransformerBasedConversion() {
|
||||||
override fun visitTreeElement(element: JKTreeElement) {
|
override fun visitTreeElement(element: JKTreeElement) {
|
||||||
@@ -36,7 +34,7 @@ class JavaMethodToKotlinFunctionConversion : TransformerBasedConversion() {
|
|||||||
JKKtFunctionImpl(
|
JKKtFunctionImpl(
|
||||||
it.returnType,
|
it.returnType,
|
||||||
it.name,
|
it.name,
|
||||||
it.valueArguments,
|
it.parameters,
|
||||||
it.block,
|
it.block,
|
||||||
it.modifierList
|
it.modifierList
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -43,9 +43,9 @@ private class DebugTreePrinter : JKVisitorVoid {
|
|||||||
override fun visitJavaMethod(javaMethod: JKJavaMethod) {
|
override fun visitJavaMethod(javaMethod: JKJavaMethod) {
|
||||||
printer.println(javaMethod.classNameWithoutJK(), " [")
|
printer.println(javaMethod.classNameWithoutJK(), " [")
|
||||||
printer.indented {
|
printer.indented {
|
||||||
javaMethod.block?.accept(this, null)
|
javaMethod.block.accept(this, null)
|
||||||
javaMethod.modifierList.accept(this, null)
|
javaMethod.modifierList.accept(this, null)
|
||||||
javaMethod.valueArguments.forEach { it.accept(this, null) }
|
javaMethod.parameters.forEach { it.accept(this, null) }
|
||||||
}
|
}
|
||||||
printer.println("]")
|
printer.println("]")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,14 +35,14 @@ class JKJavaFieldImpl(modifierList: JKModifierList, type: JKTypeElement, name: J
|
|||||||
}
|
}
|
||||||
|
|
||||||
class JKJavaMethodImpl(
|
class JKJavaMethodImpl(
|
||||||
modifierList: JKModifierList, returnType: JKTypeElement, name: JKNameIdentifier, valueArguments: List<JKValueArgument>, block: JKBlock
|
modifierList: JKModifierList, returnType: JKTypeElement, name: JKNameIdentifier, parameters: List<JKParameter>, block: JKBlock
|
||||||
) : JKJavaMethod, JKBranchElementBase() {
|
) : JKJavaMethod, JKBranchElementBase() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethod(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethod(this, data)
|
||||||
|
|
||||||
override var modifierList: JKModifierList by child(modifierList)
|
override var modifierList: JKModifierList by child(modifierList)
|
||||||
override var returnType: JKTypeElement by child(returnType)
|
override var returnType: JKTypeElement by child(returnType)
|
||||||
override var name: JKNameIdentifier by child(name)
|
override var name: JKNameIdentifier by child(name)
|
||||||
override var valueArguments: List<JKValueArgument> by children(valueArguments)
|
override var parameters: List<JKParameter> by children(parameters)
|
||||||
override var block: JKBlock by child(block)
|
override var block: JKBlock by child(block)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,9 +46,18 @@ class JKModifierListImpl(
|
|||||||
override var modifiers: List<JKModifier> by children(modifiers)
|
override var modifiers: List<JKModifier> by children(modifiers)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKValueArgumentImpl(type: JKTypeElement, override val name: String) : JKValueArgument, JKBranchElementBase() {
|
class JKParameterImpl(
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitValueArgument(this, data)
|
type: JKTypeElement,
|
||||||
|
name: JKNameIdentifier,
|
||||||
|
modifierList: JKModifierList,
|
||||||
|
initializer: JKExpression = JKStubExpressionImpl()
|
||||||
|
|
||||||
|
) : JKParameter, JKBranchElementBase() {
|
||||||
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitParameter(this, data)
|
||||||
|
|
||||||
|
override var modifierList by child(modifierList)
|
||||||
|
override val initializer by child(initializer)
|
||||||
|
override val name by child(name)
|
||||||
override var type by child(type)
|
override var type by child(type)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ class JKKtPropertyImpl(
|
|||||||
class JKKtFunctionImpl(
|
class JKKtFunctionImpl(
|
||||||
returnType: JKTypeElement,
|
returnType: JKTypeElement,
|
||||||
name: JKNameIdentifier,
|
name: JKNameIdentifier,
|
||||||
valueArguments: List<JKValueArgument>,
|
parameters: List<JKParameter>,
|
||||||
block: JKBlock,
|
block: JKBlock,
|
||||||
modifierList: JKModifierList
|
modifierList: JKModifierList
|
||||||
) : JKBranchElementBase(), JKKtFunction {
|
) : JKBranchElementBase(), JKKtFunction {
|
||||||
@@ -51,7 +51,7 @@ class JKKtFunctionImpl(
|
|||||||
|
|
||||||
override var returnType: JKTypeElement by child(returnType)
|
override var returnType: JKTypeElement by child(returnType)
|
||||||
override var name: JKNameIdentifier by child(name)
|
override var name: JKNameIdentifier by child(name)
|
||||||
override var valueArguments: List<JKValueArgument> by children(valueArguments)
|
override var parameters: List<JKParameter> by children(parameters)
|
||||||
override var block: JKBlock by child(block)
|
override var block: JKBlock by child(block)
|
||||||
override var modifierList: JKModifierList by child(modifierList)
|
override var modifierList: JKModifierList by child(modifierList)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ interface JKClass : JKDeclaration, JKModifierListOwner {
|
|||||||
|
|
||||||
interface JKMethod : JKDeclaration, JKModifierListOwner {
|
interface JKMethod : JKDeclaration, JKModifierListOwner {
|
||||||
val name: JKNameIdentifier
|
val name: JKNameIdentifier
|
||||||
var valueArguments: List<JKValueArgument>
|
var parameters: List<JKParameter>
|
||||||
val returnType: JKTypeElement
|
val returnType: JKTypeElement
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,9 +154,8 @@ interface JKLiteralExpression : JKExpression {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKValueArgument : JKTreeElement {
|
interface JKParameter : JKField {
|
||||||
var type: JKTypeElement
|
|
||||||
val name: String
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKStringLiteralExpression : JKLiteralExpression {
|
interface JKStringLiteralExpression : JKLiteralExpression {
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ interface JKVisitor<out R, in D> {
|
|||||||
fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression, data: D): R = visitExpression(typeCastExpression, data)
|
fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression, data: D): R = visitExpression(typeCastExpression, data)
|
||||||
fun visitExpressionList(expressionList: JKExpressionList, data: D): R = visitTreeElement(expressionList, data)
|
fun visitExpressionList(expressionList: JKExpressionList, data: D): R = visitTreeElement(expressionList, data)
|
||||||
fun visitLiteralExpression(literalExpression: JKLiteralExpression, data: D): R = visitExpression(literalExpression, data)
|
fun visitLiteralExpression(literalExpression: JKLiteralExpression, data: D): R = visitExpression(literalExpression, data)
|
||||||
fun visitValueArgument(valueArgument: JKValueArgument, data: D): R = visitTreeElement(valueArgument, data)
|
fun visitParameter(parameter: JKParameter, data: D): R = visitField(parameter, data)
|
||||||
fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression, data: D): R = visitLiteralExpression(stringLiteralExpression, data)
|
fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression, data: D): R = visitLiteralExpression(stringLiteralExpression, data)
|
||||||
fun visitStubExpression(stubExpression: JKStubExpression, data: D): R = visitExpression(stubExpression, data)
|
fun visitStubExpression(stubExpression: JKStubExpression, data: D): R = visitExpression(stubExpression, data)
|
||||||
fun visitLoopStatement(loopStatement: JKLoopStatement, data: D): R = visitStatement(loopStatement, data)
|
fun visitLoopStatement(loopStatement: JKLoopStatement, data: D): R = visitStatement(loopStatement, data)
|
||||||
|
|||||||
@@ -65,8 +65,8 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
|||||||
override fun visitExpressionList(expressionList: JKExpressionList, data: Nothing?) = visitExpressionList(expressionList)
|
override fun visitExpressionList(expressionList: JKExpressionList, data: Nothing?) = visitExpressionList(expressionList)
|
||||||
fun visitLiteralExpression(literalExpression: JKLiteralExpression) = visitExpression(literalExpression, null)
|
fun visitLiteralExpression(literalExpression: JKLiteralExpression) = visitExpression(literalExpression, null)
|
||||||
override fun visitLiteralExpression(literalExpression: JKLiteralExpression, data: Nothing?) = visitLiteralExpression(literalExpression)
|
override fun visitLiteralExpression(literalExpression: JKLiteralExpression, data: Nothing?) = visitLiteralExpression(literalExpression)
|
||||||
fun visitValueArgument(valueArgument: JKValueArgument) = visitTreeElement(valueArgument, null)
|
fun visitParameter(parameter: JKParameter) = visitField(parameter, null)
|
||||||
override fun visitValueArgument(valueArgument: JKValueArgument, data: Nothing?) = visitValueArgument(valueArgument)
|
override fun visitParameter(parameter: JKParameter, data: Nothing?) = visitParameter(parameter)
|
||||||
fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression) = visitLiteralExpression(stringLiteralExpression, null)
|
fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression) = visitLiteralExpression(stringLiteralExpression, null)
|
||||||
override fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression, data: Nothing?) = visitStringLiteralExpression(stringLiteralExpression)
|
override fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression, data: Nothing?) = visitStringLiteralExpression(stringLiteralExpression)
|
||||||
fun visitStubExpression(stubExpression: JKStubExpression) = visitExpression(stubExpression, null)
|
fun visitStubExpression(stubExpression: JKStubExpression) = visitExpression(stubExpression, null)
|
||||||
|
|||||||
Reference in New Issue
Block a user