diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt index 4ffd914d867..6b7025ed582 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt @@ -363,10 +363,10 @@ class JavaToJKTreeBuilder constructor( functionalInterfaceType ?.takeUnless { type -> type.safeAs()?.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(this).let { symbol -> diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/types.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/types.kt index ed265d7043b..fde74d94d82 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/types.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/types.kt @@ -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()?.fqName ?: return false - return functionalTypeRegex.matches(fqName) + val fqName = safeAs()?.resolve()?.getKotlinFqName() ?: return false + return functionalTypeRegex.matches(fqName.asString()) } + private val functionalTypeRegex = """(kotlin\.jvm\.functions|kotlin)\.Function[\d+]""".toRegex()