Exclude warning "Remove final upper bound" for functions with override modifier
^KT-25105 Fixed
This commit is contained in:
@@ -369,7 +369,7 @@ class DeclarationsChecker(
|
||||
upperBoundCheckRequests.add(DescriptorResolver.UpperBoundCheckRequest(name, typeReference, type))
|
||||
}
|
||||
|
||||
DescriptorResolver.checkUpperBoundTypes(trace, upperBoundCheckRequests)
|
||||
DescriptorResolver.checkUpperBoundTypes(trace, upperBoundCheckRequests, false)
|
||||
|
||||
for (request in upperBoundCheckRequests) {
|
||||
DescriptorResolver.checkBounds(request.upperBound, request.upperBoundType, trace)
|
||||
|
||||
@@ -560,12 +560,16 @@ public class DescriptorResolver {
|
||||
}
|
||||
|
||||
if (!(declaration instanceof KtClass)) {
|
||||
checkUpperBoundTypes(trace, upperBoundCheckRequests);
|
||||
checkUpperBoundTypes(trace, upperBoundCheckRequests, declaration.hasModifier(KtTokens.OVERRIDE_KEYWORD));
|
||||
checkNamesInConstraints(declaration, descriptor, scope, trace);
|
||||
}
|
||||
}
|
||||
|
||||
public static void checkUpperBoundTypes(@NotNull BindingTrace trace, @NotNull List<UpperBoundCheckRequest> requests) {
|
||||
public static void checkUpperBoundTypes(
|
||||
@NotNull BindingTrace trace,
|
||||
@NotNull List<UpperBoundCheckRequest> requests,
|
||||
boolean hasOverrideModifier
|
||||
) {
|
||||
if (requests.isEmpty()) return;
|
||||
|
||||
Set<Name> classBoundEncountered = new HashSet<>();
|
||||
@@ -593,7 +597,7 @@ public class DescriptorResolver {
|
||||
}
|
||||
}
|
||||
|
||||
checkUpperBoundType(upperBoundElement, upperBound, trace);
|
||||
checkUpperBoundType(upperBoundElement, upperBound, trace, hasOverrideModifier);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -641,9 +645,10 @@ public class DescriptorResolver {
|
||||
public static void checkUpperBoundType(
|
||||
KtTypeReference upperBound,
|
||||
@NotNull KotlinType upperBoundType,
|
||||
BindingTrace trace
|
||||
BindingTrace trace,
|
||||
boolean hasOverrideModifier
|
||||
) {
|
||||
if (!TypeUtils.canHaveSubtypes(KotlinTypeChecker.DEFAULT, upperBoundType)) {
|
||||
if (!hasOverrideModifier && !TypeUtils.canHaveSubtypes(KotlinTypeChecker.DEFAULT, upperBoundType)) {
|
||||
trace.report(FINAL_UPPER_BOUND.on(upperBound, upperBoundType));
|
||||
}
|
||||
if (DynamicTypesKt.isDynamic(upperBoundType)) {
|
||||
|
||||
Reference in New Issue
Block a user