issue warning instead of error in case of finite bound or non-expansive inheritance violation in java code
This commit is contained in:
@@ -99,8 +99,10 @@ public interface Errors {
|
|||||||
DiagnosticFactory1<KtTypeProjection, ClassifierDescriptor> REDUNDANT_PROJECTION = DiagnosticFactory1.create(WARNING, VARIANCE_IN_PROJECTION);
|
DiagnosticFactory1<KtTypeProjection, ClassifierDescriptor> REDUNDANT_PROJECTION = DiagnosticFactory1.create(WARNING, VARIANCE_IN_PROJECTION);
|
||||||
DiagnosticFactory1<PsiElement, VarianceConflictDiagnosticData> TYPE_VARIANCE_CONFLICT =
|
DiagnosticFactory1<PsiElement, VarianceConflictDiagnosticData> TYPE_VARIANCE_CONFLICT =
|
||||||
DiagnosticFactory1.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT);
|
DiagnosticFactory1.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT);
|
||||||
DiagnosticFactory1<PsiElement, String> FINITE_BOUNDS_VIOLATION = DiagnosticFactory1.create(ERROR);
|
DiagnosticFactory0<PsiElement> FINITE_BOUNDS_VIOLATION = DiagnosticFactory0.create(ERROR);
|
||||||
DiagnosticFactory1<PsiElement, String> EXPANSIVE_INHERITANCE = DiagnosticFactory1.create(ERROR);
|
DiagnosticFactory1<PsiElement, String> FINITE_BOUNDS_VIOLATION_IN_JAVA = DiagnosticFactory1.create(WARNING);
|
||||||
|
DiagnosticFactory0<PsiElement> EXPANSIVE_INHERITANCE = DiagnosticFactory0.create(ERROR);
|
||||||
|
DiagnosticFactory1<PsiElement, String> EXPANSIVE_INHERITANCE_IN_JAVA = DiagnosticFactory1.create(WARNING);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|||||||
+4
-2
@@ -501,8 +501,10 @@ public class DefaultErrorMessages {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
MAP.put(FINITE_BOUNDS_VIOLATION, "{0}", STRING);
|
MAP.put(FINITE_BOUNDS_VIOLATION, "Type argument is not within its bounds (violation of Finite Bound Restriction)");
|
||||||
MAP.put(EXPANSIVE_INHERITANCE, "{0}", STRING);
|
MAP.put(FINITE_BOUNDS_VIOLATION_IN_JAVA, "Violation of Finite Bound Restriction for {0}", STRING);
|
||||||
|
MAP.put(EXPANSIVE_INHERITANCE, "Type argument is not within its bounds (violation of Non-Expansive Inheritance Restriction)");
|
||||||
|
MAP.put(EXPANSIVE_INHERITANCE_IN_JAVA, "Violation of Non-Expansive Inheritance Restriction for {0}", STRING);
|
||||||
MAP.put(REDUNDANT_PROJECTION, "Projection is redundant: the corresponding type parameter of {0} has the same variance", NAME);
|
MAP.put(REDUNDANT_PROJECTION, "Projection is redundant: the corresponding type parameter of {0} has the same variance", NAME);
|
||||||
MAP.put(CONFLICTING_PROJECTION, "Projection is conflicting with variance of the corresponding type parameter of {0}. Remove the projection or replace it with ''*''", NAME);
|
MAP.put(CONFLICTING_PROJECTION, "Projection is conflicting with variance of the corresponding type parameter of {0}. Remove the projection or replace it with ''*''", NAME);
|
||||||
|
|
||||||
|
|||||||
@@ -51,15 +51,15 @@ public object FiniteBoundRestrictionChecker {
|
|||||||
for (typeParameter in typeConstructor.parameters) {
|
for (typeParameter in typeConstructor.parameters) {
|
||||||
if (typeParameter in problemNodes) {
|
if (typeParameter in problemNodes) {
|
||||||
val element = DescriptorToSourceUtils.descriptorToDeclaration(typeParameter) ?: declaration
|
val element = DescriptorToSourceUtils.descriptorToDeclaration(typeParameter) ?: declaration
|
||||||
diagnosticHolder.report(Errors.FINITE_BOUNDS_VIOLATION.on(element, "Type argument is not within its bounds (violation of Finite Bound Restriction)"))
|
diagnosticHolder.report(Errors.FINITE_BOUNDS_VIOLATION.on(element))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (problemNodes.any { it.source != SourceElement.NO_SOURCE }) return
|
if (problemNodes.any { it.source != SourceElement.NO_SOURCE }) return
|
||||||
|
|
||||||
val superTypeFqNames = problemNodes.map { it.containingDeclaration }.map { it.fqNameUnsafe.asString() }.toSortedSet()
|
val typeFqNames = problemNodes.map { it.containingDeclaration }.map { it.fqNameUnsafe.asString() }.toSortedSet()
|
||||||
diagnosticHolder.report(Errors.FINITE_BOUNDS_VIOLATION.on(declaration, "Violation of Finite Bound Restriction for supertypes: " + superTypeFqNames.joinToString(", ")))
|
diagnosticHolder.report(Errors.FINITE_BOUNDS_VIOLATION_IN_JAVA.on(declaration, typeFqNames.joinToString(", ")))
|
||||||
}
|
}
|
||||||
|
|
||||||
private class GraphBuilder(val typeConstructor: TypeConstructor) {
|
private class GraphBuilder(val typeConstructor: TypeConstructor) {
|
||||||
|
|||||||
+3
-3
@@ -52,15 +52,15 @@ public object NonExpansiveInheritanceRestrictionChecker {
|
|||||||
for (typeParameter in typeConstructor.parameters) {
|
for (typeParameter in typeConstructor.parameters) {
|
||||||
if (typeParameter in problemNodes) {
|
if (typeParameter in problemNodes) {
|
||||||
val element = DescriptorToSourceUtils.descriptorToDeclaration(typeParameter) ?: declaration
|
val element = DescriptorToSourceUtils.descriptorToDeclaration(typeParameter) ?: declaration
|
||||||
diagnosticHolder.report(Errors.EXPANSIVE_INHERITANCE.on(element, "Type argument is not within its bounds (violation of Non-Expansive Inheritance Restriction"))
|
diagnosticHolder.report(Errors.EXPANSIVE_INHERITANCE.on(element))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (problemNodes.any { it.source != SourceElement.NO_SOURCE }) return
|
if (problemNodes.any { it.source != SourceElement.NO_SOURCE }) return
|
||||||
|
|
||||||
val superTypeFqNames = problemNodes.map { it.containingDeclaration }.map { it.fqNameUnsafe.asString() }.toSortedSet()
|
val typeFqNames = problemNodes.map { it.containingDeclaration }.map { it.fqNameUnsafe.asString() }.toSortedSet()
|
||||||
diagnosticHolder.report(Errors.EXPANSIVE_INHERITANCE.on(declaration, "Violation of Non-Expansive Inheritance Restriction for supertypes: " + superTypeFqNames.joinToString(", ")))
|
diagnosticHolder.report(Errors.EXPANSIVE_INHERITANCE_IN_JAVA.on(declaration, typeFqNames.joinToString(", ")))
|
||||||
}
|
}
|
||||||
|
|
||||||
private class GraphBuilder(val typeConstructor: TypeConstructor) {
|
private class GraphBuilder(val typeConstructor: TypeConstructor) {
|
||||||
|
|||||||
Vendored
+1
-1
@@ -2,4 +2,4 @@
|
|||||||
public class A<T extends A> {}
|
public class A<T extends A> {}
|
||||||
|
|
||||||
// FILE: 1.kt
|
// FILE: 1.kt
|
||||||
<!FINITE_BOUNDS_VIOLATION!>class B<S: A<*>><!>
|
<!FINITE_BOUNDS_VIOLATION_IN_JAVA!>class B<S: A<*>><!>
|
||||||
+1
-1
@@ -13,4 +13,4 @@ public interface C<X> extends D<P<X,X>> {}
|
|||||||
public interface P<Y1, Y2> extends Q<C<Y1>, C<D<Y2>>> {}
|
public interface P<Y1, Y2> extends Q<C<Y1>, C<D<Y2>>> {}
|
||||||
|
|
||||||
// FILE: 1.kt
|
// FILE: 1.kt
|
||||||
<!EXPANSIVE_INHERITANCE!>interface P1<YY1, YY2> : P<YY1, YY2><!>
|
<!EXPANSIVE_INHERITANCE_IN_JAVA!>interface P1<YY1, YY2> : P<YY1, YY2><!>
|
||||||
Reference in New Issue
Block a user