From c89d1af9fa44c07492e4d970fc84f67b85aaa518 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Tue, 26 Feb 2019 18:45:12 +0300 Subject: [PATCH] Improve Create property from Usage Place generated property next to other properties #KT-14886 Fixed --- .../callableBuilder/CallableBuilder.kt | 15 +++++++---- .../extensionPropertyGetter.kt.after | 12 ++++----- .../extensionPropertySetter.kt.after | 14 +++++------ .../abstract/classNoExplicitReceiver.kt.after | 4 +-- ...explicitReceiverOfContainingClass.kt.after | 4 +-- .../interfaceNoExplicitReceiver.kt.after | 4 +-- ...nPropertyOnTypeFromAnotherPackage.after.kt | 12 ++++----- .../extensionValOnGroovyType.after.kt | 8 +++--- .../property/extensionValOnJavaType.after.kt | 8 +++--- ...ensionWithTypeParameterAsReceiver.kt.after | 12 ++++----- ...classMemberLateinitVar.after.Dependency.kt | 2 +- .../classMemberVar.after.Dependency.kt | 2 +- .../topLevelVar.after.Dependency.kt | 4 +-- .../property/localValDelegateRuntime.kt.after | 4 +-- .../property/nullableReceiver.kt.after | 12 ++++----- .../property/quotedName.kt.after | 6 ++--- .../property/recursiveBound.kt.after | 6 ++--- .../refInStringTemplateRuntime.kt.after | 6 ++--- .../property/thisInClassAlreadyExistsAfter.kt | 12 +++++++++ .../thisInClassAlreadyExistsAfter.kt.after | 13 ++++++++++ .../thisInClassAlreadyExistsAfterAndBefore.kt | 14 +++++++++++ ...nClassAlreadyExistsAfterAndBefore.kt.after | 15 +++++++++++ .../thisInClassAlreadyExistsBefore.kt | 12 +++++++++ .../thisInClassAlreadyExistsBefore.kt.after | 13 ++++++++++ .../property/topLevelValNoReceiver.kt.after | 4 +-- ...topLevelValNoReceiverAlreadyExistsAfter.kt | 8 ++++++ ...elValNoReceiverAlreadyExistsAfter.kt.after | 9 +++++++ ...opLevelValNoReceiverAlreadyExistsBefore.kt | 8 ++++++ ...lValNoReceiverAlreadyExistsBefore.kt.after | 9 +++++++ .../topLevelValWithPackageName.kt.after | 4 +-- .../property/valOnClassObject.kt.after | 2 +- .../property/valOnLibObject.kt.after | 8 +++--- .../property/valOnLibType.kt.after | 10 ++++---- .../property/varOnLibType.kt.after | 12 ++++----- .../idea/quickfix/QuickFixTestGenerated.java | 25 +++++++++++++++++++ 35 files changed, 228 insertions(+), 85 deletions(-) create mode 100644 idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfter.kt create mode 100644 idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfter.kt.after create mode 100644 idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfterAndBefore.kt create mode 100644 idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfterAndBefore.kt.after create mode 100644 idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsBefore.kt create mode 100644 idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsBefore.kt.after create mode 100644 idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsAfter.kt create mode 100644 idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsAfter.kt.after create mode 100644 idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsBefore.kt create mode 100644 idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsBefore.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt index d84b22dcb72..e8b690dc8bb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt @@ -1096,6 +1096,15 @@ internal fun placeDeclarationInContainer( (container as KtClass).createPrimaryConstructorIfAbsent().replaced(declaration) as D } + declaration is KtProperty && container !is KtBlockExpression -> { + val sibling = actualContainer.getChildOfType() ?: when (actualContainer) { + is KtClassBody -> actualContainer.declarations.firstOrNull() ?: actualContainer.rBrace + is KtFile -> actualContainer.declarations.first() + else -> null + } + sibling?.let { actualContainer.addBefore(declaration, it) as D } ?: fileToEdit.add(declaration) as D + } + actualContainer.isAncestor(anchor, true) -> { val insertToBlock = container is KtBlockExpression if (insertToBlock) { @@ -1107,11 +1116,7 @@ internal fun placeDeclarationInContainer( } } } - addNextToOriginalElementContainer( - insertToBlock - || (declaration is KtProperty && actualContainer !is KtFile) - || declaration is KtTypeAlias - ) + addNextToOriginalElementContainer(insertToBlock || declaration is KtTypeAlias) } container is KtFile -> container.add(declaration) as D diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/extensionByExtensionReceiver/extensionPropertyGetter.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/call/extensionByExtensionReceiver/extensionPropertyGetter.kt.after index 5336b32f9c6..7c0d6995d2a 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/extensionByExtensionReceiver/extensionPropertyGetter.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/extensionByExtensionReceiver/extensionPropertyGetter.kt.after @@ -1,11 +1,11 @@ +private val A.foo: Boolean + get() { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + // "Create extension property 'A.foo'" "true" class A(val n: Int) class B { val A.test: Boolean get() = foo -} - -private val A.foo: Boolean - get() { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/extensionByExtensionReceiver/extensionPropertySetter.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/call/extensionByExtensionReceiver/extensionPropertySetter.kt.after index 6b87f65c9cf..90897833aff 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/extensionByExtensionReceiver/extensionPropertySetter.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/extensionByExtensionReceiver/extensionPropertySetter.kt.after @@ -1,3 +1,9 @@ +private var A.foo: Boolean + get() { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + set() {} + // "Create extension property 'A.foo'" "true" class A(val n: Int) @@ -7,10 +13,4 @@ class B { set(v: Boolean) { foo = v } -} - -private var A.foo: Boolean - get() { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - set() {} +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/abstract/classNoExplicitReceiver.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/abstract/classNoExplicitReceiver.kt.after index 021ce43d5b1..eac97760a3b 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/abstract/classNoExplicitReceiver.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/abstract/classNoExplicitReceiver.kt.after @@ -1,9 +1,9 @@ // "Create abstract property 'foo'" "true" abstract class A { - fun bar(b: Boolean) {} - abstract val foo: Boolean + fun bar(b: Boolean) {} + fun test() { bar(foo) } diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/abstract/explicitReceiverOfContainingClass.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/abstract/explicitReceiverOfContainingClass.kt.after index e0d32cdff77..dad8cbfc863 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/abstract/explicitReceiverOfContainingClass.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/abstract/explicitReceiverOfContainingClass.kt.after @@ -1,9 +1,9 @@ // "Create abstract property 'A.foo'" "true" abstract class A { - fun bar(b: Boolean) {} - abstract val foo: Boolean + fun bar(b: Boolean) {} + fun test(a: A) { bar(a.foo) } diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/abstract/interfaceNoExplicitReceiver.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/abstract/interfaceNoExplicitReceiver.kt.after index 668867e2a96..b06b893b387 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/abstract/interfaceNoExplicitReceiver.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/abstract/interfaceNoExplicitReceiver.kt.after @@ -1,9 +1,9 @@ // "Create abstract property 'foo'" "true" interface A { - fun bar(b: Boolean) {} - val foo: Boolean + fun bar(b: Boolean) {} + fun test() { bar(foo) } diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/extensionPropertyOnTypeFromAnotherPackage.after.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/extensionPropertyOnTypeFromAnotherPackage.after.kt index 0718febb5ad..254349b56ae 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/extensionPropertyOnTypeFromAnotherPackage.after.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/extensionPropertyOnTypeFromAnotherPackage.after.kt @@ -3,14 +3,14 @@ import package1.A +private val package2.A.foo: Any + get() { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + class X { init { val y = package2.A() val foo = y.foo } -} - -private val package2.A.foo: Any - get() { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/extensionValOnGroovyType.after.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/extensionValOnGroovyType.after.kt index 2ffb6dc1943..50d00e1bc0d 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/extensionValOnGroovyType.after.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/extensionValOnGroovyType.after.kt @@ -1,11 +1,11 @@ // "Create extension property 'A.foo'" "true" // ERROR: Unresolved reference: foo -fun test(): String? { - return A().foo -} - private val A.foo: String? get() { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } + +fun test(): String? { + return A().foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/extensionValOnJavaType.after.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/extensionValOnJavaType.after.kt index 2ffb6dc1943..50d00e1bc0d 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/extensionValOnJavaType.after.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/extensionValOnJavaType.after.kt @@ -1,11 +1,11 @@ // "Create extension property 'A.foo'" "true" // ERROR: Unresolved reference: foo -fun test(): String? { - return A().foo -} - private val A.foo: String? get() { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } + +fun test(): String? { + return A().foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/extensionWithTypeParameterAsReceiver.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/extensionWithTypeParameterAsReceiver.kt.after index d0acf69c8ca..625af8b58cd 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/extensionWithTypeParameterAsReceiver.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/extensionWithTypeParameterAsReceiver.kt.after @@ -1,11 +1,11 @@ +private val T.bar: Int + get() { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + // "Create extension property 'T.bar'" "true" fun consume(n: Int) {} fun foo(t: T) { consume(t.bar) -} - -private val T.bar: Int - get() { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/fieldFromJava/classMemberLateinitVar.after.Dependency.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/fieldFromJava/classMemberLateinitVar.after.Dependency.kt index 1c1a41f41e0..1a05c58430f 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/fieldFromJava/classMemberLateinitVar.after.Dependency.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/fieldFromJava/classMemberLateinitVar.after.Dependency.kt @@ -1,4 +1,4 @@ class K { - lateinit var foo: String + lateinit var foo: String } \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/fieldFromJava/classMemberVar.after.Dependency.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/fieldFromJava/classMemberVar.after.Dependency.kt index 22b7f4538f8..b6981285e9d 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/fieldFromJava/classMemberVar.after.Dependency.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/fieldFromJava/classMemberVar.after.Dependency.kt @@ -1,5 +1,5 @@ class K { + @JvmField var foo: String = TODO("initialize me") - } \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/fieldFromJava/topLevelVar.after.Dependency.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/fieldFromJava/topLevelVar.after.Dependency.kt index 6c823a5596f..3ae61b05ec2 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/fieldFromJava/topLevelVar.after.Dependency.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/fieldFromJava/topLevelVar.after.Dependency.kt @@ -1,6 +1,6 @@ @file:JvmName("TestKt") -fun test() {} - @JvmField var foo: String = TODO("initialize me") + +fun test() {} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/localValDelegateRuntime.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/localValDelegateRuntime.kt.after index bd0e3519c64..96b0cdae1e9 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/localValDelegateRuntime.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/localValDelegateRuntime.kt.after @@ -3,8 +3,8 @@ import kotlin.properties.ReadOnlyProperty // "Create property 'foo'" "true" // ERROR: Property must be initialized +val foo: ReadOnlyProperty + fun test() { val x: Int by foo } - -val foo: ReadOnlyProperty diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/nullableReceiver.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/nullableReceiver.kt.after index 9b2e5e79947..9a6fc482d18 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/nullableReceiver.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/nullableReceiver.kt.after @@ -1,11 +1,11 @@ +private val String?.notExistingVal: Int + get() { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + // "Create extension property 'String?.notExistingVal'" "true" fun foo(n: Int) {} fun context(p: String?) { foo(p.notExistingVal) -} - -private val String?.notExistingVal: Int - get() { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/quotedName.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/quotedName.kt.after index 91aa8fdba0e..905369c5fe6 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/quotedName.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/quotedName.kt.after @@ -1,7 +1,7 @@ +val `!u00A0`: Int + // "Create property '!u00A0'" "true" // ERROR: Property must be initialized fun test() { val t: Int = `!u00A0` -} - -val `!u00A0`: Int +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/recursiveBound.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/recursiveBound.kt.after index 134e9c4f2ad..420b67e718c 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/recursiveBound.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/recursiveBound.kt.after @@ -1,9 +1,9 @@ +val foo: Cyclic<*> + // "Create property 'foo'" "true" // ERROR: Property must be initialized class Cyclic> fun test() { val c : Cyclic<*> = foo -} - -val foo: Cyclic<*> +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/refInStringTemplateRuntime.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/refInStringTemplateRuntime.kt.after index 1158b7fcb98..d339ab9ba6b 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/refInStringTemplateRuntime.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/refInStringTemplateRuntime.kt.after @@ -1,8 +1,8 @@ // "Create property 'foo'" "true" // ERROR: Property must be initialized +val foo: String + fun test() { println("a = $foo") -} - -val foo: String +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfter.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfter.kt new file mode 100644 index 00000000000..9b05131a4d4 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfter.kt @@ -0,0 +1,12 @@ +// "Create property 'foo'" "true" +// ERROR: Property must be initialized or be abstract + +class Test { + fun test(): Int { + return foo + } + + val foo1 = 1 +} + +val bar = 1 diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfter.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfter.kt.after new file mode 100644 index 00000000000..80d248cde1f --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfter.kt.after @@ -0,0 +1,13 @@ +// "Create property 'foo'" "true" +// ERROR: Property must be initialized or be abstract + +class Test { + fun test(): Int { + return foo + } + + private val foo: Int + val foo1 = 1 +} + +val bar = 1 diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfterAndBefore.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfterAndBefore.kt new file mode 100644 index 00000000000..5a06cb18a86 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfterAndBefore.kt @@ -0,0 +1,14 @@ +// "Create property 'foo'" "true" +// ERROR: Property must be initialized or be abstract + +class Test { + val foo1 = 1 + + fun test(): Int { + return foo + } + + val foo2 = 42 +} + +val bar = 1 diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfterAndBefore.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfterAndBefore.kt.after new file mode 100644 index 00000000000..65cb23a73cd --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfterAndBefore.kt.after @@ -0,0 +1,15 @@ +// "Create property 'foo'" "true" +// ERROR: Property must be initialized or be abstract + +class Test { + private val foo: Int + val foo1 = 1 + + fun test(): Int { + return foo + } + + val foo2 = 42 +} + +val bar = 1 diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsBefore.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsBefore.kt new file mode 100644 index 00000000000..9f2b6faa7ef --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsBefore.kt @@ -0,0 +1,12 @@ +// "Create property 'foo'" "true" +// ERROR: Property must be initialized or be abstract + +class Test { + val foo1 = 1 + + fun test(): Int { + return foo + } +} + +val bar = 1 diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsBefore.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsBefore.kt.after new file mode 100644 index 00000000000..f3778db3277 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsBefore.kt.after @@ -0,0 +1,13 @@ +// "Create property 'foo'" "true" +// ERROR: Property must be initialized or be abstract + +class Test { + private val foo: Int + val foo1 = 1 + + fun test(): Int { + return foo + } +} + +val bar = 1 diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiver.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiver.kt.after index 6c67f61adda..3248ce2cf73 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiver.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiver.kt.after @@ -1,8 +1,8 @@ // "Create property 'foo'" "true" // ERROR: Property must be initialized +val foo: Int + fun test(): Int { return foo } - -val foo: Int diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsAfter.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsAfter.kt new file mode 100644 index 00000000000..4c64ee3681a --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsAfter.kt @@ -0,0 +1,8 @@ +// "Create property 'foo'" "true" +// ERROR: Property must be initialized + +fun test(): Int { + return foo +} + +val bar = 1 diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsAfter.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsAfter.kt.after new file mode 100644 index 00000000000..21072df8ccb --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsAfter.kt.after @@ -0,0 +1,9 @@ +// "Create property 'foo'" "true" +// ERROR: Property must be initialized + +fun test(): Int { + return foo +} + +val foo: Int +val bar = 1 diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsBefore.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsBefore.kt new file mode 100644 index 00000000000..0588124f919 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsBefore.kt @@ -0,0 +1,8 @@ +// "Create property 'foo'" "true" +// ERROR: Property must be initialized + +val bar = 1 + +fun test(): Int { + return foo +} diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsBefore.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsBefore.kt.after new file mode 100644 index 00000000000..df794d84c6e --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsBefore.kt.after @@ -0,0 +1,9 @@ +// "Create property 'foo'" "true" +// ERROR: Property must be initialized + +val foo: Int +val bar = 1 + +fun test(): Int { + return foo +} diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValWithPackageName.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValWithPackageName.kt.after index 544eab913e5..879ff8eaf38 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValWithPackageName.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValWithPackageName.kt.after @@ -3,8 +3,8 @@ package foo +val foo: Int + fun test(): Int { return foo } - -val foo: Int diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/valOnClassObject.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/valOnClassObject.kt.after index 28a429a91d3..535d1541bfa 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/valOnClassObject.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/valOnClassObject.kt.after @@ -3,8 +3,8 @@ class A(val n: T) { companion object { - val foo: Int + val foo: Int } } diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibObject.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibObject.kt.after index 01f6d0bcbd8..8ed87ae73bb 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibObject.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibObject.kt.after @@ -1,11 +1,11 @@ // "Create extension property 'Unit.foo'" "true" // WITH_RUNTIME -fun test() { - val a: Int = Unit.foo -} - private val Unit.foo: Int get() { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } + +fun test() { + val a: Int = Unit.foo +} diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibType.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibType.kt.after index 557d8860a54..e646bc4ede9 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibType.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibType.kt.after @@ -1,13 +1,13 @@ // "Create extension property 'Int.foo'" "true" // WITH_RUNTIME +private val Int.foo: A + get() { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + class A(val n: T) fun test() { val a: A = 2.foo } - -private val Int.foo: A - get() { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt.after index 667e9058bca..338ab244bd9 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt.after @@ -1,14 +1,14 @@ // "Create extension property 'Int.foo'" "true" // WITH_RUNTIME -class A(val n: T) - -fun test() { - 2.foo = A("2") -} - private var Int.foo: A get() { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } set() {} + +class A(val n: T) + +fun test() { + 2.foo = A("2") +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 6d866bb9e70..9e10d788ba2 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -5137,6 +5137,21 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/createFromUsage/createVariable/property/thisInClass.kt"); } + @TestMetadata("thisInClassAlreadyExistsAfter.kt") + public void testThisInClassAlreadyExistsAfter() throws Exception { + runTest("idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfter.kt"); + } + + @TestMetadata("thisInClassAlreadyExistsAfterAndBefore.kt") + public void testThisInClassAlreadyExistsAfterAndBefore() throws Exception { + runTest("idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsAfterAndBefore.kt"); + } + + @TestMetadata("thisInClassAlreadyExistsBefore.kt") + public void testThisInClassAlreadyExistsBefore() throws Exception { + runTest("idea/testData/quickfix/createFromUsage/createVariable/property/thisInClassAlreadyExistsBefore.kt"); + } + @TestMetadata("thisInExtension.kt") public void testThisInExtension() throws Exception { runTest("idea/testData/quickfix/createFromUsage/createVariable/property/thisInExtension.kt"); @@ -5157,6 +5172,16 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiver.kt"); } + @TestMetadata("topLevelValNoReceiverAlreadyExistsAfter.kt") + public void testTopLevelValNoReceiverAlreadyExistsAfter() throws Exception { + runTest("idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsAfter.kt"); + } + + @TestMetadata("topLevelValNoReceiverAlreadyExistsBefore.kt") + public void testTopLevelValNoReceiverAlreadyExistsBefore() throws Exception { + runTest("idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValNoReceiverAlreadyExistsBefore.kt"); + } + @TestMetadata("topLevelValWithPackageName.kt") public void testTopLevelValWithPackageName() throws Exception { runTest("idea/testData/quickfix/createFromUsage/createVariable/property/topLevelValWithPackageName.kt");