Reformat coneDiagnosticToFirDiagnostic.kt

This commit is contained in:
Dmitriy Novozhilov
2022-08-12 12:44:23 +03:00
committed by teamcity
parent 6573533b95
commit 42b1621b4b
@@ -50,6 +50,7 @@ private fun ConeDiagnostic.toKtDiagnostic(
source, source,
(this.name ?: SpecialNames.NO_NAME_PROVIDED).asString() (this.name ?: SpecialNames.NO_NAME_PROVIDED).asString()
) )
is ConeUnresolvedSymbolError -> FirErrors.UNRESOLVED_REFERENCE.createOn(source, this.classId.asString()) is ConeUnresolvedSymbolError -> FirErrors.UNRESOLVED_REFERENCE.createOn(source, this.classId.asString())
is ConeUnresolvedNameError -> FirErrors.UNRESOLVED_REFERENCE.createOn(source, this.name.asString()) is ConeUnresolvedNameError -> FirErrors.UNRESOLVED_REFERENCE.createOn(source, this.name.asString())
is ConeUnresolvedQualifierError -> FirErrors.UNRESOLVED_REFERENCE.createOn(source, this.qualifier) is ConeUnresolvedQualifierError -> FirErrors.UNRESOLVED_REFERENCE.createOn(source, this.qualifier)
@@ -64,6 +65,7 @@ private fun ConeDiagnostic.toKtDiagnostic(
(this.candidateSymbol.safeAs<FirCallableSymbol<*>>()?.name ?: SpecialNames.NO_NAME_PROVIDED).asString() (this.candidateSymbol.safeAs<FirCallableSymbol<*>>()?.name ?: SpecialNames.NO_NAME_PROVIDED).asString()
) )
} }
is ConeVisibilityError -> FirErrors.INVISIBLE_REFERENCE.createOn(source, this.symbol) is ConeVisibilityError -> FirErrors.INVISIBLE_REFERENCE.createOn(source, this.symbol)
is ConeInapplicableWrongReceiver -> FirErrors.UNRESOLVED_REFERENCE_WRONG_RECEIVER.createOn(source, this.candidateSymbols) is ConeInapplicableWrongReceiver -> FirErrors.UNRESOLVED_REFERENCE_WRONG_RECEIVER.createOn(source, this.candidateSymbols)
is ConeNoCompanionObject -> FirErrors.NO_COMPANION_OBJECT.createOn(source, this.candidateSymbol as FirRegularClassSymbol) is ConeNoCompanionObject -> FirErrors.NO_COMPANION_OBJECT.createOn(source, this.candidateSymbol as FirRegularClassSymbol)
@@ -74,6 +76,7 @@ private fun ConeDiagnostic.toKtDiagnostic(
val unsafeCall = candidate.diagnostics.firstIsInstance<UnsafeCall>() val unsafeCall = candidate.diagnostics.firstIsInstance<UnsafeCall>()
mapUnsafeCallError(candidate, unsafeCall, source, qualifiedAccessSource) mapUnsafeCallError(candidate, unsafeCall, source, qualifiedAccessSource)
} }
applicability == CandidateApplicability.UNSTABLE_SMARTCAST -> { applicability == CandidateApplicability.UNSTABLE_SMARTCAST -> {
val unstableSmartcast = val unstableSmartcast =
this.candidates.first { it.applicability == CandidateApplicability.UNSTABLE_SMARTCAST }.diagnostics.firstIsInstance<UnstableSmartCast>() this.candidates.first { it.applicability == CandidateApplicability.UNSTABLE_SMARTCAST }.diagnostics.firstIsInstance<UnstableSmartCast>()
@@ -85,27 +88,34 @@ private fun ConeDiagnostic.toKtDiagnostic(
unstableSmartcast.isCastToNotNull unstableSmartcast.isCastToNotNull
) )
} }
else -> FirErrors.NONE_APPLICABLE.createOn(source, this.candidates.map { it.symbol }) else -> FirErrors.NONE_APPLICABLE.createOn(source, this.candidates.map { it.symbol })
} }
is ConeOperatorAmbiguityError -> FirErrors.ASSIGN_OPERATOR_AMBIGUITY.createOn(source, this.candidateSymbols) is ConeOperatorAmbiguityError -> FirErrors.ASSIGN_OPERATOR_AMBIGUITY.createOn(source, this.candidateSymbols)
is ConeVariableExpectedError -> FirErrors.VARIABLE_EXPECTED.createOn(source) is ConeVariableExpectedError -> FirErrors.VARIABLE_EXPECTED.createOn(source)
is ConeValReassignmentError -> when (val symbol = this.variable) { is ConeValReassignmentError -> when (val symbol = this.variable) {
is FirBackingFieldSymbol -> FirErrors.VAL_REASSIGNMENT_VIA_BACKING_FIELD.errorFactory.createOn(source, symbol) is FirBackingFieldSymbol -> FirErrors.VAL_REASSIGNMENT_VIA_BACKING_FIELD.errorFactory.createOn(source, symbol)
else -> FirErrors.VAL_REASSIGNMENT.createOn(source, symbol) else -> FirErrors.VAL_REASSIGNMENT.createOn(source, symbol)
} }
is ConeUnexpectedTypeArgumentsError -> FirErrors.TYPE_ARGUMENTS_NOT_ALLOWED.createOn(this.source ?: source) is ConeUnexpectedTypeArgumentsError -> FirErrors.TYPE_ARGUMENTS_NOT_ALLOWED.createOn(this.source ?: source)
is ConeIllegalAnnotationError -> FirErrors.NOT_AN_ANNOTATION_CLASS.createOn(source, this.name.asString()) is ConeIllegalAnnotationError -> FirErrors.NOT_AN_ANNOTATION_CLASS.createOn(source, this.name.asString())
is ConeWrongNumberOfTypeArgumentsError -> is ConeWrongNumberOfTypeArgumentsError ->
FirErrors.WRONG_NUMBER_OF_TYPE_ARGUMENTS.createOn(this.source, this.desiredCount, this.symbol) FirErrors.WRONG_NUMBER_OF_TYPE_ARGUMENTS.createOn(this.source, this.desiredCount, this.symbol)
is ConeOuterClassArgumentsRequired -> is ConeOuterClassArgumentsRequired ->
FirErrors.OUTER_CLASS_ARGUMENTS_REQUIRED.createOn(qualifiedAccessSource ?: source, this.symbol) FirErrors.OUTER_CLASS_ARGUMENTS_REQUIRED.createOn(qualifiedAccessSource ?: source, this.symbol)
is ConeNoTypeArgumentsOnRhsError -> is ConeNoTypeArgumentsOnRhsError ->
FirErrors.NO_TYPE_ARGUMENTS_ON_RHS.createOn(qualifiedAccessSource ?: source, this.desiredCount, this.symbol) FirErrors.NO_TYPE_ARGUMENTS_ON_RHS.createOn(qualifiedAccessSource ?: source, this.desiredCount, this.symbol)
is ConeSimpleDiagnostic -> when { is ConeSimpleDiagnostic -> when {
source.kind is KtFakeSourceElementKind && source.kind != KtFakeSourceElementKind.ReferenceInAtomicQualifiedAccess -> null source.kind is KtFakeSourceElementKind && source.kind != KtFakeSourceElementKind.ReferenceInAtomicQualifiedAccess -> null
else -> this.getFactory(source).createOn(qualifiedAccessSource ?: source) else -> this.getFactory(source).createOn(qualifiedAccessSource ?: source)
} }
is ConeCannotInferParameterType -> FirErrors.CANNOT_INFER_PARAMETER_TYPE.createOn(source)
is ConeCannotInferParameterType -> FirErrors.CANNOT_INFER_PARAMETER_TYPE.createOn(source)
is ConeInstanceAccessBeforeSuperCall -> FirErrors.INSTANCE_ACCESS_BEFORE_SUPER_CALL.createOn(source, this.target) is ConeInstanceAccessBeforeSuperCall -> FirErrors.INSTANCE_ACCESS_BEFORE_SUPER_CALL.createOn(source, this.target)
is ConeStubDiagnostic -> null is ConeStubDiagnostic -> null
is ConeIntermediateDiagnostic -> null is ConeIntermediateDiagnostic -> null
@@ -115,8 +125,10 @@ private fun ConeDiagnostic.toKtDiagnostic(
is ConeNotAnnotationContainer -> null is ConeNotAnnotationContainer -> null
is ConeImportFromSingleton -> FirErrors.CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON.createOn(source, this.name) is ConeImportFromSingleton -> FirErrors.CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON.createOn(source, this.name)
is ConeUnsupported -> FirErrors.UNSUPPORTED.createOn(this.source ?: source, this.reason) is ConeUnsupported -> FirErrors.UNSUPPORTED.createOn(this.source ?: source, this.reason)
is ConeLocalVariableNoTypeOrInitializer -> is ConeLocalVariableNoTypeOrInitializer -> runIf(variable.isLocalMember) {
runIf(variable.isLocalMember) { FirErrors.VARIABLE_WITH_NO_TYPE_NO_INITIALIZER.createOn(source) } FirErrors.VARIABLE_WITH_NO_TYPE_NO_INITIALIZER.createOn(source)
}
is ConeUnderscoreIsReserved -> FirErrors.UNDERSCORE_IS_RESERVED.createOn(this.source) is ConeUnderscoreIsReserved -> FirErrors.UNDERSCORE_IS_RESERVED.createOn(this.source)
is ConeUnderscoreUsageWithoutBackticks -> FirErrors.UNDERSCORE_USAGE_WITHOUT_BACKTICKS.createOn(this.source) is ConeUnderscoreUsageWithoutBackticks -> FirErrors.UNDERSCORE_USAGE_WITHOUT_BACKTICKS.createOn(this.source)
is ConeAmbiguousSuper -> FirErrors.AMBIGUOUS_SUPER.createOn(source, this.candidateTypes) is ConeAmbiguousSuper -> FirErrors.AMBIGUOUS_SUPER.createOn(source, this.candidateTypes)
@@ -198,10 +210,12 @@ private fun mapInapplicableCandidateError(
is VarargArgumentOutsideParentheses -> FirErrors.VARARG_OUTSIDE_PARENTHESES.createOn( is VarargArgumentOutsideParentheses -> FirErrors.VARARG_OUTSIDE_PARENTHESES.createOn(
rootCause.argument.source ?: qualifiedAccessSource rootCause.argument.source ?: qualifiedAccessSource
) )
is NamedArgumentNotAllowed -> FirErrors.NAMED_ARGUMENTS_NOT_ALLOWED.createOn( is NamedArgumentNotAllowed -> FirErrors.NAMED_ARGUMENTS_NOT_ALLOWED.createOn(
rootCause.argument.source, rootCause.argument.source,
rootCause.forbiddenNamedArgumentsTarget rootCause.forbiddenNamedArgumentsTarget
) )
is ArgumentTypeMismatch -> { is ArgumentTypeMismatch -> {
FirErrors.ARGUMENT_TYPE_MISMATCH.createOn( FirErrors.ARGUMENT_TYPE_MISMATCH.createOn(
rootCause.argument.source ?: source, rootCause.argument.source ?: source,
@@ -210,21 +224,26 @@ private fun mapInapplicableCandidateError(
rootCause.isMismatchDueToNullability rootCause.isMismatchDueToNullability
) )
} }
is MultipleContextReceiversApplicableForExtensionReceivers -> is MultipleContextReceiversApplicableForExtensionReceivers ->
FirErrors.AMBIGUOUS_CALL_WITH_IMPLICIT_CONTEXT_RECEIVER.createOn(qualifiedAccessSource ?: source) FirErrors.AMBIGUOUS_CALL_WITH_IMPLICIT_CONTEXT_RECEIVER.createOn(qualifiedAccessSource ?: source)
is NoApplicableValueForContextReceiver -> is NoApplicableValueForContextReceiver ->
FirErrors.NO_CONTEXT_RECEIVER.createOn( FirErrors.NO_CONTEXT_RECEIVER.createOn(
qualifiedAccessSource ?: source, qualifiedAccessSource ?: source,
rootCause.expectedContextReceiverType.removeTypeVariableTypes(typeContext) rootCause.expectedContextReceiverType.removeTypeVariableTypes(typeContext)
) )
is AmbiguousValuesForContextReceiverParameter -> is AmbiguousValuesForContextReceiverParameter ->
FirErrors.MULTIPLE_ARGUMENTS_APPLICABLE_FOR_CONTEXT_RECEIVER.createOn( FirErrors.MULTIPLE_ARGUMENTS_APPLICABLE_FOR_CONTEXT_RECEIVER.createOn(
qualifiedAccessSource ?: source, qualifiedAccessSource ?: source,
rootCause.expectedContextReceiverType.removeTypeVariableTypes(typeContext) rootCause.expectedContextReceiverType.removeTypeVariableTypes(typeContext)
) )
is NullForNotNullType -> FirErrors.NULL_FOR_NONNULL_TYPE.createOn( is NullForNotNullType -> FirErrors.NULL_FOR_NONNULL_TYPE.createOn(
rootCause.argument.source ?: source rootCause.argument.source ?: source
) )
is NonVarargSpread -> FirErrors.NON_VARARG_SPREAD.createOn(rootCause.argument.source?.getChild(KtTokens.MUL, depth = 1)!!) is NonVarargSpread -> FirErrors.NON_VARARG_SPREAD.createOn(rootCause.argument.source?.getChild(KtTokens.MUL, depth = 1)!!)
is ArgumentPassedTwice -> FirErrors.ARGUMENT_PASSED_TWICE.createOn(rootCause.argument.source) is ArgumentPassedTwice -> FirErrors.ARGUMENT_PASSED_TWICE.createOn(rootCause.argument.source)
is TooManyArguments -> FirErrors.TOO_MANY_ARGUMENTS.createOn(rootCause.argument.source ?: source, rootCause.function.symbol) is TooManyArguments -> FirErrors.TOO_MANY_ARGUMENTS.createOn(rootCause.argument.source ?: source, rootCause.function.symbol)
@@ -232,18 +251,22 @@ private fun mapInapplicableCandidateError(
qualifiedAccessSource ?: source, qualifiedAccessSource ?: source,
rootCause.valueParameter.symbol rootCause.valueParameter.symbol
) )
is NameNotFound -> FirErrors.NAMED_PARAMETER_NOT_FOUND.createOn( is NameNotFound -> FirErrors.NAMED_PARAMETER_NOT_FOUND.createOn(
rootCause.argument.source ?: source, rootCause.argument.source ?: source,
rootCause.argument.name.asString() rootCause.argument.name.asString()
) )
is NameForAmbiguousParameter -> FirErrors.NAME_FOR_AMBIGUOUS_PARAMETER.createOn( is NameForAmbiguousParameter -> FirErrors.NAME_FOR_AMBIGUOUS_PARAMETER.createOn(
rootCause.argument.source ?: source rootCause.argument.source ?: source
) )
is UnsafeCall -> mapUnsafeCallError(diagnostic.candidate, rootCause, source, qualifiedAccessSource) is UnsafeCall -> mapUnsafeCallError(diagnostic.candidate, rootCause, source, qualifiedAccessSource)
is ManyLambdaExpressionArguments -> FirErrors.MANY_LAMBDA_EXPRESSION_ARGUMENTS.createOn(rootCause.argument.source ?: source) is ManyLambdaExpressionArguments -> FirErrors.MANY_LAMBDA_EXPRESSION_ARGUMENTS.createOn(rootCause.argument.source ?: source)
is InfixCallOfNonInfixFunction -> FirErrors.INFIX_MODIFIER_REQUIRED.createOn(source, rootCause.function) is InfixCallOfNonInfixFunction -> FirErrors.INFIX_MODIFIER_REQUIRED.createOn(source, rootCause.function)
is OperatorCallOfNonOperatorFunction -> is OperatorCallOfNonOperatorFunction ->
FirErrors.OPERATOR_MODIFIER_REQUIRED.createOn(source, rootCause.function, rootCause.function.name.asString()) FirErrors.OPERATOR_MODIFIER_REQUIRED.createOn(source, rootCause.function, rootCause.function.name.asString())
is UnstableSmartCast -> FirErrors.SMARTCAST_IMPOSSIBLE.createOn( is UnstableSmartCast -> FirErrors.SMARTCAST_IMPOSSIBLE.createOn(
rootCause.argument.source, rootCause.argument.source,
rootCause.targetType, rootCause.targetType,
@@ -251,6 +274,7 @@ private fun mapInapplicableCandidateError(
rootCause.argument.smartcastStability.description, rootCause.argument.smartcastStability.description,
rootCause.isCastToNotNull rootCause.isCastToNotNull
) )
is DslScopeViolation -> FirErrors.DSL_SCOPE_VIOLATION.createOn(source, rootCause.calleeSymbol) is DslScopeViolation -> FirErrors.DSL_SCOPE_VIOLATION.createOn(source, rootCause.calleeSymbol)
is InferenceError -> { is InferenceError -> {
rootCause.constraintError.toDiagnostic( rootCause.constraintError.toDiagnostic(
@@ -261,9 +285,11 @@ private fun mapInapplicableCandidateError(
diagnostic.candidate diagnostic.candidate
) )
} }
is InferredEmptyIntersectionDiagnostic -> reportInferredIntoEmptyIntersectionError( is InferredEmptyIntersectionDiagnostic -> reportInferredIntoEmptyIntersectionError(
source, rootCause.typeVariable, rootCause.incompatibleTypes, rootCause.causingTypes, rootCause.kind source, rootCause.typeVariable, rootCause.incompatibleTypes, rootCause.causingTypes, rootCause.kind
) )
else -> genericDiagnostic else -> genericDiagnostic
} }
}.distinct() }.distinct()
@@ -366,14 +392,17 @@ private fun ConstraintSystemError.toDiagnostic(
typeMismatchDueToNullability typeMismatchDueToNullability
) )
} }
is ExplicitTypeParameterConstraintPosition<*>, is ExplicitTypeParameterConstraintPosition<*>,
is DelegatedPropertyConstraintPosition<*> -> { is DelegatedPropertyConstraintPosition<*> -> {
errorsToIgnore.add(this) errorsToIgnore.add(this)
return null return null
} }
else -> null else -> null
} }
} }
is NotEnoughInformationForTypeParameter<*> -> { is NotEnoughInformationForTypeParameter<*> -> {
val isDiagnosticRedundant = candidate.errors.any { otherError -> val isDiagnosticRedundant = candidate.errors.any { otherError ->
(otherError is ConstrainingTypeIsError && otherError.typeVariable == this.typeVariable) (otherError is ConstrainingTypeIsError && otherError.typeVariable == this.typeVariable)
@@ -393,12 +422,14 @@ private fun ConstraintSystemError.toDiagnostic(
typeVariableName, typeVariableName,
) )
} }
is NoSuccessfulFork -> { is NoSuccessfulFork -> {
FirErrors.INFERENCE_UNSUCCESSFUL_FORK.createOn( FirErrors.INFERENCE_UNSUCCESSFUL_FORK.createOn(
source, source,
position.initialConstraint.asStringWithoutPosition(), position.initialConstraint.asStringWithoutPosition(),
) )
} }
is InferredEmptyIntersection -> { is InferredEmptyIntersection -> {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
reportInferredIntoEmptyIntersectionError( reportInferredIntoEmptyIntersectionError(
@@ -409,6 +440,7 @@ private fun ConstraintSystemError.toDiagnostic(
kind kind
) )
} }
else -> null else -> null
} }
} }
@@ -455,6 +487,7 @@ private fun ConeSimpleDiagnostic.getFactory(source: KtSourceElement): KtDiagnost
KtNodeTypes.WHEN_CONDITION_IN_RANGE, KtNodeTypes.WHEN_CONDITION_IS_PATTERN -> FirErrors.EXPECTED_CONDITION KtNodeTypes.WHEN_CONDITION_IN_RANGE, KtNodeTypes.WHEN_CONDITION_IS_PATTERN -> FirErrors.EXPECTED_CONDITION
else -> FirErrors.EXPRESSION_EXPECTED else -> FirErrors.EXPRESSION_EXPECTED
} }
DiagnosticKind.JumpOutsideLoop -> FirErrors.BREAK_OR_CONTINUE_OUTSIDE_A_LOOP DiagnosticKind.JumpOutsideLoop -> FirErrors.BREAK_OR_CONTINUE_OUTSIDE_A_LOOP
DiagnosticKind.NotLoopLabel -> FirErrors.NOT_A_LOOP_LABEL DiagnosticKind.NotLoopLabel -> FirErrors.NOT_A_LOOP_LABEL
DiagnosticKind.VariableExpected -> FirErrors.VARIABLE_EXPECTED DiagnosticKind.VariableExpected -> FirErrors.VARIABLE_EXPECTED