Fix invalid usage of getOverriddenDescriptors in JetLineMarkerProvider

This commit is contained in:
Pavel V. Talanov
2013-10-07 15:56:19 +04:00
parent 4a217d8cde
commit 91336a888c
7 changed files with 88 additions and 3 deletions
@@ -70,6 +70,8 @@ import javax.swing.*;
import java.awt.event.MouseEvent;
import java.util.*;
import static org.jetbrains.jet.lang.resolve.BindingContextUtils.getDirectlyOverriddenDeclarations;
public class JetLineMarkerProvider implements LineMarkerProvider {
public static final Icon OVERRIDING_MARK = AllIcons.Gutter.OverridingMethod;
public static final Icon IMPLEMENTING_MARK = AllIcons.Gutter.ImplementingMethod;
@@ -245,7 +247,8 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
return null;
}
Set<? extends CallableMemberDescriptor> overriddenMembers = ((CallableMemberDescriptor)descriptor).getOverriddenDescriptors();
Set<? extends CallableMemberDescriptor> overriddenMembers = getDirectlyOverriddenDeclarations(
(CallableMemberDescriptor) descriptor);
if (overriddenMembers.size() == 0) {
return null;
}
@@ -287,7 +290,7 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
return;
}
Set<? extends CallableMemberDescriptor> overriddenMembers = ((CallableMemberDescriptor)descriptor).getOverriddenDescriptors();
Set<CallableMemberDescriptor> overriddenMembers = getDirectlyOverriddenDeclarations((CallableMemberDescriptor) descriptor);
if (overriddenMembers.size() == 0) {
return;
}
@@ -331,7 +334,7 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
return "";
}
Set<? extends CallableMemberDescriptor> overriddenMembers = ((CallableMemberDescriptor)descriptor).getOverriddenDescriptors();
Set<CallableMemberDescriptor> overriddenMembers = getDirectlyOverriddenDeclarations((CallableMemberDescriptor) descriptor);
if (overriddenMembers.size() == 0) {
return "";
}
@@ -0,0 +1,13 @@
trait <lineMarker></lineMarker>A {
fun <lineMarker></lineMarker>f() {
}
}
trait <lineMarker></lineMarker>B : A
open class <lineMarker></lineMarker>C(b : B) : B by b, A {
}
class D(b : B) : C(b) {
override fun <lineMarker descr="<b>internal</b> <b>open</b> <b>fun</b> f(): jet.Unit <i>defined in</i> D<br/>overrides<br/><b>internal</b> <b>open</b> <b>fun</b> f(): jet.Unit <i>defined in</i> A"></lineMarker>f() {}
}
@@ -0,0 +1,13 @@
trait <lineMarker></lineMarker>A {
val <lineMarker></lineMarker>f: Int
get() = 3
}
trait <lineMarker></lineMarker>B : A
open class <lineMarker></lineMarker>C(b : B) : B by b, A {
}
class D(b : B) : C(b) {
override val <lineMarker descr="<b>internal</b> <b>open</b> <b>val</b> f: jet.Int <i>defined in</i> D<br/>overrides<br/><b>internal</b> <b>open</b> <b>val</b> f: jet.Int <i>defined in</i> A"></lineMarker>f: Int = 2
}
@@ -0,0 +1,11 @@
trait <lineMarker></lineMarker>A {
fun <lineMarker></lineMarker>f() {}
}
trait <lineMarker></lineMarker>B : A
trait <lineMarker></lineMarker>C : B, A
class SomeClass() : C {
override fun <lineMarker descr="<b>internal</b> <b>open</b> <b>fun</b> f(): jet.Unit <i>defined in</i> SomeClass<br/>overrides<br/><b>internal</b> <b>open</b> <b>fun</b> f(): jet.Unit <i>defined in</i> A"></lineMarker>f() {}
}
@@ -0,0 +1,13 @@
trait <lineMarker></lineMarker>A {
fun <lineMarker></lineMarker><lineMarker></lineMarker>f() {}
}
trait <lineMarker></lineMarker>B : A {
override fun <lineMarker></lineMarker>f() {}
}
trait <lineMarker></lineMarker>C : B, A
class SomeClass() : C {
override fun <lineMarker descr="<b>internal</b> <b>open</b> <b>fun</b> f(): jet.Unit <i>defined in</i> SomeClass<br/>overrides<br/><b>internal</b> <b>open</b> <b>fun</b> f(): jet.Unit <i>defined in</i> B"></lineMarker>f() {}
}
@@ -0,0 +1,12 @@
trait <lineMarker></lineMarker>A {
val <lineMarker></lineMarker>f: Int
get() = 2
}
trait <lineMarker></lineMarker>B : A
trait <lineMarker></lineMarker>C : B, A
class SomeClass() : C {
override val <lineMarker descr="<b>internal</b> <b>open</b> <b>val</b> f: jet.Int <i>defined in</i> SomeClass<br/>overrides<br/><b>internal</b> <b>open</b> <b>val</b> f: jet.Int <i>defined in</i> A"></lineMarker>f: Int = 4
}
@@ -49,6 +49,26 @@ public class OverrideImplementLineMarkerTest extends JetLightCodeInsightFixtureT
doTest();
}
public void testDelegatedFun() throws Exception {
doTest();
}
public void testFakeOverrideFun() throws Exception {
doTest();
}
public void testDelegatedProperty() throws Exception {
doTest();
}
public void testFakeOverrideProperty() throws Exception {
doTest();
}
public void testFakeOverrideFunWithMostRelevantImplementation() throws Exception {
doTest();
}
private void doTest() {
try {
myFixture.configureByFile(fileName());