From 2ac627efd30be81ec654c295200830f51be51fd0 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 29 Mar 2016 21:44:54 +0300 Subject: [PATCH] No KotlinType reference in ConvertClassToKClassFix --- .../idea/quickfix/ConvertClassToKClassFix.kt | 36 +++++++++---------- .../kotlin/idea/quickfix/QuickFixRegistrar.kt | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ConvertClassToKClassFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ConvertClassToKClassFix.kt index 63846702af0..bdcd9ef42a4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ConvertClassToKClassFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ConvertClassToKClassFix.kt @@ -41,32 +41,32 @@ private fun KotlinType.isJClass(): Boolean { return expressionTypeFqName == JAVA_LANG_CLASS_FQ_NAME } -class ConvertClassToKClassFix(element: KtDotQualifiedExpression, private val type: KotlinType) : KotlinQuickFixAction(element) { +class ConvertClassToKClassFix(element: KtDotQualifiedExpression, type: KotlinType) : KotlinQuickFixAction(element) { + private val isApplicable: Boolean = run { + val bindingContext = element.analyze(BodyResolveMode.PARTIAL) + val expressionType = bindingContext.getType(element) ?: return@run false + if (!expressionType.isJClass()) return@run false + + val children = element.children + if (children.size != 2) return@run false + + val firstChild = children.first() as? KtExpression ?: return@run false + val firstChildType = bindingContext.getType(firstChild) ?: return@run false + + return@run firstChildType.isSubtypeOf(type) + } + override fun getText() = "Remove '.${element.children.lastOrNull()?.text}'" override fun getFamilyName() = "Remove conversion from 'KClass' to 'Class'" - - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { - if (!super.isAvailable(project, editor, file)) return false - - val bindingContext = element.analyze(BodyResolveMode.PARTIAL) - val expressionType = bindingContext.getType(element) ?: return false - if (!expressionType.isJClass()) return false - - val children = element.children - if (children.size != 2) return false - - val firstChild = children.first() as? KtExpression ?: return false - val firstChildType = bindingContext.getType(firstChild) ?: return false - - return firstChildType.isSubtypeOf(type) - } + override fun isAvailable(project: Project, editor: Editor?, file: PsiFile) + = isApplicable && super.isAvailable(project, editor, file) override fun invoke(project: Project, editor: Editor?, file: KtFile) { element.replace(element.firstChild) } - object Factory : KotlinIntentionActionsFactory() { + companion object Factory : KotlinIntentionActionsFactory() { override fun doCreateActions(diagnostic: Diagnostic): List { val casted = Errors.TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH.cast(diagnostic) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt index b12f0a61c83..f48ff6b9baf 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt @@ -337,7 +337,7 @@ class QuickFixRegistrar : QuickFixContributor { UPPER_BOUND_VIOLATED.registerFactory(AddGenericUpperBoundFix.Factory) TYPE_INFERENCE_UPPER_BOUND_VIOLATED.registerFactory(AddGenericUpperBoundFix.Factory) - TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH.registerFactory(ConvertClassToKClassFix.Factory) + TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH.registerFactory(ConvertClassToKClassFix) NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION.registerFactory(ConstFixFactory)