diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java b/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java index ce5d912b1c0..6ad67e4d3ba 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java @@ -63,6 +63,7 @@ public class JetLineMarkerProvider implements LineMarkerProvider { public static final Icon OVERRIDING_MARK = IconLoader.getIcon("/gutter/overridingMethod.png"); public static final Icon IMPLEMENTING_MARK = IconLoader.getIcon("/gutter/implementingMethod.png"); protected static final Icon OVERRIDDEN_MARK = IconLoader.getIcon("/gutter/overridenMethod.png"); + protected static final Icon IMPLEMENTED_MARK = IconLoader.getIcon("/gutter/implementedMethod.png"); private static final Function SUBCLASSED_CLASS_TOOLTIP_ADAPTER = new Function() { @Override @@ -100,8 +101,6 @@ public class JetLineMarkerProvider implements LineMarkerProvider { @Override public LineMarkerInfo getLineMarkerInfo(@NotNull final PsiElement element) { - // TODO this is a workaround for CME in external annotations code, should be removed after updating to IDEA 122.145+ (KT-2666) - if (ApplicationManager.getApplication().isUnitTestMode()) return null; JetFile file = (JetFile)element.getContainingFile(); if (file == null) return null; @@ -235,8 +234,6 @@ public class JetLineMarkerProvider implements LineMarkerProvider { @Override public void collectSlowLineMarkers(@NotNull List elements, @NotNull Collection result) { - // TODO this is a workaround for CME in external annotations code, should be removed after updating to IDEA 122.145+ (KT-2666) - if (ApplicationManager.getApplication().isUnitTestMode()) return; if (elements.isEmpty() || DumbService.getInstance(elements.get(0).getProject()).isDumb()) { return; @@ -249,7 +246,10 @@ public class JetLineMarkerProvider implements LineMarkerProvider { } private static void collectInheritingClasses(JetClass element, Collection result) { - if (!element.hasModifier(JetTokens.OPEN_KEYWORD)) { + boolean isTrait = element.isTrait(); + if (!(isTrait || + element.hasModifier(JetTokens.OPEN_KEYWORD) || + element.hasModifier(JetTokens.ABSTRACT_KEYWORD))) { return; } PsiClass lightClass = LightClassUtil.createLightClass(element); @@ -260,7 +260,8 @@ public class JetLineMarkerProvider implements LineMarkerProvider { if (inheritor != null) { final PsiElement nameIdentifier = element.getNameIdentifier(); PsiElement anchor = nameIdentifier != null ? nameIdentifier : element; - result.add(new LineMarkerInfo(anchor, anchor.getTextOffset(), OVERRIDDEN_MARK, Pass.UPDATE_OVERRIDEN_MARKERS, + Icon mark = isTrait ? IMPLEMENTED_MARK : OVERRIDDEN_MARK; + result.add(new LineMarkerInfo(anchor, anchor.getTextOffset(), mark, Pass.UPDATE_OVERRIDEN_MARKERS, SUBCLASSED_CLASS_TOOLTIP_ADAPTER, SUBCLASSED_CLASS_NAVIGATION_HANDLER)); } } diff --git a/idea/testData/codeInsight/lineMarker/Class.kt b/idea/testData/codeInsight/lineMarker/Class.kt new file mode 100644 index 00000000000..ffad6b67f74 --- /dev/null +++ b/idea/testData/codeInsight/lineMarker/Class.kt @@ -0,0 +1,9 @@ +open class A { + open fun a(){ + } +} + +class B:A(){ + override fun a(){ + } +} \ No newline at end of file diff --git a/idea/testData/codeInsight/lineMarker/Trait.kt b/idea/testData/codeInsight/lineMarker/Trait.kt new file mode 100644 index 00000000000..a2ea96d8bab --- /dev/null +++ b/idea/testData/codeInsight/lineMarker/Trait.kt @@ -0,0 +1,9 @@ +trait A { + fun a(){ + } +} + +class B :A { + override fun a(){ + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/PluginTestCaseBase.java b/idea/tests/org/jetbrains/jet/plugin/PluginTestCaseBase.java index 9d4d5d9c068..69590d87ee8 100644 --- a/idea/tests/org/jetbrains/jet/plugin/PluginTestCaseBase.java +++ b/idea/tests/org/jetbrains/jet/plugin/PluginTestCaseBase.java @@ -27,11 +27,14 @@ import org.jetbrains.jet.JetTestCaseBuilder; import org.jetbrains.jet.codegen.forTestCompile.ForTestPackJdkAnnotations; public class PluginTestCaseBase { + + public static final String TEST_DATA_PROJECT_RELATIVE = "/idea/testData"; + private PluginTestCaseBase() { } public static String getTestDataPathBase() { - return JetTestCaseBuilder.getHomeDirectory() + "/idea/testData"; + return JetTestCaseBuilder.getHomeDirectory() + TEST_DATA_PROJECT_RELATIVE; } public static Sdk jdkFromIdeaHome() { diff --git a/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementLineMarkerTest.java b/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementLineMarkerTest.java new file mode 100644 index 00000000000..4c2e651aeb4 --- /dev/null +++ b/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementLineMarkerTest.java @@ -0,0 +1,58 @@ +/* + * Copyright 2010-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.codeInsight; + +import com.intellij.codeInsight.daemon.LineMarkerInfo; +import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerImpl; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; +import org.jetbrains.jet.plugin.PluginTestCaseBase; + +import java.util.List; + +public class OverrideImplementLineMarkerTest extends LightCodeInsightFixtureTestCase { + + @Override + protected String getBasePath() { + return PluginTestCaseBase.TEST_DATA_PROJECT_RELATIVE + "/codeInsight/lineMarker"; + } + + public void testTrait() throws Throwable { + doSimpleTest(2); + } + + public void testClass() throws Throwable { + doSimpleTest(2); + } + + private void doSimpleTest(int count) throws Throwable { + myFixture.configureByFile(getTestName(false) + ".kt"); + doTest(count); + } + + private void doTest(int count) { + final Editor editor = myFixture.getEditor(); + final Project project = myFixture.getProject(); + + myFixture.doHighlighting(); + + final List infoList = DaemonCodeAnalyzerImpl.getLineMarkers(editor.getDocument(), project); + assertNotNull(infoList); + assertEquals(count, infoList.size()); + } +}