Fixed unstable inheritance of adapter + declaration.
This commit is contained in:
@@ -43,6 +43,7 @@ import javax.inject.Inject;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
||||||
|
import static org.jetbrains.jet.lang.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.CONFLICT;
|
||||||
import static org.jetbrains.jet.lang.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE;
|
import static org.jetbrains.jet.lang.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE;
|
||||||
|
|
||||||
public class OverrideResolver {
|
public class OverrideResolver {
|
||||||
@@ -242,7 +243,8 @@ 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 = VisibilityUtil.findMemberWithMaxVisibility(fromSuperQueue);
|
CallableMemberDescriptor notOverriddenFromSuper = VisibilityUtil.findMemberWithMaxVisibility(fromSuperQueue);
|
||||||
Collection<CallableMemberDescriptor> overridables = extractMembersOverridableBy(notOverriddenFromSuper, fromSuperQueue, sink);
|
Collection<CallableMemberDescriptor> overridables = extractMembersOverridableInBothWays(notOverriddenFromSuper, fromSuperQueue,
|
||||||
|
sink);
|
||||||
createAndBindFakeOverride(overridables, current, sink);
|
createAndBindFakeOverride(overridables, current, sink);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -326,7 +328,7 @@ public class OverrideResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static Collection<CallableMemberDescriptor> extractMembersOverridableBy(
|
private static Collection<CallableMemberDescriptor> extractMembersOverridableInBothWays(
|
||||||
@NotNull CallableMemberDescriptor overrider,
|
@NotNull CallableMemberDescriptor overrider,
|
||||||
@NotNull Queue<CallableMemberDescriptor> extractFrom,
|
@NotNull Queue<CallableMemberDescriptor> extractFrom,
|
||||||
@NotNull DescriptorSink sink
|
@NotNull DescriptorSink sink
|
||||||
@@ -340,19 +342,17 @@ public class OverrideResolver {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
OverridingUtil.OverrideCompatibilityInfo.Result result =
|
OverridingUtil.OverrideCompatibilityInfo.Result result1 =
|
||||||
OverridingUtil.isOverridableBy(candidate, overrider).getResult();
|
OverridingUtil.isOverridableBy(candidate, overrider).getResult();
|
||||||
switch (result) {
|
OverridingUtil.OverrideCompatibilityInfo.Result result2 =
|
||||||
case OVERRIDABLE:
|
OverridingUtil.isOverridableBy(overrider, candidate).getResult();
|
||||||
overridable.add(candidate);
|
if (result1 == OVERRIDABLE && result2 == OVERRIDABLE) {
|
||||||
iterator.remove();
|
overridable.add(candidate);
|
||||||
break;
|
iterator.remove();
|
||||||
case CONFLICT:
|
}
|
||||||
sink.conflict(overrider, candidate);
|
else if (result1 == CONFLICT || result2 == CONFLICT) {
|
||||||
iterator.remove();
|
sink.conflict(overrider, candidate);
|
||||||
break;
|
iterator.remove();
|
||||||
case INCOMPATIBLE:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return overridable;
|
return overridable;
|
||||||
|
|||||||
Reference in New Issue
Block a user