From f0e7435254d6c3867abdacb6c6626609f5f4998d Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 1 Oct 2014 15:09:56 +0400 Subject: [PATCH] A better heuristics is declaration implemented or overriden --- .../plugin/highlighter/JetLineMarkerProvider.java | 6 +++++- .../lineMarker/FakeOverrideForClasses.kt | 4 ++-- .../FakeOverridesForTraitFunWithImpl.kt | 4 ++-- .../lineMarker/OverridenTraitDeclarations.kt | 15 +++++++++++++++ .../codeInsight/LineMarkersTestGenerated.java | 6 ++++++ 5 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 idea/testData/codeInsight/lineMarker/OverridenTraitDeclarations.kt diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java b/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java index 22544bde493..06a8e68168b 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java @@ -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; diff --git a/idea/testData/codeInsight/lineMarker/FakeOverrideForClasses.kt b/idea/testData/codeInsight/lineMarker/FakeOverrideForClasses.kt index 848bf691e33..49f35fcc94f 100644 --- a/idea/testData/codeInsight/lineMarker/FakeOverrideForClasses.kt +++ b/idea/testData/codeInsight/lineMarker/FakeOverrideForClasses.kt @@ -3,9 +3,9 @@ package sample trait S { fun foo(t: T): T - val some: T? get + val some: T? get - var other: T? + var other: T? get set } diff --git a/idea/testData/codeInsight/lineMarker/FakeOverridesForTraitFunWithImpl.kt b/idea/testData/codeInsight/lineMarker/FakeOverridesForTraitFunWithImpl.kt index bb42b7011d0..005b55efd75 100644 --- a/idea/testData/codeInsight/lineMarker/FakeOverridesForTraitFunWithImpl.kt +++ b/idea/testData/codeInsight/lineMarker/FakeOverridesForTraitFunWithImpl.kt @@ -2,10 +2,10 @@ trait A { fun foo(): String = "A" // TODO: B shoudn't be mentioned - val some: String? get() = null + val some: String? get() = null // TODO: B shoudn't be mentioned - var other: String? + var other: String? get() = null set(value) {} } diff --git a/idea/testData/codeInsight/lineMarker/OverridenTraitDeclarations.kt b/idea/testData/codeInsight/lineMarker/OverridenTraitDeclarations.kt new file mode 100644 index 00000000000..a6a502a3b64 --- /dev/null +++ b/idea/testData/codeInsight/lineMarker/OverridenTraitDeclarations.kt @@ -0,0 +1,15 @@ +// TODO: Declarations have no implementation and should be considered as "overloaded" +trait First { + val some: Int + var other: String + get + set + + fun foo() +} + +trait Second : First { + override val some: Int + override var other: String + override fun foo() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/codeInsight/LineMarkersTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/codeInsight/LineMarkersTestGenerated.java index cadbe8835da..cb620023f97 100644 --- a/idea/tests/org/jetbrains/jet/plugin/codeInsight/LineMarkersTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/codeInsight/LineMarkersTestGenerated.java @@ -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");