diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromReferenceExpressionActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromReferenceExpressionActionFactory.kt index 80d7b2c4bbc..d51231b76a0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromReferenceExpressionActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromReferenceExpressionActionFactory.kt @@ -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 } diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumEntryWithSuperclass.kt b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumEntryWithSuperclass.kt index 18e2d7f1be0..6b6db94fa3a 100644 --- a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumEntryWithSuperclass.kt +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumEntryWithSuperclass.kt @@ -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 diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectForEnum.kt b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectForEnum.kt new file mode 100644 index 00000000000..0f550c08366 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectForEnum.kt @@ -0,0 +1,6 @@ +// "Create object 'RED'" "true" +enum class SampleEnum {} + +fun usage() { + SampleEnum.RED +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectForEnum.kt.after b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectForEnum.kt.after new file mode 100644 index 00000000000..9db5606bb64 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectForEnum.kt.after @@ -0,0 +1,12 @@ +// "Create object 'RED'" "true" +enum class SampleEnum { + ; + + object RED { + + } +} + +fun usage() { + SampleEnum.RED +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectForEnumInArgument.kt b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectForEnumInArgument.kt new file mode 100644 index 00000000000..a0d7a7afcf4 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectForEnumInArgument.kt @@ -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) +} + +fun foo(sample: SampleEnum) {} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectForEnumInEquals.kt b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectForEnumInEquals.kt new file mode 100644 index 00000000000..a6aa1766f04 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectForEnumInEquals.kt @@ -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) { + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 8b6736503d3..5d3cb03e07b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -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");