Override completion right after override modifier
#KT-25312 Fixed
This commit is contained in:
+14
-2
@@ -112,12 +112,24 @@ class OverridesCompletion(
|
|||||||
else -> "dummy() {}"
|
else -> "dummy() {}"
|
||||||
}
|
}
|
||||||
val dummyMemberText = dummyMemberHead + dummyMemberTail
|
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)
|
val psiDocumentManager = PsiDocumentManager.getInstance(context.project)
|
||||||
psiDocumentManager.commitAllDocuments()
|
psiDocumentManager.commitAllDocuments()
|
||||||
|
|
||||||
val dummyMember = context.file.findElementAt(context.startOffset)!!.getStrictParentOfType<KtNamedDeclaration>()!!
|
val dummyMember = context.file.findElementAt(startOffset)!!.getStrictParentOfType<KtNamedDeclaration>()!!
|
||||||
|
|
||||||
// keep original modifiers
|
// keep original modifiers
|
||||||
val modifierList = KtPsiFactory(context.project).createModifierList(dummyMember.modifierList!!.text)
|
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() {...}"
|
||||||
+5
@@ -521,6 +521,11 @@ public class BasicCompletionHandlerTestGenerated extends AbstractBasicCompletion
|
|||||||
runTest("idea/idea-completion/testData/handlers/basic/override/KeepModifiersBefore.kt");
|
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")
|
@TestMetadata("OverrideFunction.kt")
|
||||||
public void testOverrideFunction() throws Exception {
|
public void testOverrideFunction() throws Exception {
|
||||||
runTest("idea/idea-completion/testData/handlers/basic/override/OverrideFunction.kt");
|
runTest("idea/idea-completion/testData/handlers/basic/override/OverrideFunction.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user