KT-22665 "Create object" quick fix produce wrong code for enum (#2883)

* "Create object" quick fix: do not suggest for enum

#KT-22665 Fixed
This commit is contained in:
Toshiaki Kameyama
2020-09-28 21:02:10 +09:00
committed by GitHub
parent 076eacb3d1
commit 330502a0a6
7 changed files with 57 additions and 2 deletions
@@ -93,7 +93,7 @@ object CreateClassFromReferenceExpressionActionFactory : CreateClassFromUsageFac
return allKinds.filter { classKind ->
targetParents.any { targetParent ->
(expectedType == null || getClassKindFilter(expectedType, targetParent)(classKind)) && when (classKind) {
ClassKind.OBJECT -> true
ClassKind.OBJECT -> expectedType == null || !isEnum(targetParent)
ClassKind.ENUM_ENTRY -> isEnum(targetParent)
else -> false
}
@@ -1,6 +1,5 @@
// "Create enum constant 'A'" "false"
// ACTION: Convert to block body
// ACTION: Create object 'A'
// ACTION: Rename reference
// ERROR: Unresolved reference: A
package p
@@ -0,0 +1,6 @@
// "Create object 'RED'" "true"
enum class SampleEnum {}
fun usage() {
SampleEnum.RED<caret>
}
@@ -0,0 +1,12 @@
// "Create object 'RED'" "true"
enum class SampleEnum {
;
object RED {
}
}
fun usage() {
SampleEnum.RED
}
@@ -0,0 +1,12 @@
// "Create object 'RED'" "false"
// ACTION: Add 'sample =' to argument
// ACTION: Create enum constant 'RED'
// ACTION: Rename reference
// ERROR: Unresolved reference: RED
enum class SampleEnum {}
fun usage() {
foo(SampleEnum.RED<caret>)
}
fun foo(sample: SampleEnum) {}
@@ -0,0 +1,11 @@
// "Create object 'RED'" "false"
// ACTION: Create enum constant 'RED'
// ACTION: Expand boolean expression to 'if else'
// ACTION: Rename reference
// ERROR: Unresolved reference: RED
enum class SampleEnum {}
fun usage(sample: SampleEnum) {
if (sample == SampleEnum.RED<caret>) {
}
}
@@ -3789,6 +3789,21 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectByQualifier.kt");
}
@TestMetadata("objectForEnum.kt")
public void testObjectForEnum() throws Exception {
runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectForEnum.kt");
}
@TestMetadata("objectForEnumInArgument.kt")
public void testObjectForEnumInArgument() throws Exception {
runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectForEnumInArgument.kt");
}
@TestMetadata("objectForEnumInEquals.kt")
public void testObjectForEnumInEquals() throws Exception {
runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectForEnumInEquals.kt");
}
@TestMetadata("objectInPackage.kt")
public void testObjectInPackage() throws Exception {
runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectInPackage.kt");