New J2K: Fix reference resolution in type mapper conversion
This commit is contained in:
committed by
Ilya Kirillov
parent
7cccb99982
commit
1e4737b4b2
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.j2k.conversions
|
package org.jetbrains.kotlin.j2k.conversions
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiReferenceExpression
|
|
||||||
import org.jetbrains.kotlin.j2k.ConversionContext
|
import org.jetbrains.kotlin.j2k.ConversionContext
|
||||||
import org.jetbrains.kotlin.j2k.ast.Nullability
|
import org.jetbrains.kotlin.j2k.ast.Nullability
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKClassType
|
import org.jetbrains.kotlin.j2k.tree.JKClassType
|
||||||
@@ -20,9 +19,11 @@ import org.jetbrains.kotlin.name.ClassId
|
|||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
|
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
|
import org.jetbrains.kotlin.psi.KtDotQualifiedExpression
|
||||||
import org.jetbrains.kotlin.psi.KtPsiFactory
|
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
|
import org.jetbrains.kotlin.resolve.ImportPath
|
||||||
import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver
|
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
|
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
|
||||||
|
|
||||||
class TypeMappingConversion(val context: ConversionContext) : MatchBasedConversion() {
|
class TypeMappingConversion(val context: ConversionContext) : MatchBasedConversion() {
|
||||||
@@ -47,20 +48,24 @@ class TypeMappingConversion(val context: ConversionContext) : MatchBasedConversi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun fqNameRef(classId: ClassId, element: PsiElement): PsiReferenceExpression? {
|
private fun resolveFqName(classId: ClassId, element: PsiElement): PsiElement? {
|
||||||
return KtPsiFactory(element)
|
val importDirective = KtPsiFactory(element).createImportDirective(ImportPath(classId.asSingleFqName(), false))
|
||||||
.createExpressionCodeFragment(classId.asString(), element)
|
importDirective.containingKtFile.analysisContext = element.containingFile
|
||||||
.findChildByClass(PsiReferenceExpression::class.java)
|
return importDirective.getChildOfType<KtDotQualifiedExpression>()
|
||||||
|
?.selectorExpression
|
||||||
|
?.let {
|
||||||
|
it.references.mapNotNull { it.resolve() }.first()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun classTypeByFqName(
|
private fun classTypeByFqName(
|
||||||
contextElement: PsiElement?,
|
contextElement: PsiElement?,
|
||||||
fqName: ClassId,
|
fqName: ClassId,
|
||||||
parameters: List<JKType>,
|
parameters: List<JKType>,
|
||||||
nullability: Nullability = Nullability.Default
|
nullability: Nullability = Nullability.Default
|
||||||
): JKType? {
|
): JKType? {
|
||||||
contextElement ?: return null
|
contextElement ?: return null
|
||||||
val newTarget = fqNameRef(fqName, contextElement)?.resolve() as? KtClassOrObject ?: return null
|
val newTarget = resolveFqName(fqName, contextElement) as? KtClassOrObject ?: return null
|
||||||
|
|
||||||
val newSymbol = JKMultiverseKtClassSymbol(newTarget)
|
val newSymbol = JKMultiverseKtClassSymbol(newTarget)
|
||||||
|
|
||||||
|
|||||||
@@ -22,14 +22,14 @@ import com.intellij.openapi.vfs.VirtualFile
|
|||||||
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess
|
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess
|
||||||
import com.intellij.pom.java.LanguageLevel
|
import com.intellij.pom.java.LanguageLevel
|
||||||
import com.intellij.testFramework.LightPlatformTestCase
|
import com.intellij.testFramework.LightPlatformTestCase
|
||||||
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
|
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||||
import org.jetbrains.kotlin.idea.test.invalidateLibraryCache
|
import org.jetbrains.kotlin.idea.test.invalidateLibraryCache
|
||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
import org.jetbrains.kotlin.idea.caches.PerModulePackageCacheService.Companion.DEBUG_LOG_ENABLE_PerModulePackageCache
|
import org.jetbrains.kotlin.idea.caches.PerModulePackageCacheService.Companion.DEBUG_LOG_ENABLE_PerModulePackageCache
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
abstract class AbstractJavaToKotlinConverterTest : LightCodeInsightFixtureTestCase() {
|
abstract class AbstractJavaToKotlinConverterTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||||
override fun setUp() {
|
override fun setUp() {
|
||||||
super.setUp()
|
super.setUp()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user