diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/createClassUtils.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/createClassUtils.kt index 84ac2e50ee2..a381ef8e728 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/createClassUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/createClassUtils.kt @@ -43,6 +43,7 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.Qualifier import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.substitutions.getTypeSubstitution +import org.jetbrains.kotlin.types.typeUtil.isAnyOrNullableAny import org.jetbrains.kotlin.types.typeUtil.isUnit import java.util.* import org.jetbrains.kotlin.descriptors.ClassKind as ClassDescriptorKind @@ -98,6 +99,10 @@ internal fun KotlinType.toClassTypeInfo(): TypeInfo { } internal fun getClassKindFilter(expectedType: KotlinType, containingDeclaration: PsiElement): (ClassKind) -> Boolean { + if (expectedType.isAnyOrNullableAny()) { + return { _ -> true } + } + val descriptor = expectedType.constructor.declarationDescriptor ?: return { _ -> false } val canHaveSubtypes = !(expectedType.constructor.isFinal || expectedType.containsStarProjections()) || expectedType.isUnit() diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumInBinaryExpression.kt b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumInBinaryExpression.kt new file mode 100644 index 00000000000..4de4ed60a5a --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumInBinaryExpression.kt @@ -0,0 +1,7 @@ +// "Create enum constant 'RED'" "true" +enum class SampleEnum {} + +fun usage(sample: SampleEnum) { + if (sample == SampleEnum.RED) { + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumInBinaryExpression.kt.after b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumInBinaryExpression.kt.after new file mode 100644 index 00000000000..8dd76caf17c --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumInBinaryExpression.kt.after @@ -0,0 +1,7 @@ +// "Create enum constant 'RED'" "true" +enum class SampleEnum { RED } + +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 bab4dd23359..8b6736503d3 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -3764,6 +3764,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumEntryWithSuperclass.kt"); } + @TestMetadata("enumInBinaryExpression.kt") + public void testEnumInBinaryExpression() throws Exception { + runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumInBinaryExpression.kt"); + } + @TestMetadata("enumNoReceiver.kt") public void testEnumNoReceiver() throws Exception { runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumNoReceiver.kt");