Add compatibility warning for SAM conversions

This commit is contained in:
Mikhail Zarechenskiy
2020-05-31 19:04:38 +03:00
parent 01de789c76
commit 03358c61d4
11 changed files with 85 additions and 7 deletions
@@ -761,6 +761,7 @@ public interface Errors {
DiagnosticFactory1<PsiElement, KotlinType> REIFIED_TYPE_UNSAFE_SUBSTITUTION = DiagnosticFactory1.create(WARNING);
DiagnosticFactory0<KtElement> CANDIDATE_CHOSEN_USING_OVERLOAD_RESOLUTION_BY_LAMBDA_ANNOTATION = DiagnosticFactory0.create(WARNING);
DiagnosticFactory0<KtElement> COMPATIBILITY_WARNING = DiagnosticFactory0.create(WARNING);
DiagnosticFactory3<KtReferenceExpression, ClassifierDescriptor, WrongResolutionToClassifier, String> RESOLUTION_TO_CLASSIFIER =
DiagnosticFactory3.create(ERROR);
@@ -898,6 +898,8 @@ public class DefaultErrorMessages {
MAP.put(TYPE_PARAMETERS_NOT_ALLOWED, "Type parameters are not allowed here");
MAP.put(CANDIDATE_CHOSEN_USING_OVERLOAD_RESOLUTION_BY_LAMBDA_ANNOTATION, "Candidate was choosen only by @OverloadResolutionByLambdaReturnType annotation");
MAP.put(COMPATIBILITY_WARNING, "Candidate was chosen to preserve compatibility");
MAP.put(TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER, "Type parameter of a property must be used in its receiver type");
MAP.put(SUPERTYPES_FOR_ANNOTATION_CLASS, "Annotation class cannot have supertypes");
@@ -80,6 +80,9 @@ class DiagnosticReporterByTrackingStrategy(
CandidateChosenUsingOverloadResolutionByLambdaAnnotation::class.java -> {
trace.report(CANDIDATE_CHOSEN_USING_OVERLOAD_RESOLUTION_BY_LAMBDA_ANNOTATION.on(psiKotlinCall.psiCall.callElement))
}
CompatibilityWarning::class.java -> {
trace.report(COMPATIBILITY_WARNING.on(psiKotlinCall.psiCall.callElement))
}
}
}
@@ -422,6 +422,10 @@ class NewResolutionOldInference(
getResultApplicability(diagnostics)
}
override fun addCompatibilityWarning(other: Candidate) {
// Only applicable for new inference
}
override val isSuccessful = getResultApplicability(eagerDiagnostics).isSuccess
}