FE 1.0: use TYPE_VARIANCE_CONFLICT deprecation factory
This commit is contained in:
@@ -43,6 +43,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.jetbrains.kotlin.config.LanguageFeature.ReportTypeVarianceConflictOnQualifierArguments;
|
||||
import static org.jetbrains.kotlin.diagnostics.ClassicPositioningStrategies.ACTUAL_DECLARATION_NAME;
|
||||
import static org.jetbrains.kotlin.diagnostics.ClassicPositioningStrategies.INCOMPATIBLE_DECLARATION;
|
||||
import static org.jetbrains.kotlin.diagnostics.PositioningStrategies.*;
|
||||
@@ -197,10 +198,8 @@ public interface Errors {
|
||||
DiagnosticFactory1.create(ERROR, VARIANCE_IN_PROJECTION);
|
||||
DiagnosticFactory1<KtTypeProjection, ClassifierDescriptor> REDUNDANT_PROJECTION =
|
||||
DiagnosticFactory1.create(WARNING, VARIANCE_IN_PROJECTION);
|
||||
DiagnosticFactory1<PsiElement, VarianceConflictDiagnosticData> TYPE_VARIANCE_CONFLICT =
|
||||
DiagnosticFactory1.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT);
|
||||
DiagnosticFactory1<PsiElement, VarianceConflictDiagnosticData> TYPE_VARIANCE_CONFLICT_WARNING =
|
||||
DiagnosticFactory1.create(WARNING, DECLARATION_SIGNATURE_OR_DEFAULT);
|
||||
DiagnosticFactoryForDeprecation1<PsiElement, VarianceConflictDiagnosticData> TYPE_VARIANCE_CONFLICT =
|
||||
DiagnosticFactoryForDeprecation1.create(LanguageFeature.ReportTypeVarianceConflictOnQualifierArguments, DECLARATION_SIGNATURE_OR_DEFAULT);
|
||||
DiagnosticFactory1<PsiElement, VarianceConflictDiagnosticData> TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE =
|
||||
DiagnosticFactory1.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT);
|
||||
DiagnosticFactory0<PsiElement> FINITE_BOUNDS_VIOLATION = DiagnosticFactory0.create(ERROR);
|
||||
|
||||
-3
@@ -807,9 +807,6 @@ public class DefaultErrorMessages {
|
||||
};
|
||||
MAP.put(TYPE_VARIANCE_CONFLICT, "Type parameter {0} is declared as ''{1}'' but occurs in ''{2}'' position in type {3}",
|
||||
varianceConflictDataRenderer);
|
||||
MAP.put(TYPE_VARIANCE_CONFLICT_WARNING, "Type parameter {0} is declared as ''{1}'' but occurs in ''{2}'' position in type {3}. " +
|
||||
"This diagnostic will become an error soon. See https://youtrack.jetbrains.com/issue/KT-50947",
|
||||
varianceConflictDataRenderer);
|
||||
MAP.put(TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE, "Type parameter {0} is declared as ''{1}'' but occurs in ''{2}'' position in abbreviated type {3}",
|
||||
varianceConflictDataRenderer);
|
||||
|
||||
|
||||
@@ -18,9 +18,8 @@ package org.jetbrains.kotlin.resolve
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.ReportTypeVarianceConflictOnQualifierArguments
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.impl.FunctionDescriptorImpl
|
||||
import org.jetbrains.kotlin.descriptors.impl.PropertyAccessorDescriptorImpl
|
||||
@@ -157,19 +156,20 @@ class VarianceCheckerCore(
|
||||
&& !type.annotations.hasAnnotation(StandardNames.FqNames.unsafeVariance)
|
||||
) {
|
||||
val varianceConflictDiagnosticData = VarianceConflictDiagnosticData(containingType, classifierDescriptor, position)
|
||||
val diagnostic =
|
||||
when {
|
||||
isArgumentFromQualifier -> {
|
||||
if (languageVersionSettings?.supportsFeature(ReportTypeVarianceConflictOnQualifierArguments) == true) {
|
||||
Errors.TYPE_VARIANCE_CONFLICT
|
||||
} else {
|
||||
Errors.TYPE_VARIANCE_CONFLICT_WARNING
|
||||
}
|
||||
}
|
||||
isInAbbreviation -> Errors.TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE
|
||||
else -> Errors.TYPE_VARIANCE_CONFLICT
|
||||
}
|
||||
diagnosticSink.report(diagnostic.on(psiElement, varianceConflictDiagnosticData))
|
||||
when {
|
||||
isArgumentFromQualifier ->
|
||||
diagnosticSink.report(
|
||||
Errors.TYPE_VARIANCE_CONFLICT.on(
|
||||
languageVersionSettings ?: LanguageVersionSettingsImpl.DEFAULT,
|
||||
psiElement,
|
||||
varianceConflictDiagnosticData
|
||||
)
|
||||
)
|
||||
isInAbbreviation ->
|
||||
diagnosticSink.report(Errors.TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE.on(psiElement, varianceConflictDiagnosticData))
|
||||
else ->
|
||||
diagnosticSink.report(Errors.TYPE_VARIANCE_CONFLICT.errorFactory.on(psiElement, varianceConflictDiagnosticData))
|
||||
}
|
||||
}
|
||||
return declarationVariance.allowsPosition(position)
|
||||
}
|
||||
@@ -178,11 +178,10 @@ class VarianceCheckerCore(
|
||||
for (argument in arguments) {
|
||||
if (argument?.typeParameter == null || argument.projection.isStarProjection) continue
|
||||
|
||||
val projectionKind = TypeCheckingProcedure.getEffectiveProjectionKind(argument.typeParameter!!, argument.projection)!!
|
||||
val newPosition = when (projectionKind) {
|
||||
val newPosition = when (TypeCheckingProcedure.getEffectiveProjectionKind(argument.typeParameter!!, argument.projection)!!) {
|
||||
EnrichedProjectionKind.OUT -> position
|
||||
EnrichedProjectionKind.IN -> position.opposite()
|
||||
EnrichedProjectionKind.INV -> Variance.INVARIANT
|
||||
EnrichedProjectionKind.INV -> INVARIANT
|
||||
EnrichedProjectionKind.STAR -> null // CONFLICTING_PROJECTION error was reported
|
||||
}
|
||||
if (newPosition != null) {
|
||||
|
||||
Reference in New Issue
Block a user