New J2K: check if method reference has functional type on PsiType instead of JKType
As it may reference to uninitialized universe symbol #KT-33434 fixed
This commit is contained in:
@@ -363,10 +363,10 @@ class JavaToJKTreeBuilder constructor(
|
||||
functionalInterfaceType
|
||||
?.takeUnless { type ->
|
||||
type.safeAs<PsiClassType>()?.parameters?.any { it is PsiCapturedWildcardType } == true
|
||||
}?.takeUnless { type ->
|
||||
type.isKotlinFunctionalType
|
||||
}?.toJK(symbolProvider)
|
||||
?.takeUnless { type ->
|
||||
type.isKotlinFunctionType
|
||||
}?.asTypeElement() ?: JKTypeElementImpl(JKNoTypeImpl)
|
||||
?.asTypeElement() ?: JKTypeElementImpl(JKNoTypeImpl)
|
||||
|
||||
fun PsiMethodReferenceExpression.toJK(): JKMethodReferenceExpression {
|
||||
val symbol = symbolProvider.provideSymbolForReference<JKSymbol>(this).let { symbol ->
|
||||
|
||||
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.util.getJavaClassDescriptor
|
||||
import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName
|
||||
import org.jetbrains.kotlin.j2k.ast.Nullability
|
||||
import org.jetbrains.kotlin.js.descriptorUtils.getJetTypeFqName
|
||||
import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi
|
||||
@@ -157,12 +158,13 @@ fun KotlinType.toJK(symbolProvider: JKSymbolProvider): JKType {
|
||||
}
|
||||
}
|
||||
|
||||
val JKType.isKotlinFunctionType: Boolean
|
||||
val PsiType.isKotlinFunctionalType: Boolean
|
||||
get() {
|
||||
val fqName = safeAs<JKClassType>()?.fqName ?: return false
|
||||
return functionalTypeRegex.matches(fqName)
|
||||
val fqName = safeAs<PsiClassType>()?.resolve()?.getKotlinFqName() ?: return false
|
||||
return functionalTypeRegex.matches(fqName.asString())
|
||||
}
|
||||
|
||||
|
||||
private val functionalTypeRegex = """(kotlin\.jvm\.functions|kotlin)\.Function[\d+]""".toRegex()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user