diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JKSymbolProvider.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JKSymbolProvider.kt index 5025fa38a94..68c0e785d39 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JKSymbolProvider.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JKSymbolProvider.kt @@ -19,7 +19,7 @@ class JKSymbolProvider { files.forEach { it.accept(elementVisitor) } } - fun provideSymbol(psi: PsiElement): JKSymbol { + fun provideDirectSymbol(psi: PsiElement): JKSymbol { return symbols.getOrPut(psi) { when (psi) { is PsiClass -> JKMultiverseClassSymbol(psi) @@ -31,6 +31,12 @@ class JKSymbolProvider { } } + fun provideSymbol(reference: PsiReference): JKSymbol { + val target = reference.resolve() + if (target != null) return provideDirectSymbol(target) + TODO() + } + fun provideLocalVarSymbol(psi: PsiLocalVariable, variable: JKLocalVariable): JKSymbol { return symbols.getOrPut(psi) { JKUniverseFieldSymbol(variable) } } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index dbcc057b6f8..a6240471376 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -112,7 +112,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { val method = methodExpression as PsiReferenceExpressionImpl val call = JKJavaMethodCallExpressionImpl( - symbolProvider.provideSymbol(method.reference?.resolve() ?: TODO()) as JKMethodSymbol, argumentList.toJK() + symbolProvider.provideSymbol(method) as JKMethodSymbol, argumentList.toJK() ) return if (method.findChildByRole(ChildRole.DOT) != null) { JKQualifiedExpressionImpl((method.qualifier as PsiExpression).toJK(), JKJavaQualifierImpl.DOT, call) @@ -127,7 +127,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { return JKNullLiteral() // TODO !!! } - val access = JKJavaFieldAccessExpressionImpl(symbolProvider.provideSymbol(impl.resolve() ?: TODO()) as JKFieldSymbol) + val access = JKJavaFieldAccessExpressionImpl(symbolProvider.provideSymbol(impl) as JKFieldSymbol) return when { impl.findChildByRole(ChildRole.DOT) != null && (impl.qualifierExpression as? PsiReferenceExpression)?.resolve() !is PsiClass -> @@ -164,13 +164,13 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { val constructor = constructorFakeReference.resolve() if (constructor == null && constructedClass != null) { return JKJavaDefaultNewExpressionImpl( - symbolProvider.provideSymbol(constructedClass) as JKClassSymbol + symbolProvider.provideDirectSymbol(constructedClass) as JKClassSymbol ) } return JKJavaNewExpressionImpl( - symbolProvider.provideSymbol(constructor!!) as JKMethodSymbol, + symbolProvider.provideDirectSymbol(constructor!!) as JKMethodSymbol, argumentList.toJK() ) } @@ -204,7 +204,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { val parameters = parameters.map { it.toJK() } if (target != null) { JKClassTypeImpl( - target.let { symbolProvider.provideSymbol(it) as JKClassSymbol }, + target.let { symbolProvider.provideDirectSymbol(it) as JKClassSymbol }, parameters ) } else { @@ -233,7 +233,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { it.declarationList = psi.children.mapNotNull { ElementVisitor(this@DeclarationMapper).apply { it.accept(this) }.resultElement as? JKDeclaration } - (symbolProvider.provideSymbol(psi) as? JKUniverseClassSymbol)?.run { target = it } + (symbolProvider.provideDirectSymbol(psi) as? JKUniverseClassSymbol)?.run { target = it } } } @@ -244,7 +244,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { JKNameIdentifierImpl(name), with(expressionTreeMapper) { initializer.toJK() } ).also { - (symbolProvider.provideSymbol(this) as? JKUniverseFieldSymbol)?.run { target = it } + (symbolProvider.provideDirectSymbol(this) as? JKUniverseFieldSymbol)?.run { target = it } } } @@ -260,7 +260,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { parameterList.parameters.map { it -> it.toJK() }, body?.toJK() ?: JKBodyStub ).also { - (symbolProvider.provideSymbol(this) as? JKUniverseMethodSymbol)?.run { target = it } + (symbolProvider.provideDirectSymbol(this) as? JKUniverseMethodSymbol)?.run { target = it } } } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentAsExpressionToAlsoConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentAsExpressionToAlsoConversion.kt index c2d4df2212d..da28b6ba1bb 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentAsExpressionToAlsoConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentAsExpressionToAlsoConversion.kt @@ -20,7 +20,7 @@ class AssignmentAsExpressionToAlsoConversion(val context: ConversionContext) : R //if (element.parent) val alsoElement = resolveFqName(ClassId.fromString("kotlin/also"), element, context) ?: return recurse(element) - val alsoSymbol = context.symbolProvider.provideSymbol(alsoElement) as? JKMethodSymbol ?: return recurse(element) + val alsoSymbol = context.symbolProvider.provideDirectSymbol(alsoElement) as? JKMethodSymbol ?: return recurse(element) element.invalidate() return JKQualifiedExpressionImpl( diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/MatchBasedConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/MatchBasedConversion.kt index 84caa4e0194..ffc6eed2e90 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/MatchBasedConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/MatchBasedConversion.kt @@ -17,7 +17,7 @@ abstract class MatchBasedConversion : BaseConversion() { val child = iter.next() if (child is List<*>) { - applyRecursiveToList(element, child as List, iter, func) + iter.set(applyRecursiveToList(element, child as List, iter, func)) } else if (child is JKTreeElement) { val newChild = func(child) if (child !== newChild) { @@ -39,7 +39,7 @@ abstract class MatchBasedConversion : BaseConversion() { child: List, iter: MutableListIterator, func: (JKTreeElement) -> JKTreeElement - ) { + ): List { val newChild = child.map { func(it) @@ -53,6 +53,7 @@ abstract class MatchBasedConversion : BaseConversion() { onElementChanged(new, old) } } + return newChild } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ModifiersConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ModifiersConversion.kt index bc4d80f0905..84b284e5eb2 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ModifiersConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ModifiersConversion.kt @@ -12,11 +12,10 @@ class ModifiersConversion : RecursiveApplicableConversionBase() { override fun applyToElement(element: JKTreeElement): JKTreeElement { return if (element is JKModifierList) element.also { - var modifiers = it.modifiers - if (element.parent !is JKLocalVariable && !modifiers.filter { it is JKJavaAccessModifier }.any()) { - modifiers += JKKtModifierImpl(JKKtModifier.KtModifierType.INTERNAL) + if (element.parent !is JKLocalVariable && !it.modifiers.filter { it is JKJavaAccessModifier }.any()) { + it.modifiers += JKKtModifierImpl(JKKtModifier.KtModifierType.INTERNAL) } - it.modifiers = mapModifiers(modifiers) + it.modifiers = mapModifiers(it.modifiers) } else recurse(element) } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt index e246d6bf37d..8ea39584feb 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt @@ -43,7 +43,7 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl contextElement ?: return null val newTarget = resolveFqName(fqName, contextElement) as? KtClassOrObject ?: return null - return JKClassTypeImpl(context.symbolProvider.provideSymbol(newTarget) as JKClassSymbol, parameters, nullability) + return JKClassTypeImpl(context.symbolProvider.provideDirectSymbol(newTarget) as JKClassSymbol, parameters, nullability) } private fun mapClassType(type: JKClassType, typeElement: JKTypeElement): JKTypeElement {