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:
+8
@@ -0,0 +1,8 @@
|
|||||||
|
interface Interface {
|
||||||
|
var field: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
expect class SClass : Interface {
|
||||||
|
override<caret>
|
||||||
|
}
|
||||||
|
// ELEMENT_TEXT: "override var field: Int"
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
interface Interface {
|
||||||
|
var field: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
expect class SClass : Interface {
|
||||||
|
override var field: Int<caret>
|
||||||
|
}
|
||||||
|
// ELEMENT_TEXT: "override var field: Int"
|
||||||
+5
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-8
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user