Rename Parameter to Match Overridden Method Quick-Fix: Convert to Kotlin & refactor
This commit is contained in:
@@ -29,8 +29,6 @@ implement.members=Implement members
|
|||||||
new.kotlin.file.action=Kotlin File/Class
|
new.kotlin.file.action=Kotlin File/Class
|
||||||
import.fix=Import
|
import.fix=Import
|
||||||
imports.chooser.title=Imports
|
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
|
rename.kotlin.package.class.error=Can't rename Kotlin package facade class
|
||||||
add.semicolon.after.invocation=Add semicolon after invocation of ''{0}''
|
add.semicolon.after.invocation=Add semicolon after invocation of ''{0}''
|
||||||
add.semicolon.family=Add Semicolon
|
add.semicolon.family=Add Semicolon
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ class QuickFixRegistrar : QuickFixContributor {
|
|||||||
|
|
||||||
OVERRIDING_FINAL_MEMBER.registerFactory(MakeOverriddenMemberOpenFix)
|
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))
|
NESTED_CLASS_NOT_ALLOWED.registerFactory(AddModifierFix.createFactory(INNER_KEYWORD))
|
||||||
|
|
||||||
|
|||||||
+30
-73
@@ -14,84 +14,41 @@
|
|||||||
* limitations under the License.
|
* 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.codeInsight.intention.IntentionAction
|
||||||
import com.intellij.openapi.editor.Editor;
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.refactoring.rename.RenameProcessor
|
||||||
import com.intellij.refactoring.rename.RenameProcessor;
|
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||||
import com.intellij.util.IncorrectOperationException;
|
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor;
|
import org.jetbrains.kotlin.psi.KtParameter
|
||||||
import org.jetbrains.kotlin.descriptors.VariableDescriptor;
|
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||||
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;
|
|
||||||
|
|
||||||
public class RenameParameterToMatchOverriddenMethodFix extends KotlinQuickFixAction<KtParameter>{
|
class RenameParameterToMatchOverriddenMethodFix(
|
||||||
private final KtParameter parameter;
|
private val parameter: KtParameter,
|
||||||
private String parameterFromSuperclassName;
|
private val newName: String
|
||||||
|
) : KotlinQuickFixAction<KtParameter>(parameter) {
|
||||||
|
override fun getFamilyName() = "Rename"
|
||||||
|
|
||||||
public RenameParameterToMatchOverriddenMethodFix(@NotNull KtParameter parameter) {
|
override fun getText() = "Rename parameter to match overridden method"
|
||||||
super(parameter);
|
|
||||||
this.parameter = parameter;
|
public override fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
||||||
|
RenameProcessor(project, parameter, newName, false, false).run()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
companion object : KotlinSingleIntentionActionFactory() {
|
||||||
public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiFile file) {
|
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
|
||||||
if (!super.isAvailable(project, editor, file)) {
|
val parameter = diagnostic.psiElement.getNonStrictParentOfType<KtParameter>() ?: return null
|
||||||
return false;
|
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);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user