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);
}
@TestMetadata("ExpectClassValOverride.kt")
public void testExpectClassValOverride() throws Exception {
runTest("idea/idea-completion/testData/handlers/basic/override/ExpectClassValOverride.kt");
}
@TestMetadata("ImplementFunction.kt")
public void testImplementFunction() throws Exception {
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
}
@@ -213,4 +214,4 @@ fun <T : KtDeclaration> insertMembersAfter(
fun <T : KtDeclaration> insertMember(editor: Editor?, classOrObject: KtClassOrObject, declaration: T, anchor: PsiElement? = null): T {
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 {
val newDescriptor = descriptor.wrap()
val body = buildString {
append("\nget()")
append(" = ")
append(generateUnsupportedOrSuperCall(project, descriptor, bodyType))
if (descriptor.isVar) {
append("\nset(value) {}")
}
}
val body =
if (bodyType != OverrideMemberChooserObject.BodyType.NO_BODY) {
buildString {
append("\nget()")
append(" = ")
append(generateUnsupportedOrSuperCall(project, descriptor, bodyType))
if (descriptor.isVar) {
append("\nset(value) {}")
}
}
} else ""
return KtPsiFactory(project).createProperty(OVERRIDE_RENDERER.render(newDescriptor) + body)
}
@@ -1,9 +1,9 @@
// WITH_RUNTIME
// DISABLE-ERRORS
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
}
}
@@ -1,14 +1,14 @@
// WITH_RUNTIME
// DISABLE-ERRORS
interface T<X> {
val <caret>foo: X
val foo: X
}
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
}
<caret>class A(override val foo: Int) : I
class A(override val foo: Int<caret>) : I