diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/quickfix/KotlinAndroidViewConstructorFix.kt b/idea/idea-android/src/org/jetbrains/kotlin/android/quickfix/KotlinAndroidViewConstructorFix.kt index a0c7ed9d253..1eb6e0554fa 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/quickfix/KotlinAndroidViewConstructorFix.kt +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/quickfix/KotlinAndroidViewConstructorFix.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.android.quickfix import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import org.jetbrains.android.facet.AndroidFacet import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic @@ -43,9 +42,8 @@ class KotlinAndroidViewConstructorFix(element: KtSuperTypeEntry) : KotlinQuickFi override fun getText() = "Add Android View constructors using '@JvmOverloads'" override fun getFamilyName() = text - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { - if (AndroidFacet.getInstance(file) == null) return false - return super.isAvailable(project, editor, file) + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { + return AndroidFacet.getInstance(file) != null } override fun invoke(project: Project, editor: Editor?, file: KtFile) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionBodyFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionBodyFix.kt index f4855931df1..0d57c39ad3a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionBodyFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionBodyFix.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFunction @@ -29,9 +28,9 @@ class AddFunctionBodyFix(element: KtFunction) : KotlinQuickFixAction override fun getFamilyName() = "Add function body" override fun getText() = familyName - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { val element = element ?: return false - return super.isAvailable(project, editor, file) && !element.hasBody() + return !element.hasBody() } public override fun invoke(project: Project, editor: Editor?, file: KtFile) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionParametersFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionParametersFix.kt index 3a3147c0231..77732137324 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionParametersFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionParametersFix.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement -import com.intellij.psi.PsiFile import com.intellij.psi.search.searches.ReferencesSearch import org.jetbrains.kotlin.descriptors.ConstructorDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor @@ -70,9 +69,8 @@ class AddFunctionParametersFix( "Add parameter$subjectSuffix to $callableDescription" } - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { val callElement = callElement ?: return false - if (!super.isAvailable(project, editor, file)) return false // newParametersCnt <= 0: psi for this quickfix is no longer valid val newParametersCnt = callElement.valueArguments.size - functionDescriptor.valueParameters.size diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddGenericUpperBoundFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddGenericUpperBoundFix.kt index 351696ae9b1..636feb91e33 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddGenericUpperBoundFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddGenericUpperBoundFix.kt @@ -19,12 +19,11 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors -import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.idea.core.ShortenReferences +import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtPsiFactory import org.jetbrains.kotlin.psi.KtTypeParameter @@ -45,9 +44,8 @@ class AddGenericUpperBoundFix( override fun getText() = element?.let { "Add '$renderedUpperBound' as upper bound for ${it.name}" } ?: "" override fun getFamilyName() = "Add generic upper bound" - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { val element = element ?: return false - if (!super.isAvailable(project, editor, file)) return false // TODO: replacing existing upper bounds return (element.name != null && element.extendsBound == null) } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddLoopLabelFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddLoopLabelFix.kt index 893ccb87016..9992a8ba6a7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddLoopLabelFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddLoopLabelFix.kt @@ -39,10 +39,6 @@ class AddLoopLabelFix( override fun getText() = description override fun getFamilyName() = text - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { - return super.isAvailable(project, editor, file) - } - override fun invoke(project: Project, editor: Editor?, file: KtFile) { val element = element ?: return val labelName = existingLabelName ?: getUniqueLabelName(collectUsedLabels(element)) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt index cf671fb9e52..851ecb63fac 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import com.intellij.psi.PsiNameIdentifierOwner import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.ClassDescriptor @@ -67,9 +66,9 @@ open class AddModifierFix( } } - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { val element = element ?: return false - return super.isAvailable(project, editor, file) && element.canRefactor() + return element.canRefactor() } companion object { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddNameToArgumentFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddNameToArgumentFix.kt index 876dfb929c7..4555aebb705 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddNameToArgumentFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddNameToArgumentFix.kt @@ -23,7 +23,6 @@ import com.intellij.openapi.ui.popup.JBPopupFactory import com.intellij.openapi.ui.popup.ListPopupStep import com.intellij.openapi.ui.popup.PopupStep import com.intellij.openapi.ui.popup.util.BaseListPopupStep -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.KotlinIcons import org.jetbrains.kotlin.idea.caches.resolve.analyze @@ -40,9 +39,8 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.isError class AddNameToArgumentFix(argument: KtValueArgument) : KotlinQuickFixAction(argument) { - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { val element = element ?: return false - if (!super.isAvailable(project, editor, file)) return false if (element.getArgumentExpression() == null) return false return calculatePossibleArgumentNames().isNotEmpty() } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddTypeAnnotationToValueParameterFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddTypeAnnotationToValueParameterFix.kt index df1a5a14562..ca2fcbb3aa7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddTypeAnnotationToValueParameterFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddTypeAnnotationToValueParameterFix.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors @@ -61,7 +60,7 @@ class AddTypeAnnotationToValueParameterFix(element: KtParameter) : KotlinQuickFi typeName = type?.let { IdeDescriptorRenderers.SOURCE_CODE.renderType(it) } } - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { val element = element ?: return false return element.typeReference == null && typeNameShort != null } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenElseBranchFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenElseBranchFix.kt index 0b5bc19495e..cd8de6d6e0c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenElseBranchFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenElseBranchFix.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.CodeInsightUtilCore import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset @@ -29,9 +28,9 @@ class AddWhenElseBranchFix(element: KtWhenExpression) : KotlinQuickFixAction } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralReturnTypeFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralReturnTypeFix.kt index d95ef6e01c1..1c4bb38b4c5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralReturnTypeFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralReturnTypeFix.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.KotlinBundle @@ -107,9 +106,8 @@ class ChangeFunctionLiteralReturnTypeFix( override fun getFamilyName() = KotlinBundle.message("change.type.family") - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { - return super.isAvailable(project, editor, file) - && (functionLiteralReturnTypeRef != null || appropriateQuickFix != null && appropriateQuickFix.isAvailable(project, editor!!, file)) + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { + return functionLiteralReturnTypeRef != null || appropriateQuickFix != null && appropriateQuickFix.isAvailable(project, editor!!, file) } override fun invoke(project: Project, editor: Editor?, file: KtFile) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt index 9e18c8565cc..e3194618db3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED import org.jetbrains.kotlin.descriptors.FunctionDescriptor @@ -52,9 +51,7 @@ abstract class ChangeFunctionSignatureFix( override fun startInWriteAction() = false - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { - if (!super.isAvailable(project, editor, file)) return false - + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { val declarations = DescriptorToSourceUtilsIde.getAllDeclarations(project, functionDescriptor) return declarations.isNotEmpty() && declarations.all { it.isValid && it.canRefactor() } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeParameterTypeFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeParameterTypeFix.kt index 126b3ed1b7b..e221554f2b2 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeParameterTypeFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeParameterTypeFix.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement -import com.intellij.psi.PsiFile import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.KotlinBundle @@ -49,8 +48,8 @@ class ChangeParameterTypeFix(element: KtParameter, type: KotlinType) : KotlinQui override fun startInWriteAction(): Boolean = false - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { - return super.isAvailable(project, editor, file) && containingDeclarationName != null + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { + return containingDeclarationName != null } override fun getText(): String { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableMutabilityFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableMutabilityFix.kt index a2c9d4a6223..456033d34f6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableMutabilityFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableMutabilityFix.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.DiagnosticFactory1 @@ -35,7 +34,7 @@ class ChangeVariableMutabilityFix(element: KtValVarKeywordOwner, private val mak override fun getFamilyName(): String = text - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { val element = element ?: return false val valOrVar = element.valOrVarKeyword?.node?.elementType ?: return false return (valOrVar == KtTokens.VAR_KEYWORD) != makeVar diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableTypeFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableTypeFix.kt index 645ad7b8ca3..94d62198bea 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableTypeFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableTypeFix.kt @@ -20,14 +20,13 @@ import com.intellij.codeInsight.intention.HighPriorityAction import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.analyze -import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny +import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers @@ -84,8 +83,8 @@ open class ChangeVariableTypeFix(element: KtVariableDeclaration, type: KotlinTyp override fun getFamilyName() = KotlinBundle.message("change.type.family") - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile) - = !typeContainsError && super.isAvailable(project, editor, file) + override fun isAvailable(project: Project, editor: Editor?, file: KtFile) + = !typeContainsError override fun invoke(project: Project, editor: Editor?, file: KtFile) { val element = element ?: return diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVisibilityFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVisibilityFix.kt index d6150ef3bbc..e5f2b03b41d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVisibilityFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVisibilityFix.kt @@ -20,7 +20,6 @@ import com.intellij.codeInsight.intention.HighPriorityAction import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility @@ -52,9 +51,9 @@ open class ChangeVisibilityFix( protected class ChangeToProtectedFix(element: KtModifierListOwner, elementName: String) : ChangeVisibilityFix(element, elementName, KtTokens.PROTECTED_KEYWORD) { - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { val element = element ?: return false - return super.isAvailable(project, editor, file) && element.canBeProtected() + return element.canBeProtected() } } @@ -64,9 +63,9 @@ open class ChangeVisibilityFix( protected class ChangeToPrivateFix(element: KtModifierListOwner, elementName: String) : ChangeVisibilityFix(element, elementName, KtTokens.PRIVATE_KEYWORD), HighPriorityAction { - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { val element = element ?: return false - return super.isAvailable(project, editor, file) && element.canBePrivate() + return element.canBePrivate() } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ConvertClassToKClassFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ConvertClassToKClassFix.kt index f1033efa568..080c188017b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ConvertClassToKClassFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ConvertClassToKClassFix.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic @@ -59,8 +58,7 @@ class ConvertClassToKClassFix(element: KtDotQualifiedExpression, type: KotlinTyp override fun getText() = element?.let { "Remove '.${it.children.lastOrNull()?.text}'" } ?: "" override fun getFamilyName() = "Remove conversion from 'KClass' to 'Class'" - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile) - = isApplicable && super.isAvailable(project, editor, file) + override fun isAvailable(project: Project, editor: Editor?, file: KtFile) = isApplicable override fun invoke(project: Project, editor: Editor?, file: KtFile) { val element = element ?: return diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt index 641b82900fb..b7c6336f844 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt @@ -21,7 +21,6 @@ import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement -import com.intellij.psi.PsiFile import com.intellij.psi.impl.source.tree.LeafPsiElement import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassifierDescriptor @@ -50,15 +49,13 @@ abstract class ExclExclCallFix(psiElement: PsiElement) : KotlinQuickFixAction protected constructor( override fun getFamilyName() = KotlinBundle.message("import.fix") - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile) - = element != null && super.isAvailable(project, editor, file) && suggestions.isNotEmpty() + override fun isAvailable(project: Project, editor: Editor?, file: KtFile) + = element != null && suggestions.isNotEmpty() override fun invoke(project: Project, editor: Editor?, file: KtFile) { val element = element ?: return diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/InsertDelegationCallQuickfix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/InsertDelegationCallQuickfix.kt index d05ba4a5920..51e5e354a1e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/InsertDelegationCallQuickfix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/InsertDelegationCallQuickfix.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.KotlinBundle @@ -58,9 +57,9 @@ class InsertDelegationCallQuickfix(val isThis: Boolean, element: KtSecondaryCons editor?.moveCaret(leftParOffset + 1) } - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { val element = element ?: return false - return super.isAvailable(project, editor, file) && element.hasImplicitDelegationCall() + return element.hasImplicitDelegationCall() } object InsertThisDelegationCallFactory : KotlinSingleIntentionActionFactory() { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinQuickFixAction.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinQuickFixAction.kt index b7f6517dd88..8c2adc970dc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinQuickFixAction.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinQuickFixAction.kt @@ -18,10 +18,12 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.FileModificationService import com.intellij.codeInsight.intention.IntentionAction +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile +import org.jetbrains.kotlin.psi.CREATEBYPATTERN_MAY_NOT_REFORMAT import org.jetbrains.kotlin.psi.KtCodeFragment import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer @@ -32,15 +34,28 @@ abstract class KotlinQuickFixAction(element: T) : IntentionA protected val element: T? get() = elementPointer.element - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { - val element = element ?: return false - return element.isValid && - !element.project.isDisposed && - (file.manager.isInProject(file) || file is KtCodeFragment) && - (file is KtFile) + final override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { + if (ApplicationManager.getApplication().isUnitTestMode) { + CREATEBYPATTERN_MAY_NOT_REFORMAT = true + } + try { + val element = element ?: return false + return element.isValid && + !element.project.isDisposed && + (file.manager.isInProject(file) || file is KtCodeFragment) && + (file is KtFile) && + isAvailable(project, editor, file) + } + finally { + CREATEBYPATTERN_MAY_NOT_REFORMAT = false + } } - override final fun invoke(project: Project, editor: Editor?, file: PsiFile) { + protected open fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { + return true + } + + final override fun invoke(project: Project, editor: Editor?, file: PsiFile) { val element = element ?: return if (file is KtFile && FileModificationService.getInstance().prepareFileForWrite(element.containingFile)) { invoke(project, editor, file) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/LetImplementInterfaceFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/LetImplementInterfaceFix.kt index f435518a0d9..4904c0f7788 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/LetImplementInterfaceFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/LetImplementInterfaceFix.kt @@ -20,7 +20,6 @@ import com.intellij.codeInsight.intention.LowPriorityAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMembersHandler import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.containsStarProjections @@ -68,8 +67,7 @@ class LetImplementInterfaceFix( override fun getFamilyName() = "Let type implement interface" override fun getText() = "$prefix interface '$expectedTypeName'" - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile) = - super.isAvailable(project, editor, file) && validExpectedType + override fun isAvailable(project: Project, editor: Editor?, file: KtFile) = validExpectedType override fun startInWriteAction() = false diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeConstructorParameterPropertyFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeConstructorParameterPropertyFix.kt index 66581fad4cb..655f13c6184 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeConstructorParameterPropertyFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeConstructorParameterPropertyFix.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinValVar @@ -40,9 +39,9 @@ class MakeConstructorParameterPropertyFix( override fun getText() = "Make constructor parameter a property$suffix" - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { val element = element ?: return false - return super.isAvailable(project, editor, file) && !element.hasValOrVar() + return !element.hasValOrVar() } override fun invoke(project: Project, editor: Editor?, file: KtFile) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt index 0c2038c4d0e..d986bed9815 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import com.intellij.psi.SmartPsiElementPointer import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.PsiModificationTracker @@ -74,12 +73,7 @@ class MakeOverriddenMemberOpenFix(declaration: KtDeclaration) : KotlinQuickFixAc return QuickFixInfo(overriddenNonOverridableMembers, containingDeclarationsNames) } - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { - - if (!super.isAvailable(project, editor, file) || file !is KtFile) { - return false - } - + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { return overriddenNonOverridableMembers.isNotEmpty() } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/MoveWhenElseBranchFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/MoveWhenElseBranchFix.kt index d869f049744..d8707763af9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/MoveWhenElseBranchFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/MoveWhenElseBranchFix.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.CodeInsightUtilCore import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtPsiUtil @@ -32,9 +31,9 @@ class MoveWhenElseBranchFix(element: KtWhenExpression) : KotlinQuickFixAction() == null + return editor != null && element.getStrictParentOfType() == null } override fun invoke(project: Project, editor: Editor?, file: KtFile) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceCallFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceCallFix.kt index 51a51ff6450..b31d79d610b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceCallFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceCallFix.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.psi.* @@ -38,9 +37,9 @@ abstract class ReplaceCallFix( override fun getFamilyName() = text - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { val element = element ?: return false - return super.isAvailable(project, editor, file) && element.selectorExpression != null + return element.selectorExpression != null } override fun invoke(project: Project, editor: Editor?, file: KtFile) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/WrongPrimitiveLiteralFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/WrongPrimitiveLiteralFix.kt index 31618ed781c..3212868daf2 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/WrongPrimitiveLiteralFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/WrongPrimitiveLiteralFix.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.codegen.ExpressionCodegen import org.jetbrains.kotlin.config.LanguageFeature @@ -77,8 +76,7 @@ class WrongPrimitiveLiteralFix(element: KtConstantExpression, type: KotlinType) } } - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { - if (!super.isAvailable(project, editor, file)) return false + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { if (constValue == null) return false if (expectedTypeIsFloat || expectedTypeIsDouble) return true diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateCallableFromUsageFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateCallableFromUsageFix.kt index 0f6f65fa2b5..cae18b8faa4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateCallableFromUsageFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateCallableFromUsageFix.kt @@ -21,7 +21,6 @@ import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiClass import com.intellij.psi.PsiElement -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde @@ -142,9 +141,7 @@ abstract class CreateCallableFromUsageFixBase( }.toString() } - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { - if (!super.isAvailable(project, editor, file)) return false - if (file !is KtFile) return false + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { val element = element ?: return false val receiverInfo = callableInfos.first().receiverTypeInfo diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromUsageFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromUsageFix.kt index c0d8c8fbf62..09810d5db59 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromUsageFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromUsageFix.kt @@ -23,7 +23,10 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.editor.Editor import com.intellij.openapi.module.ModuleUtilCore import com.intellij.openapi.project.Project -import com.intellij.psi.* +import com.intellij.psi.PsiClass +import com.intellij.psi.PsiComment +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiPackage import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils import org.jetbrains.kotlin.idea.quickfix.IntentionActionPriority @@ -78,8 +81,7 @@ open class CreateClassFromUsageFix protected constructor ( ): CreateFromUsageFixBase(element) { override fun getText() = "Create ${classInfo.kind.description} '${classInfo.name}'" - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { - if (!super.isAvailable(project, editor, file)) return false + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { with(classInfo) { if (kind == DEFAULT) return false if (applicableParents.isEmpty()) return false diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageFixBase.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageFixBase.kt index 89c41d89a0c..219853fe6be 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageFixBase.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageFixBase.kt @@ -20,7 +20,6 @@ import com.intellij.codeInsight.hint.HintManager import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement -import com.intellij.psi.PsiFile import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.searches.ReferencesSearch import org.jetbrains.kotlin.builtins.KotlinBuiltIns @@ -58,9 +57,8 @@ abstract class DeprecatedSymbolUsageFixBase( val replaceWith: ReplaceWith ) : KotlinQuickFixAction(element) { - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { val element = element ?: return false - if (!super.isAvailable(project, editor, file)) return false val strategy = buildUsageReplacementStrategy(element, replaceWith, recheckAnnotation = true) return strategy?.createReplacer(element) != null } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageInWholeProjectFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageInWholeProjectFix.kt index 6f24208b8a1..665763c420d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageInWholeProjectFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageInWholeProjectFix.kt @@ -42,8 +42,7 @@ class DeprecatedSymbolUsageInWholeProjectFix( override fun startInWriteAction() = false - override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { - if (!super.isAvailable(project, editor, file)) return false + override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean { return targetPsiElement() != null }