diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java index c63eb878c77..91a7983ea75 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java @@ -64,6 +64,12 @@ public class FirIdeDependentAnalysisSourceModuleAnalysisApiExpressionPsiTypeProv runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.kt"); } + @Test + @TestMetadata("errorType.kt") + public void testErrorType() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/errorType.kt"); + } + @Test @TestMetadata("KTIJ25461.kt") public void testKTIJ25461() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java index 140e4f253d4..c29f7eb4193 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java @@ -64,6 +64,12 @@ public class FirIdeNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProvide runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.kt"); } + @Test + @TestMetadata("errorType.kt") + public void testErrorType() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/errorType.kt"); + } + @Test @TestMetadata("KTIJ25461.kt") public void testKTIJ25461() throws Exception { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java index 1f5db645611..6d988d67ffb 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java @@ -64,6 +64,12 @@ public class FirStandaloneNormalAnalysisSourceModuleAnalysisApiExpressionPsiType runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.kt"); } + @Test + @TestMetadata("errorType.kt") + public void testErrorType() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/errorType.kt"); + } + @Test @TestMetadata("KTIJ25461.kt") public void testKTIJ25461() throws Exception { diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/errorType.kt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/errorType.kt new file mode 100644 index 00000000000..3ff0bccbc53 --- /dev/null +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/errorType.kt @@ -0,0 +1,3 @@ +fun foo(x: UNRESOLVED) { + x +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/errorType.txt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/errorType.txt new file mode 100644 index 00000000000..85ee27b49f3 --- /dev/null +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/errorType.txt @@ -0,0 +1,97 @@ +KtType: UNRESOLVED +asPsiType(allowErrorTypes=false, mode=DEFAULT, isAnnotationMethod=false): + null + +asPsiType(allowErrorTypes=false, mode=DEFAULT, isAnnotationMethod=true): + null + +asPsiType(allowErrorTypes=false, mode=DEFAULT_UAST, isAnnotationMethod=false): + null + +asPsiType(allowErrorTypes=false, mode=DEFAULT_UAST, isAnnotationMethod=true): + null + +asPsiType(allowErrorTypes=false, mode=GENERIC_ARGUMENT, isAnnotationMethod=false): + null + +asPsiType(allowErrorTypes=false, mode=GENERIC_ARGUMENT, isAnnotationMethod=true): + null + +asPsiType(allowErrorTypes=false, mode=SUPER_TYPE, isAnnotationMethod=false): + null + +asPsiType(allowErrorTypes=false, mode=SUPER_TYPE, isAnnotationMethod=true): + null + +asPsiType(allowErrorTypes=false, mode=SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS, isAnnotationMethod=false): + null + +asPsiType(allowErrorTypes=false, mode=SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS, isAnnotationMethod=true): + null + +asPsiType(allowErrorTypes=false, mode=RETURN_TYPE_BOXED, isAnnotationMethod=false): + null + +asPsiType(allowErrorTypes=false, mode=RETURN_TYPE_BOXED, isAnnotationMethod=true): + null + +asPsiType(allowErrorTypes=false, mode=RETURN_TYPE, isAnnotationMethod=false): + null + +asPsiType(allowErrorTypes=false, mode=RETURN_TYPE, isAnnotationMethod=true): + null + +asPsiType(allowErrorTypes=false, mode=VALUE_PARAMETER, isAnnotationMethod=false): + null + +asPsiType(allowErrorTypes=false, mode=VALUE_PARAMETER, isAnnotationMethod=true): + null + +asPsiType(allowErrorTypes=true, mode=DEFAULT, isAnnotationMethod=false): + PsiType:UNRESOLVED + +asPsiType(allowErrorTypes=true, mode=DEFAULT, isAnnotationMethod=true): + PsiType:UNRESOLVED + +asPsiType(allowErrorTypes=true, mode=DEFAULT_UAST, isAnnotationMethod=false): + PsiType:UNRESOLVED + +asPsiType(allowErrorTypes=true, mode=DEFAULT_UAST, isAnnotationMethod=true): + PsiType:UNRESOLVED + +asPsiType(allowErrorTypes=true, mode=GENERIC_ARGUMENT, isAnnotationMethod=false): + PsiType:UNRESOLVED + +asPsiType(allowErrorTypes=true, mode=GENERIC_ARGUMENT, isAnnotationMethod=true): + PsiType:UNRESOLVED + +asPsiType(allowErrorTypes=true, mode=SUPER_TYPE, isAnnotationMethod=false): + PsiType:UNRESOLVED + +asPsiType(allowErrorTypes=true, mode=SUPER_TYPE, isAnnotationMethod=true): + PsiType:UNRESOLVED + +asPsiType(allowErrorTypes=true, mode=SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS, isAnnotationMethod=false): + PsiType:UNRESOLVED + +asPsiType(allowErrorTypes=true, mode=SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS, isAnnotationMethod=true): + PsiType:UNRESOLVED + +asPsiType(allowErrorTypes=true, mode=RETURN_TYPE_BOXED, isAnnotationMethod=false): + PsiType:UNRESOLVED + +asPsiType(allowErrorTypes=true, mode=RETURN_TYPE_BOXED, isAnnotationMethod=true): + PsiType:UNRESOLVED + +asPsiType(allowErrorTypes=true, mode=RETURN_TYPE, isAnnotationMethod=false): + PsiType:UNRESOLVED + +asPsiType(allowErrorTypes=true, mode=RETURN_TYPE, isAnnotationMethod=true): + PsiType:UNRESOLVED + +asPsiType(allowErrorTypes=true, mode=VALUE_PARAMETER, isAnnotationMethod=false): + PsiType:UNRESOLVED + +asPsiType(allowErrorTypes=true, mode=VALUE_PARAMETER, isAnnotationMethod=true): + PsiType:UNRESOLVED + diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt index 4c0ac759842..284587961b1 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt @@ -1426,6 +1426,11 @@ class KotlinTypeMapper @JvmOverloads constructor( SimpleClassicTypeSystemContext.hasNothingInNonContravariantPosition(kotlinType) fun TypeSystemContext.hasNothingInNonContravariantPosition(type: KotlinTypeMarker): Boolean { + if (type.isError()) { + // We cannot access type arguments for an unresolved type + return false + } + val typeConstructor = type.typeConstructor() for (i in 0 until type.argumentsCount()) {