A better heuristics is declaration implemented or overriden
This commit is contained in:
@@ -227,8 +227,12 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
|
||||
if (declaration.hasModifier(JetTokens.ABSTRACT_KEYWORD)) return true;
|
||||
|
||||
PsiElement parent = declaration.getParent();
|
||||
parent = (parent instanceof JetClassBody) ? parent.getParent() : parent;
|
||||
|
||||
if (parent instanceof JetClass) {
|
||||
return ((JetClass) parent).isTrait();
|
||||
return ((JetClass) parent).isTrait() &&
|
||||
(!(declaration instanceof JetDeclarationWithBody) || !((JetDeclarationWithBody)declaration).hasBody()) &&
|
||||
(!(declaration instanceof JetWithExpressionInitializer) || !((JetWithExpressionInitializer)declaration).hasInitializer());
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -3,9 +3,9 @@ package sample
|
||||
trait <lineMarker descr="*"></lineMarker>S<T> {
|
||||
fun <lineMarker descr="<html><body>Is implemented in <br> sample.S2</body></html>"></lineMarker>foo(t: T): T
|
||||
|
||||
val <lineMarker descr="<html><body>Is overridden in <br/> sample.S2</body></html>"></lineMarker>some: T? get
|
||||
val <lineMarker descr="<html><body>Is implemented in <br/> sample.S2</body></html>"></lineMarker>some: T? get
|
||||
|
||||
var <lineMarker descr="<html><body>Is overridden in <br/> sample.S2</body></html>"></lineMarker>other: T?
|
||||
var <lineMarker descr="<html><body>Is implemented in <br/> sample.S2</body></html>"></lineMarker>other: T?
|
||||
get
|
||||
set
|
||||
}
|
||||
|
||||
@@ -2,10 +2,10 @@ trait <lineMarker descr="*"></lineMarker>A {
|
||||
fun <lineMarker descr="<html><body>Is implemented in <br> C</body></html>"></lineMarker>foo(): String = "A"
|
||||
|
||||
// TODO: B shoudn't be mentioned
|
||||
val <lineMarker descr="<html><body>Is overridden in <br/> B<br> C</body></html>"></lineMarker>some: String? get() = null
|
||||
val <lineMarker descr="<html><body>Is implemented in <br/> B<br> C</body></html>"></lineMarker>some: String? get() = null
|
||||
|
||||
// TODO: B shoudn't be mentioned
|
||||
var <lineMarker descr="<html><body>Is overridden in <br/> B<br> C</body></html>"></lineMarker>other: String?
|
||||
var <lineMarker descr="<html><body>Is implemented in <br/> B<br> C</body></html>"></lineMarker>other: String?
|
||||
get() = null
|
||||
set(value) {}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
// TODO: Declarations have no implementation and should be considered as "overloaded"
|
||||
trait <lineMarker descr="*"></lineMarker>First {
|
||||
val <lineMarker descr="<html><body>Is implemented in <br/> Second</body></html>"></lineMarker>some: Int
|
||||
var <lineMarker descr="<html><body>Is implemented in <br/> Second</body></html>"></lineMarker>other: String
|
||||
get
|
||||
set
|
||||
|
||||
fun <lineMarker descr="<html><body>Is implemented in <br> Second</body></html>"></lineMarker>foo()
|
||||
}
|
||||
|
||||
trait Second : First {
|
||||
override val <lineMarker descr="Overrides property in 'First'"></lineMarker>some: Int
|
||||
override var <lineMarker descr="Overrides property in 'First'"></lineMarker>other: String
|
||||
override fun <lineMarker descr="Overrides function in 'First'"></lineMarker>foo()
|
||||
}
|
||||
@@ -128,6 +128,12 @@ public class LineMarkersTestGenerated extends AbstractLineMarkersTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("OverridenTraitDeclarations.kt")
|
||||
public void testOverridenTraitDeclarations() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/codeInsight/lineMarker/OverridenTraitDeclarations.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("OverridingTooltipOnDefaultTraitImpl.kt")
|
||||
public void testOverridingTooltipOnDefaultTraitImpl() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/codeInsight/lineMarker/OverridingTooltipOnDefaultTraitImpl.kt");
|
||||
|
||||
Reference in New Issue
Block a user