KT-9688 Completion of methods to override: prefer those that need to be implemented

#KT-9688 Fixed
This commit is contained in:
Valentin Kipyatkov
2015-10-27 21:53:51 +03:00
parent acc451bc54
commit 87f68f3332
11 changed files with 51 additions and 20 deletions
@@ -67,6 +67,7 @@ tailrec fun <T : Any> LookupElement.getUserDataDeep(key: Key<T>): T? {
enum class ItemPriority {
DEFAULT,
IMPLEMENT,
OVERRIDE,
NAMED_PARAMETER
}
@@ -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)
}
@@ -7,6 +7,6 @@ class A<T> : List<String>, I<T> {
}
// 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" }
@@ -15,8 +15,8 @@ open class Base2 : Base1() {
class A(overr<caret>) : 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
@@ -14,6 +14,6 @@ open class Base2 : Base1() {
class A(some<caret>) : 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
@@ -0,0 +1,16 @@
interface I {
fun bbb()
}
open class Base {
open fun aaa()
}
class A : Base(), I {
overr<caret>
}
// WITH_ORDER
// EXIST: { itemText: "override" }
// EXIST: { itemText: "override fun bbb() {...}" }
// EXIST: { itemText: "override fun aaa() {...}" }
@@ -6,6 +6,6 @@ interface Foo {
class A(override val bar: Int, overr<caret>): 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
@@ -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" }
@@ -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" }
@@ -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");
@@ -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");