"Create enum constant" quick fix: suggest if expected type is Any
#KT-22666 Fixed
This commit is contained in:
committed by
klunnii
parent
31ed5430ee
commit
14bdcb1e26
+5
@@ -43,6 +43,7 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.Qualifier
|
|||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
import org.jetbrains.kotlin.types.substitutions.getTypeSubstitution
|
import org.jetbrains.kotlin.types.substitutions.getTypeSubstitution
|
||||||
|
import org.jetbrains.kotlin.types.typeUtil.isAnyOrNullableAny
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind as ClassDescriptorKind
|
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 {
|
internal fun getClassKindFilter(expectedType: KotlinType, containingDeclaration: PsiElement): (ClassKind) -> Boolean {
|
||||||
|
if (expectedType.isAnyOrNullableAny()) {
|
||||||
|
return { _ -> true }
|
||||||
|
}
|
||||||
|
|
||||||
val descriptor = expectedType.constructor.declarationDescriptor ?: return { _ -> false }
|
val descriptor = expectedType.constructor.declarationDescriptor ?: return { _ -> false }
|
||||||
|
|
||||||
val canHaveSubtypes = !(expectedType.constructor.isFinal || expectedType.containsStarProjections()) || expectedType.isUnit()
|
val canHaveSubtypes = !(expectedType.constructor.isFinal || expectedType.containsStarProjections()) || expectedType.isUnit()
|
||||||
|
|||||||
Vendored
+7
@@ -0,0 +1,7 @@
|
|||||||
|
// "Create enum constant 'RED'" "true"
|
||||||
|
enum class SampleEnum {}
|
||||||
|
|
||||||
|
fun usage(sample: SampleEnum) {
|
||||||
|
if (sample == SampleEnum.RED<caret>) {
|
||||||
|
}
|
||||||
|
}
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
// "Create enum constant 'RED'" "true"
|
||||||
|
enum class SampleEnum { RED }
|
||||||
|
|
||||||
|
fun usage(sample: SampleEnum) {
|
||||||
|
if (sample == SampleEnum.RED) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3764,6 +3764,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumEntryWithSuperclass.kt");
|
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")
|
@TestMetadata("enumNoReceiver.kt")
|
||||||
public void testEnumNoReceiver() throws Exception {
|
public void testEnumNoReceiver() throws Exception {
|
||||||
runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumNoReceiver.kt");
|
runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumNoReceiver.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user