diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionUtils.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionUtils.kt index b5347e7ee14..bb4083137ca 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionUtils.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionUtils.kt @@ -67,6 +67,7 @@ tailrec fun LookupElement.getUserDataDeep(key: Key): T? { enum class ItemPriority { DEFAULT, + IMPLEMENT, OVERRIDE, NAMED_PARAMETER } diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/OverridesCompletion.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/OverridesCompletion.kt index 8a50bbf0835..92abe35f3a0 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/OverridesCompletion.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/OverridesCompletion.kt @@ -77,7 +77,8 @@ class OverridesCompletion( val baseClassName = baseClass.name.asString() val baseIcon = (lookupElement.`object` as DeclarationLookupObject).getIcon(0) - val additionalIcon = if (descriptor.modality == Modality.ABSTRACT) + val isImplement = descriptor.modality == Modality.ABSTRACT + val additionalIcon = if (isImplement) AllIcons.Gutter.ImplementingMethod else AllIcons.Gutter.OverridingMethod @@ -94,6 +95,7 @@ class OverridesCompletion( super.renderElement(presentation) presentation.itemText = text + presentation.isItemTextBold = isImplement presentation.icon = icon presentation.clearTail() presentation.setTypeText(baseClassName, baseClassIcon) @@ -134,7 +136,7 @@ class OverridesCompletion( } } - lookupElement.assignPriority(ItemPriority.OVERRIDE) + lookupElement.assignPriority(if (isImplement) ItemPriority.IMPLEMENT else ItemPriority.OVERRIDE) collector.addElement(lookupElement) } diff --git a/idea/idea-completion/testData/basic/common/override/Generics.kt b/idea/idea-completion/testData/basic/common/override/Generics.kt index 79f6d002174..628e1fa94b2 100644 --- a/idea/idea-completion/testData/basic/common/override/Generics.kt +++ b/idea/idea-completion/testData/basic/common/override/Generics.kt @@ -7,6 +7,6 @@ class A : List, I { } // EXIST: { lookupString: "override", itemText: "override" } -// EXIST: { itemText: "override fun hashCode(): Int {...}", tailText: null, typeText: "Any" } -// EXIST: { itemText: "override fun foo(t: T): T {...}", tailText: null, typeText: "I" } -// EXIST: { itemText: "override operator fun get(index: Int): String {...}", tailText: null, typeText: "List" } +// EXIST: { itemText: "override fun hashCode(): Int {...}", tailText: null, typeText: "Any", attributes: "" } +// EXIST: { itemText: "override fun foo(t: T): T {...}", tailText: null, typeText: "I", attributes: "bold" } +// EXIST: { itemText: "override operator fun get(index: Int): String {...}", tailText: null, typeText: "List", attributes: "bold" } diff --git a/idea/idea-completion/testData/basic/common/override/InConstructorParameters.kt b/idea/idea-completion/testData/basic/common/override/InConstructorParameters.kt index 1d60449f189..c0a57fd79a3 100644 --- a/idea/idea-completion/testData/basic/common/override/InConstructorParameters.kt +++ b/idea/idea-completion/testData/basic/common/override/InConstructorParameters.kt @@ -15,8 +15,8 @@ open class Base2 : Base1() { class A(overr) : Base2(), I // EXIST: { lookupString: "override", itemText: "override" } -// EXIST: { itemText: "override val someVal: Int", tailText: null, typeText: "I" } -// EXIST: { itemText: "override var someVar: Int", tailText: null, typeText: "I" } -// EXIST: { itemText: "override val fromBase: String", tailText: null, typeText: "Base1" } +// EXIST: { itemText: "override val someVal: Int", tailText: null, typeText: "I", attributes: "bold" } +// EXIST: { itemText: "override var someVar: Int", tailText: null, typeText: "I", attributes: "bold" } +// EXIST: { itemText: "override val fromBase: String", tailText: null, typeText: "Base1", attributes: "" } // EXIST_JAVA_ONLY: { lookupString: "override: Override", itemText: "override: Override" } // NOTHING_ELSE diff --git a/idea/idea-completion/testData/basic/common/override/InConstructorParameters2.kt b/idea/idea-completion/testData/basic/common/override/InConstructorParameters2.kt index bf6d0f42623..e0f6d05c3b1 100644 --- a/idea/idea-completion/testData/basic/common/override/InConstructorParameters2.kt +++ b/idea/idea-completion/testData/basic/common/override/InConstructorParameters2.kt @@ -14,6 +14,6 @@ open class Base2 : Base1() { class A(some) : Base2(), I -// EXIST: { itemText: "override val someVal: Int", tailText: null, typeText: "I" } -// EXIST: { itemText: "override var someVar: Int", tailText: null, typeText: "I" } +// EXIST: { itemText: "override val someVal: Int", tailText: null, typeText: "I", attributes: "bold" } +// EXIST: { itemText: "override var someVar: Int", tailText: null, typeText: "I", attributes: "bold" } // NOTHING_ELSE diff --git a/idea/idea-completion/testData/basic/common/override/PreferImplementToOverride.kt b/idea/idea-completion/testData/basic/common/override/PreferImplementToOverride.kt new file mode 100644 index 00000000000..3357a17833e --- /dev/null +++ b/idea/idea-completion/testData/basic/common/override/PreferImplementToOverride.kt @@ -0,0 +1,16 @@ +interface I { + fun bbb() +} + +open class Base { + open fun aaa() +} + +class A : Base(), I { + overr +} + +// WITH_ORDER +// EXIST: { itemText: "override" } +// EXIST: { itemText: "override fun bbb() {...}" } +// EXIST: { itemText: "override fun aaa() {...}" } diff --git a/idea/idea-completion/testData/basic/common/override/SecondConstructorParameter.kt b/idea/idea-completion/testData/basic/common/override/SecondConstructorParameter.kt index 62f3223f566..403fa19bd35 100644 --- a/idea/idea-completion/testData/basic/common/override/SecondConstructorParameter.kt +++ b/idea/idea-completion/testData/basic/common/override/SecondConstructorParameter.kt @@ -6,6 +6,6 @@ interface Foo { class A(override val bar: Int, overr): Foo // EXIST: { lookupString: "override", itemText: "override" } -// EXIST: { itemText: "override val foo: Int", tailText: null, typeText: "Foo" } +// EXIST: { itemText: "override val foo: Int", tailText: null, typeText: "Foo", attributes: "bold" } // EXIST_JAVA_ONLY: { itemText: "override: Override", tailText: " (java.lang)" } // NOTHING_ELSE diff --git a/idea/idea-completion/testData/basic/common/override/Simple.kt b/idea/idea-completion/testData/basic/common/override/Simple.kt index a4f03501135..d298cb13e3c 100644 --- a/idea/idea-completion/testData/basic/common/override/Simple.kt +++ b/idea/idea-completion/testData/basic/common/override/Simple.kt @@ -16,9 +16,9 @@ class A : Base2(), I { } // EXIST: { lookupString: "override", itemText: "override" } -// EXIST: { itemText: "override fun bar() {...}", lookupString: "override", tailText: null, typeText: "Base1" } -// EXIST: { itemText: "override operator fun equals(other: Any?): Boolean {...}", lookupString: "override", tailText: null, typeText: "Any" } -// EXIST: { itemText: "override fun foo() {...}", lookupString: "override", tailText: null, typeText: "I" } -// EXIST: { itemText: "override fun hashCode(): Int {...}", lookupString: "override", tailText: null, typeText: "Any" } -// EXIST: { itemText: "override val someVal: Int", lookupString: "override", tailText: null, typeText: "I" } -// EXIST: { itemText: "override var someVar: Int", lookupString: "override", tailText: null, typeText: "I" } +// EXIST: { itemText: "override fun bar() {...}", lookupString: "override", tailText: null, typeText: "Base1", attributes: "" } +// EXIST: { itemText: "override operator fun equals(other: Any?): Boolean {...}", lookupString: "override", tailText: null, typeText: "Any", attributes: "" } +// EXIST: { itemText: "override fun foo() {...}", lookupString: "override", tailText: null, typeText: "I", attributes: "bold" } +// EXIST: { itemText: "override fun hashCode(): Int {...}", lookupString: "override", tailText: null, typeText: "Any", attributes: "" } +// EXIST: { itemText: "override val someVal: Int", lookupString: "override", tailText: null, typeText: "I", attributes: "bold" } +// EXIST: { itemText: "override var someVar: Int", lookupString: "override", tailText: null, typeText: "I", attributes: "bold" } diff --git a/idea/idea-completion/testData/basic/common/override/TypeFunctionName.kt b/idea/idea-completion/testData/basic/common/override/TypeFunctionName.kt index d14e6c0a045..faabb1f0456 100644 --- a/idea/idea-completion/testData/basic/common/override/TypeFunctionName.kt +++ b/idea/idea-completion/testData/basic/common/override/TypeFunctionName.kt @@ -17,6 +17,6 @@ class A : Base2(), I { // ABSENT: { itemText: "override" } // ABSENT: { itemText: "override fun bar() {...}" } -// EXIST: { itemText: "override fun someFun() {...}", lookupString: "override", allLookupStrings: "override, someFun", tailText: null, typeText: "I" } -// EXIST: { itemText: "override val someVal: Int", lookupString: "override", allLookupStrings: "override, someVal", tailText: null, typeText: "I" } -// EXIST: { itemText: "override var someVar: Int", lookupString: "override", allLookupStrings: "override, someVar", tailText: null, typeText: "I" } +// EXIST: { itemText: "override fun someFun() {...}", lookupString: "override", allLookupStrings: "override, someFun", tailText: null, typeText: "I", attributes: "bold" } +// EXIST: { itemText: "override val someVal: Int", lookupString: "override", allLookupStrings: "override, someVal", tailText: null, typeText: "I", attributes: "bold" } +// EXIST: { itemText: "override var someVar: Int", lookupString: "override", allLookupStrings: "override, someVar", tailText: null, typeText: "I", attributes: "bold" } diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java index f803d86c9f3..1fec628203a 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java @@ -1683,6 +1683,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("PreferImplementToOverride.kt") + public void testPreferImplementToOverride() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/override/PreferImplementToOverride.kt"); + doTest(fileName); + } + @TestMetadata("SecondConstructorParameter.kt") public void testSecondConstructorParameter() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/override/SecondConstructorParameter.kt"); diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java index 1a0070f53bc..5a43dd1cbcb 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java @@ -1683,6 +1683,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("PreferImplementToOverride.kt") + public void testPreferImplementToOverride() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/override/PreferImplementToOverride.kt"); + doTest(fileName); + } + @TestMetadata("SecondConstructorParameter.kt") public void testSecondConstructorParameter() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/override/SecondConstructorParameter.kt");