From 14bdcb1e26f83d075cdb6481756f706fd1c91b6c Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Sat, 14 Dec 2019 22:41:58 +0900 Subject: [PATCH] "Create enum constant" quick fix: suggest if expected type is Any #KT-22666 Fixed --- .../createFromUsage/createClass/createClassUtils.kt | 5 +++++ .../referenceExpression/enumInBinaryExpression.kt | 7 +++++++ .../referenceExpression/enumInBinaryExpression.kt.after | 7 +++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 5 +++++ 4 files changed, 24 insertions(+) create mode 100644 idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumInBinaryExpression.kt create mode 100644 idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumInBinaryExpression.kt.after 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");