blob: b288f955e228fc332fd87750023207c24e8928ff [file] [log] [blame]
package com.jetbrains.python.refactoring.classes.membersManager;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.ui.ConflictsDialog;
import com.intellij.refactoring.util.RefactoringUIUtil;
import com.intellij.util.containers.MultiMap;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.psi.PyClass;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
/**
* Displays error messages about fact that destination class already contains some member infos
* or members under refactoring would not be available at the new place.
*
* @author Ilya.Kazakevich
*/
public class MembersConflictDialog extends ConflictsDialog {
/**
* @param project project under refactoring
* @param duplicatesConflict duplicates conflicts : that means destination class has the same member.
* If member "foo" already exists in class "bar": pass [bar] -] [foo].
* @param dependenciesConflicts dependency conflict: list of elements used by member under refactoring and would not be available
* at new destination. If user wants to move method, that uses field "bar" which would not be available at new class,
* pass [bar] field
*/
public MembersConflictDialog(
@NotNull final Project project,
@NotNull final MultiMap<PyClass, PyMemberInfo<?>> duplicatesConflict,
@NotNull final Collection<PyMemberInfo<?>> dependenciesConflicts) {
super(project, convertDescription(duplicatesConflict, dependenciesConflicts), null, true, false);
}
@NotNull
private static MultiMap<PsiElement, String> convertDescription(
@NotNull final MultiMap<PyClass, PyMemberInfo<?>> duplicateConflictDescriptions,
@NotNull final Collection<PyMemberInfo<?>> dependenciesConflicts) {
final MultiMap<PsiElement, String> result = new MultiMap<PsiElement, String>();
for (final PyClass aClass : duplicateConflictDescriptions.keySet()) {
for (final PyMemberInfo<?> pyMemberInfo : duplicateConflictDescriptions.get(aClass)) {
final String message = RefactoringBundle.message("0.already.contains.a.1",
RefactoringUIUtil.getDescription(aClass, false),
RefactoringUIUtil.getDescription(pyMemberInfo.getMember(), false));
result.putValue(aClass, message);
}
}
for (final PyMemberInfo<?> memberUnderConflict : dependenciesConflicts) {
result.putValue(memberUnderConflict.getMember(), PyBundle.message(
"refactoring.will.not.be.accessible",
RefactoringUIUtil.getDescription(memberUnderConflict.getMember(), false)
)
);
}
return result;
}
}