Override completion in expect class should behave differently

Caret placement is at the end of new fun/property

#KT-25313 Fixed
This commit is contained in:
Alexander Podkhalyuzin
2018-09-07 23:15:43 +03:00
parent d571d0ad51
commit baa0f2dc1b
8 changed files with 40 additions and 15 deletions
@@ -0,0 +1,8 @@
interface Interface {
var field: Int
}
expect class SClass : Interface {
override<caret>
}
// ELEMENT_TEXT: "override var field: Int"
@@ -0,0 +1,8 @@
interface Interface {
var field: Int
}
expect class SClass : Interface {
override var field: Int<caret>
}
// ELEMENT_TEXT: "override var field: Int"
@@ -491,6 +491,11 @@ public class BasicCompletionHandlerTestGenerated extends AbstractBasicCompletion
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/idea-completion/testData/handlers/basic/override"), Pattern.compile("^([^.]+)\\.kt$"), TargetBackend.ANY, true); KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/idea-completion/testData/handlers/basic/override"), Pattern.compile("^([^.]+)\\.kt$"), TargetBackend.ANY, true);
} }
@TestMetadata("ExpectClassValOverride.kt")
public void testExpectClassValOverride() throws Exception {
runTest("idea/idea-completion/testData/handlers/basic/override/ExpectClassValOverride.kt");
}
@TestMetadata("ImplementFunction.kt") @TestMetadata("ImplementFunction.kt")
public void testImplementFunction() throws Exception { public void testImplementFunction() throws Exception {
runTest("idea/idea-completion/testData/handlers/basic/override/ImplementFunction.kt"); runTest("idea/idea-completion/testData/handlers/basic/override/ImplementFunction.kt");
@@ -96,6 +96,7 @@ private fun moveCaretIntoGeneratedElementDocumentUnblocked(editor: Editor, eleme
} }
} }
editor.moveCaret(element.endOffset)
return false return false
} }
@@ -213,4 +214,4 @@ fun <T : KtDeclaration> insertMembersAfter(
fun <T : KtDeclaration> insertMember(editor: Editor?, classOrObject: KtClassOrObject, declaration: T, anchor: PsiElement? = null): T { fun <T : KtDeclaration> insertMember(editor: Editor?, classOrObject: KtClassOrObject, declaration: T, anchor: PsiElement? = null): T {
return insertMembersAfter(editor, classOrObject, listOf(declaration), anchor).single() return insertMembersAfter(editor, classOrObject, listOf(declaration), anchor).single()
} }
@@ -192,14 +192,17 @@ private fun FunctionDescriptor.wrap(): FunctionDescriptor {
private fun generateProperty(project: Project, descriptor: PropertyDescriptor, bodyType: OverrideMemberChooserObject.BodyType): KtProperty { private fun generateProperty(project: Project, descriptor: PropertyDescriptor, bodyType: OverrideMemberChooserObject.BodyType): KtProperty {
val newDescriptor = descriptor.wrap() val newDescriptor = descriptor.wrap()
val body = buildString { val body =
append("\nget()") if (bodyType != OverrideMemberChooserObject.BodyType.NO_BODY) {
append(" = ") buildString {
append(generateUnsupportedOrSuperCall(project, descriptor, bodyType)) append("\nget()")
if (descriptor.isVar) { append(" = ")
append("\nset(value) {}") append(generateUnsupportedOrSuperCall(project, descriptor, bodyType))
} if (descriptor.isVar) {
} append("\nset(value) {}")
}
}
} else ""
return KtPsiFactory(project).createProperty(OVERRIDE_RENDERER.render(newDescriptor) + body) return KtPsiFactory(project).createProperty(OVERRIDE_RENDERER.render(newDescriptor) + body)
} }
@@ -1,9 +1,9 @@
// WITH_RUNTIME // WITH_RUNTIME
// DISABLE-ERRORS // DISABLE-ERRORS
interface T<X> { interface T<X> {
val <caret>foo: X val foo: X
} }
enum class E(override val foo: Int) : T<Int> { enum class E(override val foo: Int<caret>) : T<Int> {
A, B, C A, B, C
} }
@@ -1,14 +1,14 @@
// WITH_RUNTIME // WITH_RUNTIME
// DISABLE-ERRORS // DISABLE-ERRORS
interface T<X> { interface T<X> {
val <caret>foo: X val foo: X
} }
class U(override val foo: String) : T<String> { class U(override val foo: String) : T<String> {
} }
class V(override val foo: Int) : T<Int> { class V(override val foo: Int<caret>) : T<Int> {
} }
@@ -3,4 +3,4 @@ interface I {
val foo: Int val foo: Int
} }
<caret>class A(override val foo: Int) : I class A(override val foo: Int<caret>) : I