[FIR] Introduce TYPE_ARGUMENTS_NOT_ALLOWED & some other type errors
This commit introduces several different things, in particular: - check type arguments in expressions - new TypeArgumentList node to deal with diagnostic source - ConeDiagnostic was moved to fir:cones - ConeIntermediateDiagnostic to use in inference (?) without reporting - detailed diagnostics on error type
This commit is contained in:
+9
-2
@@ -47,6 +47,7 @@ import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.builder.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirQualifierPartImpl
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirTypeArgumentListImpl
|
||||
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
||||
import org.jetbrains.kotlin.lexer.KtTokens.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
@@ -1601,10 +1602,16 @@ class DeclarationsConverter(
|
||||
if (identifier == null)
|
||||
return buildErrorTypeRef { diagnostic = ConeSimpleDiagnostic("Incomplete user type", DiagnosticKind.Syntax) }
|
||||
|
||||
val qualifierPart = FirQualifierPartImpl(identifier.nameAsSafeName()).apply { typeArguments += firTypeArguments }
|
||||
val theSource = userType.toFirSourceElement()
|
||||
val qualifierPart = FirQualifierPartImpl(
|
||||
identifier.nameAsSafeName(),
|
||||
FirTypeArgumentListImpl(theSource).apply {
|
||||
typeArguments += firTypeArguments
|
||||
}
|
||||
)
|
||||
|
||||
return buildUserTypeRef {
|
||||
source = userType.toFirSourceElement()
|
||||
source = theSource
|
||||
isMarkedNullable = isNullable
|
||||
qualifier.add(qualifierPart)
|
||||
simpleFirUserType?.qualifier?.let { this.qualifier.addAll(0, it) }
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.fir.builder
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiErrorElement
|
||||
import com.intellij.psi.tree.IElementType
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
@@ -35,6 +36,7 @@ import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.builder.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirQualifierPartImpl
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirTypeArgumentListImpl
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirTypePlaceholderProjection
|
||||
import org.jetbrains.kotlin.lexer.KtTokens.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
@@ -1225,14 +1227,19 @@ class RawFirBuilder(
|
||||
this.source = source
|
||||
isMarkedNullable = isNullable
|
||||
var ktQualifier: KtUserType? = unwrappedElement
|
||||
|
||||
do {
|
||||
val firQualifier = FirQualifierPartImpl(referenceExpression!!.getReferencedNameAsName())
|
||||
for (typeArgument in ktQualifier!!.typeArguments) {
|
||||
firQualifier.typeArguments += typeArgument.convert<FirTypeProjection>()
|
||||
}
|
||||
val firQualifier = FirQualifierPartImpl(
|
||||
referenceExpression!!.getReferencedNameAsName(),
|
||||
FirTypeArgumentListImpl(source).apply {
|
||||
for (typeArgument in ktQualifier!!.typeArguments) {
|
||||
typeArguments += typeArgument.convert<FirTypeProjection>()
|
||||
}
|
||||
}
|
||||
)
|
||||
qualifier.add(firQualifier)
|
||||
|
||||
ktQualifier = ktQualifier.qualifier
|
||||
ktQualifier = ktQualifier!!.qualifier
|
||||
referenceExpression = ktQualifier?.referenceExpression
|
||||
} while (referenceExpression != null)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user