Overrides do not collide in resolution any more

This commit is contained in:
Andrey Breslav
2011-09-05 19:08:07 +04:00
parent 6aa2b37d15
commit 9223875977
2 changed files with 27 additions and 1 deletions
@@ -1,6 +1,7 @@
package org.jetbrains.jet.lang.resolve.calls;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.JetSemanticServices;
@@ -111,7 +112,8 @@ import java.util.Set;
}
private <Descriptor extends CallableDescriptor> boolean overrides(@NotNull Descriptor f, @NotNull Descriptor g) {
Set<? extends CallableDescriptor> overriddenDescriptors = f.getOriginal().getOverriddenDescriptors();
Set<CallableDescriptor> overriddenDescriptors = Sets.newHashSet();
getAllOverriddenDescriptors(f.getOriginal(), overriddenDescriptors);
CallableDescriptor originalG = g.getOriginal();
for (CallableDescriptor overriddenFunction : overriddenDescriptors) {
if (originalG.equals(overriddenFunction.getOriginal())) return true;
@@ -119,4 +121,12 @@ import java.util.Set;
return false;
}
private void getAllOverriddenDescriptors(@NotNull CallableDescriptor current, @NotNull Set<CallableDescriptor> overriddenDescriptors) {
if (overriddenDescriptors.contains(current)) return;
for (CallableDescriptor descriptor : current.getOriginal().getOverriddenDescriptors()) {
getAllOverriddenDescriptors(descriptor, overriddenDescriptors);
overriddenDescriptors.add(descriptor);
}
}
}
@@ -0,0 +1,16 @@
fun box() {
val a : C
a.foo()
}
open class A {
fun foo()
}
open class B : A {
fun foo()
}
open class C : B {
fun foo()
}