[FIR] do not fail when Continuation classes not found in classpath
diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/psiTypeProvider/Fe10IdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/psiTypeProvider/Fe10IdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java index 545ec24..3042c99 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/psiTypeProvider/Fe10IdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/psiTypeProvider/Fe10IdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
@@ -87,4 +87,16 @@ public void testLocalClass_memberFunction() throws Exception { runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_memberFunction.kt"); } + + @Test + @TestMetadata("suspendFunctionValueParameterNoStdlib.kt") + public void testSuspendFunctionValueParameterNoStdlib() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterNoStdlib.kt"); + } + + @Test + @TestMetadata("suspendFunctionValueParameterWithStdlib.kt") + public void testSuspendFunctionValueParameterWithStdlib() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterWithStdlib.kt"); + } }
diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java index 844cb33..f8eae5c 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
@@ -87,4 +87,16 @@ public void testLocalClass_memberFunction() throws Exception { runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_memberFunction.kt"); } + + @Test + @TestMetadata("suspendFunctionValueParameterNoStdlib.kt") + public void testSuspendFunctionValueParameterNoStdlib() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterNoStdlib.kt"); + } + + @Test + @TestMetadata("suspendFunctionValueParameterWithStdlib.kt") + public void testSuspendFunctionValueParameterWithStdlib() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterWithStdlib.kt"); + } }
diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java index 57dd69d..fb3882b 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
@@ -87,4 +87,16 @@ public void testLocalClass_memberFunction() throws Exception { runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_memberFunction.kt"); } + + @Test + @TestMetadata("suspendFunctionValueParameterNoStdlib.kt") + public void testSuspendFunctionValueParameterNoStdlib() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterNoStdlib.kt"); + } + + @Test + @TestMetadata("suspendFunctionValueParameterWithStdlib.kt") + public void testSuspendFunctionValueParameterWithStdlib() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterWithStdlib.kt"); + } }
diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java index aa56faf..157502e 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
@@ -87,4 +87,16 @@ public void testLocalClass_memberFunction() throws Exception { runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_memberFunction.kt"); } + + @Test + @TestMetadata("suspendFunctionValueParameterNoStdlib.kt") + public void testSuspendFunctionValueParameterNoStdlib() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterNoStdlib.kt"); + } + + @Test + @TestMetadata("suspendFunctionValueParameterWithStdlib.kt") + public void testSuspendFunctionValueParameterWithStdlib() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterWithStdlib.kt"); + } }
diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterNoStdlib.kt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterNoStdlib.kt new file mode 100644 index 0000000..729cc47 --- /dev/null +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterNoStdlib.kt
@@ -0,0 +1,2 @@ +// NO_RUNTIME +fun foo(<caret>p :suspend (Int) -> Unit) {} \ No newline at end of file
diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterNoStdlib.txt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterNoStdlib.txt new file mode 100644 index 0000000..3bb58da --- /dev/null +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterNoStdlib.txt
@@ -0,0 +1,2 @@ +KtType: suspend (kotlin.Int) -> kotlin.Unit +PsiType: PsiType:Function2<? super Integer, ? super NonExistentClass, ? extends Object>
diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterWithStdlib.kt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterWithStdlib.kt new file mode 100644 index 0000000..c8c24fb --- /dev/null +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterWithStdlib.kt
@@ -0,0 +1,2 @@ +// WITH_STDLIB +fun foo(<caret>p :suspend (Int) -> Unit) {} \ No newline at end of file
diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterWithStdlib.txt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterWithStdlib.txt new file mode 100644 index 0000000..20efb1b --- /dev/null +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/suspendFunctionValueParameterWithStdlib.txt
@@ -0,0 +1,2 @@ +KtType: suspend (kotlin.Int) -> kotlin.Unit +PsiType: PsiType:Function2<? super Integer, ? super Continuation<? super Unit>, ? extends Object>
diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt index 891c38c..617bcd2 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isInner import org.jetbrains.kotlin.fir.declarations.utils.isLocal import org.jetbrains.kotlin.fir.resolve.defaultType +import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedSymbolError import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.toSymbol @@ -30,6 +31,7 @@ import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.load.kotlin.TypeMappingMode +import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.types.AbstractTypeMapper @@ -218,7 +220,7 @@ is ConeTypeParameterLookupTag -> ConeTypeParameterTypeImpl(this, isNullable = false) is ConeClassLikeLookupTag -> { val symbol = toSymbol(session) as? FirRegularClassSymbol - ?: error("Class for $this not found") + ?: return ConeErrorType(ConeUnresolvedSymbolError(classId)) symbol.fir.defaultType() } else -> error("Unsupported type constructor: $this") @@ -261,12 +263,16 @@ } override fun continuationTypeConstructor(): ConeClassLikeLookupTag { - return symbolProvider.getClassLikeSymbolByClassId(StandardClassIds.Continuation)?.toLookupTag() - ?: error("Continuation class not found") + return possiblyErrorTypeConstructorByClassId(StandardClassIds.Continuation) } override fun functionNTypeConstructor(n: Int): TypeConstructorMarker { return symbolProvider.getClassLikeSymbolByClassId(StandardClassIds.FunctionN(n))?.toLookupTag() ?: error("Function$n class not found") } + + private fun possiblyErrorTypeConstructorByClassId(classId: ClassId): ConeClassLikeLookupTag { + return symbolProvider.getClassLikeSymbolByClassId(classId)?.toLookupTag() + ?: ConeClassLikeErrorLookupTag(classId) + } }