diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/quickfix/QuickFixUtil.java b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/quickfix/QuickFixUtil.java index 0a415272fdf..572309c1e49 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/quickfix/QuickFixUtil.java +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/quickfix/QuickFixUtil.java @@ -87,10 +87,6 @@ public class QuickFixUtil { return matchingReturnType; } - public static boolean canModifyElement(@NotNull PsiElement element) { - return element.isWritable(); - } - @Nullable public static PsiElement safeGetDeclaration(@Nullable CallableDescriptor descriptor) { //do not create fix if descriptor has more than one overridden declaration diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/InfixCallFix.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/InfixCallFix.kt index e219bdf8777..eb216b9863c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/InfixCallFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/InfixCallFix.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.DiagnosticWithParameters2 import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde -import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil +import org.jetbrains.kotlin.idea.core.refactoring.canRefactor import org.jetbrains.kotlin.idea.intentions.InfixCallToOrdinaryIntention import org.jetbrains.kotlin.idea.quickfix.CleanupFix import org.jetbrains.kotlin.idea.quickfix.KotlinQuickFixAction @@ -46,7 +46,7 @@ class InfixCallFix(expression: KtBinaryExpression) : KotlinQuickFixAction)?.a as? FunctionDescriptor ?: return null val target = DescriptorToSourceUtilsIde.getAnyDeclaration(diagnostic.psiFile.project, functionDescriptor) as? KtModifierListOwner - if (target == null || QuickFixUtil.canModifyElement(target)) { + if (target == null || target.canRefactor()) { // we'll fix the problem by adding the 'infix' modifier to the target return null } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt index 03a147935a8..e3464e6b840 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil +import org.jetbrains.kotlin.idea.core.refactoring.canRefactor import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens.ABSTRACT_KEYWORD @@ -52,7 +53,7 @@ open class AddModifierFix( } override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean { - return super.isAvailable(project, editor, file) && QuickFixUtil.canModifyElement(element) + return super.isAvailable(project, editor, file) && element.canRefactor() } companion object { @@ -97,7 +98,7 @@ open class AddModifierFix( val type = bindingContext[BindingContext.TYPE, typeReference] ?: return null val classDescriptor = type.constructor.declarationDescriptor as? ClassDescriptor ?: return null val declaration = DescriptorToSourceUtils.descriptorToDeclaration(classDescriptor) as? KtClass ?: return null - if (!QuickFixUtil.canModifyElement(declaration)) return null + if (!declaration.canRefactor()) return null if (declaration.isEnum()) return null return AddModifierFix(declaration, KtTokens.OPEN_KEYWORD) } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt index b672cfa68a0..71c03580b74 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt @@ -31,7 +31,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.core.KotlinNameSuggester import org.jetbrains.kotlin.idea.core.mapArgumentsToParameters -import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil +import org.jetbrains.kotlin.idea.core.refactoring.canRefactor import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeSignatureConfiguration import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinMethodDescriptor import org.jetbrains.kotlin.idea.refactoring.changeSignature.modify @@ -57,7 +57,7 @@ abstract class ChangeFunctionSignatureFix( if (!super.isAvailable(project, editor, file)) return false val declarations = DescriptorToSourceUtilsIde.getAllDeclarations(project, functionDescriptor) - return declarations.all { it.isValid && QuickFixUtil.canModifyElement(it) } + return declarations.isNotEmpty() && declarations.all { it.isValid && it.canRefactor() } } protected fun getNewArgumentName(argument: ValueArgument, validator: Function1): String { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeClassAnAnnotationClassFix.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeClassAnAnnotationClassFix.java index d7b067f2a9f..d5443d00de8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeClassAnAnnotationClassFix.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeClassAnAnnotationClassFix.java @@ -29,6 +29,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.diagnostics.Diagnostic; import org.jetbrains.kotlin.idea.KotlinBundle; import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil; +import org.jetbrains.kotlin.idea.core.refactoring.JetRefactoringUtilKt; import org.jetbrains.kotlin.idea.references.ReferenceUtilKt; import org.jetbrains.kotlin.lexer.KtTokens; import org.jetbrains.kotlin.psi.*; @@ -62,7 +63,7 @@ public class MakeClassAnAnnotationClassFix extends KotlinQuickFixAction( } protected fun checkModifiable(element: PsiElement): Boolean { - if (QuickFixUtil.canModifyElement(element)) { + if (element.canRefactor()) { return true } diff --git a/idea/testData/quickfix/createFromUsage/createSecondaryConstructor/groovyConstructor.before.Main.kt b/idea/testData/quickfix/createFromUsage/createSecondaryConstructor/groovyConstructor.before.Main.kt index 1b5ed9017fe..e74734af81e 100644 --- a/idea/testData/quickfix/createFromUsage/createSecondaryConstructor/groovyConstructor.before.Main.kt +++ b/idea/testData/quickfix/createFromUsage/createSecondaryConstructor/groovyConstructor.before.Main.kt @@ -1,6 +1,5 @@ // "Create secondary constructor" "false" // ERROR: Too many arguments for public constructor G() defined in G -// ACTION: Add parameter to constructor 'G' // ACTION: Convert to block body // ACTION: Create function 'G'