From 474ab531ea1b94e53a01e54f4c0c1c528f99df71 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Wed, 6 Jan 2016 12:48:43 +0300 Subject: [PATCH] Rename Parameter to Match Overridden Method Quick-Fix: Convert to Kotlin & refactor --- .../kotlin/idea/KotlinBundle.properties | 2 - .../kotlin/idea/quickfix/QuickFixRegistrar.kt | 2 +- ...nameParameterToMatchOverriddenMethodFix.kt | 103 +++++------------- 3 files changed, 31 insertions(+), 76 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties index 55e3c0a03cd..ce88b30189c 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties @@ -29,8 +29,6 @@ implement.members=Implement members new.kotlin.file.action=Kotlin File/Class import.fix=Import imports.chooser.title=Imports -rename.parameter.to.match.overridden.method=Rename parameter to match overridden method -rename.family=Rename rename.kotlin.package.class.error=Can't rename Kotlin package facade class add.semicolon.after.invocation=Add semicolon after invocation of ''{0}'' add.semicolon.family=Add Semicolon diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt index ad2e09b7a8a..05ffcb81268 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt @@ -205,7 +205,7 @@ class QuickFixRegistrar : QuickFixContributor { OVERRIDING_FINAL_MEMBER.registerFactory(MakeOverriddenMemberOpenFix) - PARAMETER_NAME_CHANGED_ON_OVERRIDE.registerFactory(RenameParameterToMatchOverriddenMethodFix.createFactory()) + PARAMETER_NAME_CHANGED_ON_OVERRIDE.registerFactory(RenameParameterToMatchOverriddenMethodFix) NESTED_CLASS_NOT_ALLOWED.registerFactory(AddModifierFix.createFactory(INNER_KEYWORD)) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/RenameParameterToMatchOverriddenMethodFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/RenameParameterToMatchOverriddenMethodFix.kt index fa956318324..5fe7111658b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/RenameParameterToMatchOverriddenMethodFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/RenameParameterToMatchOverriddenMethodFix.kt @@ -14,84 +14,41 @@ * limitations under the License. */ -package org.jetbrains.kotlin.idea.quickfix; +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.refactoring.rename.RenameProcessor; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.descriptors.CallableDescriptor; -import org.jetbrains.kotlin.descriptors.VariableDescriptor; -import org.jetbrains.kotlin.diagnostics.Diagnostic; -import org.jetbrains.kotlin.idea.KotlinBundle; -import org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils; -import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil; -import org.jetbrains.kotlin.psi.KtFile; -import org.jetbrains.kotlin.psi.KtParameter; -import org.jetbrains.kotlin.resolve.BindingContext; +import com.intellij.codeInsight.intention.IntentionAction +import com.intellij.openapi.editor.Editor +import com.intellij.openapi.project.Project +import com.intellij.refactoring.rename.RenameProcessor +import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor +import org.jetbrains.kotlin.diagnostics.Diagnostic +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtParameter +import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType -public class RenameParameterToMatchOverriddenMethodFix extends KotlinQuickFixAction{ - private final KtParameter parameter; - private String parameterFromSuperclassName; +class RenameParameterToMatchOverriddenMethodFix( + private val parameter: KtParameter, + private val newName: String +) : KotlinQuickFixAction(parameter) { + override fun getFamilyName() = "Rename" - public RenameParameterToMatchOverriddenMethodFix(@NotNull KtParameter parameter) { - super(parameter); - this.parameter = parameter; + override fun getText() = "Rename parameter to match overridden method" + + public override fun invoke(project: Project, editor: Editor?, file: KtFile) { + RenameProcessor(project, parameter, newName, false, false).run() } - @Override - public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiFile file) { - if (!super.isAvailable(project, editor, file)) { - return false; + companion object : KotlinSingleIntentionActionFactory() { + override fun createAction(diagnostic: Diagnostic): IntentionAction? { + val parameter = diagnostic.psiElement.getNonStrictParentOfType() ?: return null + val parameterDescriptor = parameter.resolveToDescriptor() as ValueParameterDescriptor + val parameterFromSuperclassName = parameterDescriptor + .overriddenDescriptors + .map { it.name.asString() } + .distinct() + .singleOrNull() ?: return null + return RenameParameterToMatchOverriddenMethodFix(parameter, parameterFromSuperclassName) } - - BindingContext context = ResolutionUtils.analyze(parameter); - VariableDescriptor parameterDescriptor = context.get(BindingContext.VALUE_PARAMETER, parameter); - if (parameterDescriptor == null) { - return false; - } - for (CallableDescriptor parameterFromSuperclass : parameterDescriptor.getOverriddenDescriptors()) { - if (parameterFromSuperclassName == null) { - parameterFromSuperclassName = parameterFromSuperclass.getName().asString(); - } - else if (!parameterFromSuperclassName.equals(parameterFromSuperclass.getName().asString())) { - return false; - } - } - - return parameterFromSuperclassName != null; - } - - @NotNull - @Override - public String getText() { - return KotlinBundle.message("rename.parameter.to.match.overridden.method"); - } - - @NotNull - @Override - public String getFamilyName() { - return KotlinBundle.message("rename.family"); - } - - @Override - public void invoke(@NotNull Project project, Editor editor, @NotNull KtFile file) throws IncorrectOperationException { - new RenameProcessor(project, parameter, parameterFromSuperclassName, false, false).run(); - } - - @NotNull - public static KotlinSingleIntentionActionFactory createFactory() { - return new KotlinSingleIntentionActionFactory() { - @Nullable - @Override - public IntentionAction createAction(@NotNull Diagnostic diagnostic) { - KtParameter parameter = QuickFixUtil.getParentElementOfType(diagnostic, KtParameter.class); - return parameter == null ? null : new RenameParameterToMatchOverriddenMethodFix(parameter); - } - }; } }