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);
|
Queue<CallableMemberDescriptor> fromSuperQueue = new LinkedList<CallableMemberDescriptor>(notOverridden);
|
||||||
while (!fromSuperQueue.isEmpty()) {
|
while (!fromSuperQueue.isEmpty()) {
|
||||||
CallableMemberDescriptor notOverriddenFromSuper = fromSuperQueue.remove();
|
CallableMemberDescriptor notOverriddenFromSuper = findMemberWithMaxVisibility(fromSuperQueue);
|
||||||
Collection<CallableMemberDescriptor> overridables = extractMembersOverridableBy(notOverriddenFromSuper, fromSuperQueue, sink);
|
Collection<CallableMemberDescriptor> overridables = extractMembersOverridableBy(notOverriddenFromSuper, fromSuperQueue, sink);
|
||||||
createAndBindFakeOverride(notOverriddenFromSuper, overridables, current, 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(
|
private static void createAndBindFakeOverride(
|
||||||
@NotNull CallableMemberDescriptor notOverriddenFromSuper,
|
@NotNull CallableMemberDescriptor notOverriddenFromSuper,
|
||||||
@NotNull Collection<CallableMemberDescriptor> overridables,
|
@NotNull Collection<CallableMemberDescriptor> overridables,
|
||||||
@@ -299,6 +311,11 @@ public class OverrideResolver {
|
|||||||
overridable.add(overrider);
|
overridable.add(overrider);
|
||||||
for (Iterator<CallableMemberDescriptor> iterator = extractFrom.iterator(); iterator.hasNext(); ) {
|
for (Iterator<CallableMemberDescriptor> iterator = extractFrom.iterator(); iterator.hasNext(); ) {
|
||||||
CallableMemberDescriptor candidate = iterator.next();
|
CallableMemberDescriptor candidate = iterator.next();
|
||||||
|
if (overrider == candidate) {
|
||||||
|
iterator.remove();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
OverridingUtil.OverrideCompatibilityInfo.Result result =
|
OverridingUtil.OverrideCompatibilityInfo.Result result =
|
||||||
OverridingUtil.isOverridableBy(candidate, overrider).getResult();
|
OverridingUtil.isOverridableBy(candidate, overrider).getResult();
|
||||||
switch (result) {
|
switch (result) {
|
||||||
|
|||||||
Reference in New Issue
Block a user