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
|
functionalInterfaceType
|
||||||
?.takeUnless { type ->
|
?.takeUnless { type ->
|
||||||
type.safeAs<PsiClassType>()?.parameters?.any { it is PsiCapturedWildcardType } == true
|
type.safeAs<PsiClassType>()?.parameters?.any { it is PsiCapturedWildcardType } == true
|
||||||
|
}?.takeUnless { type ->
|
||||||
|
type.isKotlinFunctionalType
|
||||||
}?.toJK(symbolProvider)
|
}?.toJK(symbolProvider)
|
||||||
?.takeUnless { type ->
|
?.asTypeElement() ?: JKTypeElementImpl(JKNoTypeImpl)
|
||||||
type.isKotlinFunctionType
|
|
||||||
}?.asTypeElement() ?: JKTypeElementImpl(JKNoTypeImpl)
|
|
||||||
|
|
||||||
fun PsiMethodReferenceExpression.toJK(): JKMethodReferenceExpression {
|
fun PsiMethodReferenceExpression.toJK(): JKMethodReferenceExpression {
|
||||||
val symbol = symbolProvider.provideSymbolForReference<JKSymbol>(this).let { symbol ->
|
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.descriptors.TypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.util.getJavaClassDescriptor
|
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.j2k.ast.Nullability
|
||||||
import org.jetbrains.kotlin.js.descriptorUtils.getJetTypeFqName
|
import org.jetbrains.kotlin.js.descriptorUtils.getJetTypeFqName
|
||||||
import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi
|
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() {
|
get() {
|
||||||
val fqName = safeAs<JKClassType>()?.fqName ?: return false
|
val fqName = safeAs<PsiClassType>()?.resolve()?.getKotlinFqName() ?: return false
|
||||||
return functionalTypeRegex.matches(fqName)
|
return functionalTypeRegex.matches(fqName.asString())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private val functionalTypeRegex = """(kotlin\.jvm\.functions|kotlin)\.Function[\d+]""".toRegex()
|
private val functionalTypeRegex = """(kotlin\.jvm\.functions|kotlin)\.Function[\d+]""".toRegex()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user