Merge branch 'master' into changeSignature
authorMaxim Medvedev <maxim.medvedev@jetbrains.com>
Wed, 28 Apr 2010 12:00:32 +0000 (16:00 +0400)
committerMaxim Medvedev <maxim.medvedev@jetbrains.com>
Wed, 28 Apr 2010 12:00:32 +0000 (16:00 +0400)
Conflicts:
java/java-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureProcessor.java

1  2 
java/java-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureProcessor.java
platform/lang-api/src/com/intellij/psi/impl/ElementBase.java
platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorTabbedContainer.java
plugins/groovy/src/META-INF/plugin.xml
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/arguments/GrArgumentLabelImpl.java
resources/src/META-INF/IdeaPlugin.xml

index e351932529dc486be13ceb6f1c42d28c9231151b,9291086f363e74a10316031c1cb6881cee0cade9..2b624ad14c110ffe0bdf520d86841e201adb36a7
@@@ -28,11 -29,27 +28,12 @@@ import com.intellij.openapi.ui.Messages
  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;
@@@ -125,23 -334,66 +126,29 @@@ public class ChangeSignatureProcessor e
      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;
        }
Simple merge