From ad0721aae7d77f0304a99ff4469365599fc37177 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Thu, 31 May 2018 19:47:32 +0300 Subject: [PATCH] New J2K: Extract fqName resolution --- .../AssignmentAsExpressionToAlsoConversion.kt | 21 +----------- .../j2k/conversions/TypeMappingConversion.kt | 10 ------ .../kotlin/j2k/conversions/resolveUtil.kt | 32 +++++++++++++++++++ 3 files changed, 33 insertions(+), 30 deletions(-) create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/resolveUtil.kt diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentAsExpressionToAlsoConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentAsExpressionToAlsoConversion.kt index 694aaca4401..c2d4df2212d 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentAsExpressionToAlsoConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentAsExpressionToAlsoConversion.kt @@ -5,18 +5,11 @@ package org.jetbrains.kotlin.j2k.conversions -import com.intellij.psi.PsiElement import org.jetbrains.kotlin.j2k.ConversionContext import org.jetbrains.kotlin.j2k.tree.JKJavaAssignmentExpression import org.jetbrains.kotlin.j2k.tree.JKTreeElement import org.jetbrains.kotlin.j2k.tree.impl.* import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.psi.KtDotQualifiedExpression -import org.jetbrains.kotlin.psi.KtPsiFactory -import org.jetbrains.kotlin.psi.analysisContext -import org.jetbrains.kotlin.psi.psiUtil.getChildOfType -import org.jetbrains.kotlin.resolve.ImportPath class AssignmentAsExpressionToAlsoConversion(val context: ConversionContext) : RecursiveApplicableConversionBase() { @@ -26,7 +19,7 @@ class AssignmentAsExpressionToAlsoConversion(val context: ConversionContext) : R // TODO: Check if inside variable initializer //if (element.parent) - val alsoElement = resolveFqName(ClassId.fromString("kotlin/also"), element) ?: return recurse(element) + val alsoElement = resolveFqName(ClassId.fromString("kotlin/also"), element, context) ?: return recurse(element) val alsoSymbol = context.symbolProvider.provideSymbol(alsoElement) as? JKMethodSymbol ?: return recurse(element) element.invalidate() @@ -38,16 +31,4 @@ class AssignmentAsExpressionToAlsoConversion(val context: ConversionContext) : R )) ) } - - private fun resolveFqName(classId: ClassId, contextElement: JKTreeElement): PsiElement? { - val element = context.backAnnotator(contextElement) ?: return null - val importDirective = KtPsiFactory(element).createImportDirective(ImportPath(classId.asSingleFqName(), false)) - importDirective.containingKtFile.analysisContext = element.containingFile - return importDirective.getChildOfType() - ?.selectorExpression - ?.let { - it.references.mapNotNull { it.resolve() }.first() - } - } - } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt index 1db2a345e4b..d754efa1668 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt @@ -35,16 +35,6 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl } else applyRecursive(element, this::applyToElement) } - private fun resolveFqName(classId: ClassId, element: PsiElement): PsiElement? { - val importDirective = KtPsiFactory(element).createImportDirective(ImportPath(classId.asSingleFqName(), false)) - importDirective.containingKtFile.analysisContext = element.containingFile - return importDirective.getChildOfType() - ?.selectorExpression - ?.let { - it.references.mapNotNull { it.resolve() }.firstOrNull() - } - } - private fun classTypeByFqName( contextElement: PsiElement?, fqName: ClassId, diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/resolveUtil.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/resolveUtil.kt new file mode 100644 index 00000000000..27234b50648 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/resolveUtil.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.j2k.conversions + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.j2k.ConversionContext +import org.jetbrains.kotlin.j2k.tree.JKTreeElement +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.psi.KtDotQualifiedExpression +import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.psi.analysisContext +import org.jetbrains.kotlin.psi.psiUtil.getChildOfType +import org.jetbrains.kotlin.resolve.ImportPath + + +internal fun resolveFqName(classId: ClassId, contextElement: JKTreeElement, context: ConversionContext): PsiElement? { + val element = context.backAnnotator(contextElement) ?: return null + return resolveFqName(classId, element) +} + +internal fun resolveFqName(classId: ClassId, element: PsiElement): PsiElement? { + val importDirective = KtPsiFactory(element).createImportDirective(ImportPath(classId.asSingleFqName(), false)) + importDirective.containingKtFile.analysisContext = element.containingFile + return importDirective.getChildOfType() + ?.selectorExpression + ?.let { + it.references.mapNotNull { it.resolve() }.firstOrNull() + } +} \ No newline at end of file