mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
change signature: do not show dialog
This commit is contained in:
+3
@@ -130,6 +130,9 @@ public class ChangeSignatureProcessor extends ChangeSignatureProcessorBase {
|
||||
}
|
||||
|
||||
protected boolean preprocessUsages(Ref<UsageInfo[]> refUsages) {
|
||||
for (ChangeSignatureUsageProcessor processor : ChangeSignatureUsageProcessor.EP_NAME.getExtensions()) {
|
||||
processor.setupDefaultValues(myChangeInfo, refUsages, myProject);
|
||||
}
|
||||
MultiMap<PsiElement, String> conflictDescriptions = new MultiMap<PsiElement, String>();
|
||||
for (ChangeSignatureUsageProcessor usageProcessor : ChangeSignatureUsageProcessor.EP_NAME.getExtensions()) {
|
||||
final MultiMap<PsiElement, String> conflicts = usageProcessor.findConflicts(myChangeInfo, refUsages);
|
||||
|
||||
+30
-10
@@ -15,7 +15,10 @@
|
||||
*/
|
||||
package com.intellij.refactoring.changeSignature;
|
||||
|
||||
import com.intellij.psi.JavaTokenType;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.impl.source.tree.Factory;
|
||||
import com.intellij.psi.impl.source.tree.SharedImplUtil;
|
||||
import com.intellij.psi.util.PsiUtilBase;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
|
||||
@@ -54,17 +57,34 @@ public class ChangeSignatureUtil {
|
||||
|
||||
Child oldElement = index < elements.size() ? elements.get(index) : null;
|
||||
Child newElement = newElements.get(index);
|
||||
if (!newElement.equals(oldElement)) {
|
||||
if (oldElement != null && elementsToRemove.contains(oldElement)) {
|
||||
oldElement.delete();
|
||||
index--;
|
||||
}
|
||||
else {
|
||||
assert list.isWritable() : PsiUtilBase.getVirtualFile(list);
|
||||
list.addBefore(newElement, oldElement);
|
||||
if (list.equals(newElement.getParent())) {
|
||||
newElement.delete();
|
||||
if (newElement != null) {
|
||||
if (!newElement.equals(oldElement)) {
|
||||
if (oldElement != null && elementsToRemove.contains(oldElement)) {
|
||||
oldElement.delete();
|
||||
index--;
|
||||
}
|
||||
else {
|
||||
assert list.isWritable() : PsiUtilBase.getVirtualFile(list);
|
||||
list.addBefore(newElement, oldElement);
|
||||
if (list.equals(newElement.getParent())) {
|
||||
newElement.delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
PsiElement anchor = null;
|
||||
if (index == 0) {
|
||||
anchor = list.getFirstChild();
|
||||
} else {
|
||||
anchor = elements.get(index - 1);
|
||||
}
|
||||
final PsiElement psi = Factory
|
||||
.createSingleLeafElement(JavaTokenType.COMMA, ",", 0, 1, SharedImplUtil.findCharTableByTree(list.getNode()), list.getManager())
|
||||
.getPsi();
|
||||
if (anchor != null) {
|
||||
list.addAfter(psi, anchor);
|
||||
} else {
|
||||
list.add(psi);
|
||||
}
|
||||
}
|
||||
index++;
|
||||
|
||||
+55
-31
@@ -17,7 +17,6 @@ package com.intellij.refactoring.changeSignature;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.Result;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
@@ -26,16 +25,13 @@ import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.refactoring.BaseRefactoringProcessor;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
import com.intellij.refactoring.util.CanonicalTypes;
|
||||
import com.intellij.usageView.UsageViewUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.VisibilityUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* User: anna
|
||||
@@ -68,29 +64,7 @@ public class JavaChangeSignatureDetector implements LanguageChangeSignatureDetec
|
||||
final MyJavaChangeInfo info = (MyJavaChangeInfo)changeInfo;
|
||||
if (!info.getMethod().equals(method)) return null;
|
||||
if (!info.equals(fromMethod)) {
|
||||
final JavaParameterInfo[] oldParameters = info.getNewParameters();
|
||||
for (int i = 0; i < parameterInfos.length; i++) {
|
||||
ParameterInfoImpl parameterInfo = parameterInfos[i];
|
||||
JavaParameterInfo oldParameter = null;
|
||||
for (JavaParameterInfo parameter : oldParameters) {
|
||||
if (Comparing.strEqual(parameter.getName(), parameterInfo.getName()) &&
|
||||
Comparing.strEqual(parameter.getTypeText(), parameterInfo.getTypeText())) {
|
||||
oldParameter = parameter;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (oldParameter == null && oldParameters.length > i && info.getOldParameterNames().length > i) {
|
||||
if (Comparing.strEqual(info.getOldParameterNames()[i], parameterInfo.getName()) ||
|
||||
Comparing.strEqual(info.getOldParameterTypes()[i], parameterInfo.getTypeText())) {
|
||||
oldParameter = oldParameters[i];
|
||||
}
|
||||
}
|
||||
final int oldParameterIndex = oldParameter != null ? oldParameter.getOldIndex() : -1;
|
||||
parameterInfos[i] = new ParameterInfoImpl(oldParameterIndex,
|
||||
parameterInfo.getName(),
|
||||
parameterInfo.getTypeWrapper().getType(element, element.getManager()),
|
||||
oldParameterIndex == -1 ? "intellijidearulezzz" : "");
|
||||
}
|
||||
createParametersInfo(element, parameterInfos, info);
|
||||
if (info.isReturnTypeChanged()) {
|
||||
final String visibility = info.getNewVisibility();
|
||||
if (Comparing.strEqual(visibility, PsiModifier.PRIVATE) &&
|
||||
@@ -123,11 +97,61 @@ public class JavaChangeSignatureDetector implements LanguageChangeSignatureDetec
|
||||
javaChangeInfo.setSuperMethod(info.getSuperMethod());
|
||||
return javaChangeInfo;
|
||||
}
|
||||
return changeInfo;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void createParametersInfo(PsiElement element,
|
||||
ParameterInfoImpl[] parameterInfos,
|
||||
MyJavaChangeInfo info) {
|
||||
|
||||
final JavaParameterInfo[] oldParameters = info.getNewParameters();
|
||||
final String[] oldParameterNames = info.getOldParameterNames();
|
||||
final String[] oldParameterTypes = info.getOldParameterTypes();
|
||||
final Map<JavaParameterInfo, Integer> untouchedParams = new HashMap<JavaParameterInfo, Integer>();
|
||||
for (int i = 0; i < parameterInfos.length; i++) {
|
||||
ParameterInfoImpl parameterInfo = parameterInfos[i];
|
||||
JavaParameterInfo oldParameter = null;
|
||||
for (JavaParameterInfo parameter : oldParameters) {
|
||||
if (Comparing.strEqual(parameter.getName(), parameterInfo.getName()) &&
|
||||
Comparing.strEqual(parameter.getTypeText(), parameterInfo.getTypeText())) {
|
||||
oldParameter = parameter;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (oldParameter != null) {
|
||||
parameterInfos[i] = new ParameterInfoImpl(oldParameter.getOldIndex(),
|
||||
oldParameter.getName(),
|
||||
oldParameter.getTypeWrapper().getType(element, element.getManager()),
|
||||
null);
|
||||
untouchedParams.put(parameterInfos[i], oldParameter.getOldIndex());
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < parameterInfos.length; i++) {
|
||||
ParameterInfoImpl parameterInfo = parameterInfos[i];
|
||||
if (!untouchedParams.containsKey(parameterInfo)) {
|
||||
JavaParameterInfo oldParameter = null;
|
||||
if (oldParameters.length > i && oldParameterNames.length > i) {
|
||||
if (Comparing.strEqual(oldParameterNames[i], parameterInfo.getName()) ||
|
||||
Comparing.strEqual(oldParameterTypes[i], parameterInfo.getTypeText())) {
|
||||
if (!untouchedParams.containsValue(oldParameters[i].getOldIndex())) {
|
||||
oldParameter = oldParameters[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
parameterInfos[i] = new ParameterInfoImpl(oldParameter != null ? oldParameter.getOldIndex() : - 1,
|
||||
parameterInfo.getName(),
|
||||
parameterInfo.getTypeWrapper().getType(element, element.getManager()),
|
||||
null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static class MyJavaChangeInfo extends JavaChangeInfoImpl {
|
||||
private PsiMethod mySuperMethod;
|
||||
private MyJavaChangeInfo(String newVisibility,
|
||||
@@ -164,11 +188,11 @@ public class JavaChangeSignatureDetector implements LanguageChangeSignatureDetec
|
||||
final MyJavaChangeInfo info = (MyJavaChangeInfo)changeInfo;
|
||||
final PsiMethod method = info.getSuperMethod();
|
||||
|
||||
if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
//if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
temporallyRevertChanges(method, oldText);
|
||||
createChangeSignatureProcessor(info, method).run();
|
||||
return true;
|
||||
}
|
||||
/*}
|
||||
final JavaChangeSignatureDialog dialog =
|
||||
new JavaChangeSignatureDialog(method.getProject(), new JavaMethodDescriptor(info.getMethod()) {
|
||||
@Override
|
||||
@@ -196,7 +220,7 @@ public class JavaChangeSignatureDetector implements LanguageChangeSignatureDetec
|
||||
}
|
||||
};
|
||||
dialog.show();
|
||||
return dialog.isOK();
|
||||
return dialog.isOK();*/
|
||||
}
|
||||
return false;
|
||||
|
||||
|
||||
+43
-2
@@ -17,7 +17,9 @@ package com.intellij.refactoring.changeSignature;
|
||||
|
||||
import com.intellij.codeInsight.ExceptionUtil;
|
||||
import com.intellij.lang.StdLanguages;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
@@ -228,7 +230,7 @@ public class JavaChangeSignatureUsageProcessor implements ChangeSignatureUsagePr
|
||||
final PsiMethod caller = RefactoringUtil.getEnclosingMethod(ref);
|
||||
if (toChangeArguments) {
|
||||
final PsiExpressionList list = RefactoringUtil.getArgumentListByMethodReference(ref);
|
||||
boolean toInsertDefaultValue = !(changeInfo instanceof JavaChangeInfoImpl) || !((JavaChangeInfoImpl)changeInfo).propagateParametersMethods.contains(caller);
|
||||
boolean toInsertDefaultValue = needDefaultValue(changeInfo, caller);
|
||||
if (toInsertDefaultValue && ref instanceof PsiReferenceExpression) {
|
||||
final PsiExpression qualifierExpression = ((PsiReferenceExpression)ref).getQualifierExpression();
|
||||
if (qualifierExpression instanceof PsiSuperExpression && callerSignatureIsAboutToChangeToo(caller, usages)) {
|
||||
@@ -513,7 +515,8 @@ public class JavaChangeSignatureUsageProcessor implements ChangeSignatureUsagePr
|
||||
}
|
||||
}
|
||||
final PsiCallExpression callExpression = PsiTreeUtil.getParentOfType(list, PsiCallExpression.class);
|
||||
return callExpression != null ? info.getValue(callExpression) : factory.createExpressionFromText(info.getDefaultValue(), list);
|
||||
final String defaultValue = info.getDefaultValue();
|
||||
return callExpression != null ? info.getValue(callExpression) : defaultValue.length() > 0 ? factory.createExpressionFromText(defaultValue, list) : null;
|
||||
}
|
||||
|
||||
|
||||
@@ -532,6 +535,44 @@ public class JavaChangeSignatureUsageProcessor implements ChangeSignatureUsagePr
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupDefaultValues(ChangeInfo changeInfo, Ref<UsageInfo[]> refUsages, Project project) {
|
||||
if (!(changeInfo instanceof JavaChangeInfo)) return;
|
||||
for (UsageInfo usageInfo : refUsages.get()) {
|
||||
if (usageInfo instanceof MethodCallUsageInfo) {
|
||||
MethodCallUsageInfo methodCallUsageInfo = (MethodCallUsageInfo)usageInfo;
|
||||
if (methodCallUsageInfo.isToChangeArguments()){
|
||||
final boolean needDefaultValue = needDefaultValue(changeInfo, RefactoringUtil.getEnclosingMethod(methodCallUsageInfo.getElement()));
|
||||
if (needDefaultValue) {
|
||||
final ParameterInfo[] parameters = changeInfo.getNewParameters();
|
||||
for (ParameterInfo parameter : parameters) {
|
||||
final String defaultValue = parameter.getDefaultValue();
|
||||
if (defaultValue == null && parameter.getOldIndex() == -1) {
|
||||
((ParameterInfoImpl)parameter).setDefaultValue("");
|
||||
if (!ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
final DefaultValueChooser chooser = new DefaultValueChooser(project, parameter.getName());
|
||||
chooser.show();
|
||||
if (chooser.isOK()) {
|
||||
if (chooser.feelLucky()) {
|
||||
parameter.setUseAnySingleVariable(true);
|
||||
} else {
|
||||
((ParameterInfoImpl)parameter).setDefaultValue(chooser.getDefaultValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean needDefaultValue(ChangeInfo changeInfo, PsiMethod method) {
|
||||
return !(changeInfo instanceof JavaChangeInfoImpl) ||
|
||||
!((JavaChangeInfoImpl)changeInfo).propagateParametersMethods.contains(method);
|
||||
}
|
||||
|
||||
private static void generateDelegate(JavaChangeInfo changeInfo) throws IncorrectOperationException {
|
||||
final PsiMethod delegate = (PsiMethod)changeInfo.getMethod().copy();
|
||||
final PsiClass targetClass = changeInfo.getMethod().getContainingClass();
|
||||
|
||||
@@ -145,6 +145,7 @@ public class ParameterInfoImpl implements JavaParameterInfo {
|
||||
|
||||
@Nullable
|
||||
public PsiExpression getValue(final PsiCallExpression expr) throws IncorrectOperationException {
|
||||
if (defaultValue != null && defaultValue.length() == 0) return null;
|
||||
return JavaPsiFacade.getInstance(expr.getProject()).getElementFactory().createExpressionFromText(defaultValue, expr);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user