Override completion right after override modifier

#KT-25312 Fixed
This commit is contained in:
Alexander Podkhalyuzin
2018-09-11 14:39:52 +03:00
parent 073f4f51fd
commit ed8aad6149
4 changed files with 35 additions and 2 deletions
@@ -112,12 +112,24 @@ class OverridesCompletion(
else -> "dummy() {}"
}
val dummyMemberText = dummyMemberHead + dummyMemberTail
context.document.replaceString(context.startOffset, context.tailOffset, dummyMemberText)
val override = KtTokens.OVERRIDE_KEYWORD.value
tailrec fun calcStartOffset(startOffset: Int, diff: Int = 0): Int {
if (context.document.text[startOffset - 1].isWhitespace()) {
return calcStartOffset(startOffset - 1, diff + 1)
} else if (context.document.text.substring(startOffset - override.length, startOffset) == override) {
return startOffset - override.length
} else return diff + startOffset
}
val startOffset = calcStartOffset(context.startOffset)
val tailOffset = context.tailOffset
context.document.replaceString(startOffset, tailOffset, dummyMemberText)
val psiDocumentManager = PsiDocumentManager.getInstance(context.project)
psiDocumentManager.commitAllDocuments()
val dummyMember = context.file.findElementAt(context.startOffset)!!.getStrictParentOfType<KtNamedDeclaration>()!!
val dummyMember = context.file.findElementAt(startOffset)!!.getStrictParentOfType<KtNamedDeclaration>()!!
// keep original modifiers
val modifierList = KtPsiFactory(context.project).createModifierList(dummyMember.modifierList!!.text)
@@ -0,0 +1,8 @@
interface Interface {
fun funA()
}
expect class SClass : Interface { // there is no error highlighting about unimplemented members, see KT-25044
override fu<caret>
}
// ELEMENT_TEXT: "override fun funA() {...}"
@@ -0,0 +1,8 @@
interface Interface {
fun funA()
}
expect class SClass : Interface { // there is no error highlighting about unimplemented members, see KT-25044
override fun funA()<caret>
}
// ELEMENT_TEXT: "override fun funA() {...}"
@@ -521,6 +521,11 @@ public class BasicCompletionHandlerTestGenerated extends AbstractBasicCompletion
runTest("idea/idea-completion/testData/handlers/basic/override/KeepModifiersBefore.kt");
}
@TestMetadata("kt25312.kt")
public void testKt25312() throws Exception {
runTest("idea/idea-completion/testData/handlers/basic/override/kt25312.kt");
}
@TestMetadata("OverrideFunction.kt")
public void testOverrideFunction() throws Exception {
runTest("idea/idea-completion/testData/handlers/basic/override/OverrideFunction.kt");