import com.intellij.openapi.util.Ref;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
-import com.intellij.psi.codeStyle.JavaCodeStyleManager;
-import com.intellij.psi.codeStyle.VariableKind;
-import com.intellij.psi.javadoc.PsiDocTagValue;
-import com.intellij.psi.scope.processor.VariablesProcessor;
-import com.intellij.psi.scope.util.PsiScopesUtil;
-import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.psi.search.searches.MethodReferencesSearch;
-import com.intellij.psi.search.searches.OverridingMethodsSearch;
-import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.*;
-import com.intellij.psi.xml.XmlElement;
import com.intellij.refactoring.BaseRefactoringProcessor;
import com.intellij.refactoring.RefactoringBundle;
-import com.intellij.refactoring.rename.JavaUnresolvableLocalCollisionDetector;
+ import com.intellij.refactoring.rename.RenameUtil;
-import com.intellij.refactoring.rename.UnresolvableCollisionUsageInfo;
import com.intellij.refactoring.ui.ConflictsDialog;
-import com.intellij.refactoring.util.*;
-import com.intellij.refactoring.util.usageInfo.DefaultConstructorImplicitUsageInfo;
-import com.intellij.refactoring.util.usageInfo.NoConstructorClassUsageInfo;
+import com.intellij.refactoring.util.CanonicalTypes;
import com.intellij.usageView.UsageInfo;
import com.intellij.usageView.UsageViewDescriptor;
import com.intellij.usageView.UsageViewUtil;
myChangeInfo.updateMethod((PsiMethod) elements[0]);
}
- private void addMethodConflicts(MultiMap<PsiElement, String> conflicts) {
- String newMethodName = myChangeInfo.newName;
-
- try {
- PsiMethod prototype;
- PsiManager manager = PsiManager.getInstance(myProject);
- PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
- final PsiMethod method = myChangeInfo.getMethod();
- final CanonicalTypes.Type returnType = myChangeInfo.newReturnType;
- if (returnType != null) {
- prototype = factory.createMethod(newMethodName, returnType.getType(method, manager));
- }
- else {
- prototype = factory.createConstructor();
- prototype.setName(newMethodName);
- }
- ParameterInfoImpl[] parameters = myChangeInfo.newParms;
-
-
- for (ParameterInfoImpl info : parameters) {
- final PsiType parameterType = info.createType(method, manager);
- PsiParameter param = factory.createParameter(info.getName(), parameterType);
- prototype.getParameterList().add(param);
+ protected boolean preprocessUsages(Ref<UsageInfo[]> refUsages) {
+ MultiMap<PsiElement, String> conflictDescriptions = new MultiMap<PsiElement, String>();
+ for (ChangeSignatureUsageProcessor usageProcessor : ChangeSignatureUsageProcessor.EP_NAME.getExtensions()) {
+ final MultiMap<PsiElement, String> conflicts = usageProcessor.findConflicts(myChangeInfo, refUsages);
+ for (PsiElement key : conflicts.keySet()) {
+ Collection<String> collection = conflictDescriptions.get(key);
+ if (collection.size() == 0) collection = new HashSet<String>();
+ collection.addAll(conflicts.get(key));
+ conflictDescriptions.put(key, collection);
}
-
- ConflictsUtil.checkMethodConflicts(
- method.getContainingClass(),
- method,
- prototype, conflicts);
}
- catch (IncorrectOperationException e) {
- LOG.error(e);
- }
- }
- final Set<UsageInfo> usagesSet = new HashSet<UsageInfo>(Arrays.asList(refUsages.get()));
-
- protected boolean preprocessUsages(Ref<UsageInfo[]> refUsages) {
- MultiMap<PsiElement, String> conflictDescriptions = new MultiMap<PsiElement, String>();
+ final UsageInfo[] usagesIn = refUsages.get();
- addMethodConflicts(conflictDescriptions);
- RenameUtil.addConflictDescriptions(usagesIn, conflictDescriptions);
+ Set<UsageInfo> usagesSet = new HashSet<UsageInfo>(Arrays.asList(usagesIn));
+ RenameUtil.removeConflictUsages(usagesSet);
- if (myChangeInfo.isVisibilityChanged) {
- try {
- addInaccessibilityDescriptions(usagesSet, conflictDescriptions);
- }
- catch (IncorrectOperationException e) {
- LOG.error(e);
- }
- }
-
if (myPrepareSuccessfulSwingThreadCallback != null && !conflictDescriptions.isEmpty()) {
- ConflictsDialog dialog = new ConflictsDialog(myProject, conflictDescriptions);
+ ConflictsDialog dialog = new ConflictsDialog(myProject, conflictDescriptions, new Runnable(){
+ public void run() {
+ execute(usagesIn);
+ }
+ });
dialog.show();
- if (!dialog.isOK()){
+ if (!dialog.isOK()) {
if (dialog.isShowConflicts()) prepareSuccessful();
return false;
}