KT-2477 generate fake overrides for members with wider access level first #KT-2477 Fixed

This commit is contained in:
Kirill Berezin
2012-09-11 22:45:13 +04:00
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) {