KT-2477 generate fake overrides for members with wider access level first #KT-2477 Fixed
This commit is contained in:
committed by
Andrey Breslav
parent
194ef38ba3
commit
cfa8b36d24
@@ -240,12 +240,24 @@ public class OverrideResolver {
|
||||
) {
|
||||
Queue<CallableMemberDescriptor> fromSuperQueue = new LinkedList<CallableMemberDescriptor>(notOverridden);
|
||||
while (!fromSuperQueue.isEmpty()) {
|
||||
CallableMemberDescriptor notOverriddenFromSuper = fromSuperQueue.remove();
|
||||
CallableMemberDescriptor notOverriddenFromSuper = findMemberWithMaxVisibility(fromSuperQueue);
|
||||
Collection<CallableMemberDescriptor> overridables = extractMembersOverridableBy(notOverriddenFromSuper, fromSuperQueue, sink);
|
||||
createAndBindFakeOverride(notOverriddenFromSuper, overridables, current, sink);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static CallableMemberDescriptor findMemberWithMaxVisibility(@NotNull Queue<CallableMemberDescriptor> descriptors) {
|
||||
CallableMemberDescriptor descriptor = descriptors.element();
|
||||
for (CallableMemberDescriptor candidate : descriptors) {
|
||||
Integer result = Visibilities.compare(descriptor.getVisibility(), candidate.getVisibility());
|
||||
if (result != null && result < 0) {
|
||||
descriptor = candidate;
|
||||
}
|
||||
}
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
private static void createAndBindFakeOverride(
|
||||
@NotNull CallableMemberDescriptor notOverriddenFromSuper,
|
||||
@NotNull Collection<CallableMemberDescriptor> overridables,
|
||||
@@ -299,6 +311,11 @@ public class OverrideResolver {
|
||||
overridable.add(overrider);
|
||||
for (Iterator<CallableMemberDescriptor> iterator = extractFrom.iterator(); iterator.hasNext(); ) {
|
||||
CallableMemberDescriptor candidate = iterator.next();
|
||||
if (overrider == candidate) {
|
||||
iterator.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
OverridingUtil.OverrideCompatibilityInfo.Result result =
|
||||
OverridingUtil.isOverridableBy(candidate, overrider).getResult();
|
||||
switch (result) {
|
||||
|
||||
Reference in New Issue
Block a user