[Analysis API] Fix Unexpected FirClassLikeSymbol null for class org.jetbrains.kotlin.fir.types.ConeClassLikeErrorLookupTag exception

on calling `asPsiType` on an unresolved type with type arguments

 ^KT-65550 fixed
This commit is contained in:
Ilya Kirillov
2024-02-05 14:52:17 +01:00
committed by Space Team
parent 50d526fe91
commit d925d3be76
6 changed files with 123 additions and 0 deletions
@@ -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 {
@@ -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 {
@@ -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 {
@@ -0,0 +1,3 @@
fun foo(x: UNRESOLVED<Nothing>) {
<expr>x</expr>
}
@@ -0,0 +1,97 @@
KtType: UNRESOLVED<kotlin.Nothing>
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<Void>
asPsiType(allowErrorTypes=true, mode=DEFAULT, isAnnotationMethod=true):
PsiType:UNRESOLVED<Void>
asPsiType(allowErrorTypes=true, mode=DEFAULT_UAST, isAnnotationMethod=false):
PsiType:UNRESOLVED<Void>
asPsiType(allowErrorTypes=true, mode=DEFAULT_UAST, isAnnotationMethod=true):
PsiType:UNRESOLVED<Void>
asPsiType(allowErrorTypes=true, mode=GENERIC_ARGUMENT, isAnnotationMethod=false):
PsiType:UNRESOLVED<Void>
asPsiType(allowErrorTypes=true, mode=GENERIC_ARGUMENT, isAnnotationMethod=true):
PsiType:UNRESOLVED<Void>
asPsiType(allowErrorTypes=true, mode=SUPER_TYPE, isAnnotationMethod=false):
PsiType:UNRESOLVED<Void>
asPsiType(allowErrorTypes=true, mode=SUPER_TYPE, isAnnotationMethod=true):
PsiType:UNRESOLVED<Void>
asPsiType(allowErrorTypes=true, mode=SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS, isAnnotationMethod=false):
PsiType:UNRESOLVED<Void>
asPsiType(allowErrorTypes=true, mode=SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS, isAnnotationMethod=true):
PsiType:UNRESOLVED<Void>
asPsiType(allowErrorTypes=true, mode=RETURN_TYPE_BOXED, isAnnotationMethod=false):
PsiType:UNRESOLVED<Void>
asPsiType(allowErrorTypes=true, mode=RETURN_TYPE_BOXED, isAnnotationMethod=true):
PsiType:UNRESOLVED<Void>
asPsiType(allowErrorTypes=true, mode=RETURN_TYPE, isAnnotationMethod=false):
PsiType:UNRESOLVED<Void>
asPsiType(allowErrorTypes=true, mode=RETURN_TYPE, isAnnotationMethod=true):
PsiType:UNRESOLVED<Void>
asPsiType(allowErrorTypes=true, mode=VALUE_PARAMETER, isAnnotationMethod=false):
PsiType:UNRESOLVED<Void>
asPsiType(allowErrorTypes=true, mode=VALUE_PARAMETER, isAnnotationMethod=true):
PsiType:UNRESOLVED<Void>
@@ -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()) {