KT-9478 No override completion for second parameter in primary constructor

#KT-9478 Fixed
 #KT-9386 Fixed
This commit is contained in:
Valentin Kipyatkov
2015-10-12 22:08:07 +03:00
parent 434be3be21
commit e27528477f
7 changed files with 102 additions and 12 deletions
@@ -122,37 +122,44 @@ object KeywordCompletion {
var parent = position.getParent()
var prevParent = position
while (parent != null) {
val _parent = parent
when (_parent) {
when (parent) {
is JetBlockExpression -> {
return buildFilterWithContext("fun foo() { ", prevParent, position)
}
is JetWithExpressionInitializer -> {
val initializer = _parent.getInitializer()
val initializer = parent.getInitializer()
if (prevParent == initializer) {
return buildFilterWithContext("val v = ", initializer!!, position)
}
}
is JetParameter -> {
val default = _parent.getDefaultValue()
val default = parent.getDefaultValue()
if (prevParent == default) {
return buildFilterWithContext("val v = ", default!!, position)
}
}
}
if (_parent is JetDeclaration) {
val scope = _parent.getParent()
if (parent is JetDeclaration) {
val scope = parent.parent
when (scope) {
is JetClassOrObject -> return buildFilterWithReducedContext("class X { ", _parent, position)
is JetFile -> return buildFilterWithReducedContext("", _parent, position)
is JetClassOrObject -> {
if (parent is JetPrimaryConstructor) {
return buildFilterWithReducedContext("class X ", parent, position)
}
else {
return buildFilterWithReducedContext("class X { ", parent, position)
}
}
is JetFile -> return buildFilterWithReducedContext("", parent, position)
}
}
prevParent = _parent
parent = _parent.getParent()
prevParent = parent
parent = parent.parent
}
return buildFilterWithReducedContext("", null, position)
@@ -193,11 +200,21 @@ object KeywordCompletion {
else -> {
if (elementAt.parent !is JetModifierList) return true
val possibleTargets = when (elementAt.parent.parent) {
is JetParameter -> listOf(VALUE_PARAMETER)
val declaration = elementAt.parent.parent
val possibleTargets = when (declaration) {
is JetParameter -> {
if (declaration.ownerFunction is JetPrimaryConstructor)
listOf(VALUE_PARAMETER, MEMBER_PROPERTY)
else
listOf(VALUE_PARAMETER)
}
is JetTypeParameter -> listOf(TYPE_PARAMETER)
is JetClassBody -> listOf(CLASS_ONLY, INTERFACE, OBJECT, ENUM_CLASS, ANNOTATION_CLASS, INNER_CLASS, MEMBER_FUNCTION, MEMBER_PROPERTY, FUNCTION, PROPERTY)
is JetFile -> listOf(CLASS_ONLY, INTERFACE, OBJECT, ENUM_CLASS, ANNOTATION_CLASS, TOP_LEVEL_FUNCTION, TOP_LEVEL_PROPERTY, FUNCTION, PROPERTY)
else -> return true
}
val modifierTargets = ModifierCheckerCore.possibleTargetMap[keywordTokenType] ?: return true
@@ -0,0 +1,11 @@
interface Foo {
val foo: Int
val bar: Int
}
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_JAVA_ONLY: { itemText: "override: Override", tailText: " (java.lang)" }
// NOTHING_ELSE
@@ -0,0 +1,22 @@
package TestData
class TestSample(<caret>)
// EXIST: vararg
// EXIST: noinline
// EXIST: crossinline
// EXIST: val
// EXIST: var
// EXIST: override
// EXIST: open
// EXIST: final
// EXIST: public
// EXIST: private
// EXIST: protected
// EXIST: internal
/* TODO: keywords below should not be here*/
// EXIST: abstract
// EXIST: const
// EXIST: lateinit
// NOTHING_ELSE
@@ -0,0 +1,16 @@
annotation class Ann
class Completion(@get:Ann val p1: String, @<caret>)
// EXIST: get
// EXIST: set
// EXIST: field
// EXIST: param
// EXIST: setparam
// EXIST: property
/*TODO: keywords below should not be here*/
// EXIST: val
// EXIST: var
// EXIST: receiver
// NOTHING_ELSE
@@ -1635,6 +1635,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
doTest(fileName);
}
@TestMetadata("SecondConstructorParameter.kt")
public void testSecondConstructorParameter() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/override/SecondConstructorParameter.kt");
doTest(fileName);
}
@TestMetadata("Simple.kt")
public void testSimple() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/override/Simple.kt");
@@ -1635,6 +1635,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
doTest(fileName);
}
@TestMetadata("SecondConstructorParameter.kt")
public void testSecondConstructorParameter() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/override/SecondConstructorParameter.kt");
doTest(fileName);
}
@TestMetadata("Simple.kt")
public void testSimple() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/override/Simple.kt");
@@ -227,6 +227,12 @@ public class KeywordCompletionTestGenerated extends AbstractKeywordCompletionTes
doTest(fileName);
}
@TestMetadata("InPrimaryConstructorParametersList.kt")
public void testInPrimaryConstructorParametersList() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/keywords/InPrimaryConstructorParametersList.kt");
doTest(fileName);
}
@TestMetadata("InPropertyInitializer.kt")
public void testInPropertyInitializer() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/keywords/InPropertyInitializer.kt");
@@ -472,4 +478,10 @@ public class KeywordCompletionTestGenerated extends AbstractKeywordCompletionTes
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/keywords/TopScope.kt");
doTest(fileName);
}
@TestMetadata("UseSiteTargetForPrimaryConstructorParameter.kt")
public void testUseSiteTargetForPrimaryConstructorParameter() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/keywords/UseSiteTargetForPrimaryConstructorParameter.kt");
doTest(fileName);
}
}