Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import consulo.language.util.IncorrectOperationException;
import consulo.localHistory.LocalHistory;
import consulo.localHistory.LocalHistoryAction;
import consulo.localize.LocalizeValue;
import consulo.logging.Logger;
import consulo.project.Project;
import consulo.ui.annotation.RequiredUIAccess;
Expand Down Expand Up @@ -78,7 +79,7 @@ protected UsageViewDescriptor createUsageViewDescriptor(@Nonnull UsageInfo[] usa
@Override
@RequiredUIAccess
protected boolean preprocessUsages(@Nonnull SimpleReference<UsageInfo[]> refUsages) {
MultiMap<PsiElement, String> conflicts = new MultiMap<>();
MultiMap<PsiElement, LocalizeValue> conflicts = new MultiMap<>();

PsiTypeParameter[] parameters = myClass.getTypeParameters();
Map<String, TypeParameterInfo> infos = new HashMap<>();
Expand All @@ -88,7 +89,9 @@ protected boolean preprocessUsages(@Nonnull SimpleReference<UsageInfo[]> refUsag
if (existing != null) {
conflicts.putValue(
myClass,
RefactoringUIUtil.getDescription(myClass, false) + " already contains type parameter " + newName
LocalizeValue.localizeTODO(
RefactoringUIUtil.getDescription(myClass, false) + " already contains type parameter " + newName
)
);
}
infos.put(newName, info);
Expand Down Expand Up @@ -139,11 +142,11 @@ protected void performRefactoring(@Nonnull UsageInfo[] usages) {
@RequiredWriteAction
private void doRefactoring(UsageInfo[] usages) throws IncorrectOperationException {
PsiTypeParameter[] typeParameters = myClass.getTypeParameters();
boolean[] toRemoveParms = detectRemovedParameters(typeParameters);
boolean[] toRemoveParams = detectRemovedParameters(typeParameters);

for (UsageInfo usage : usages) {
LOG.assertTrue(usage.getElement() instanceof PsiJavaCodeReferenceElement);
processUsage(usage, typeParameters, toRemoveParms);
processUsage(usage, typeParameters, toRemoveParams);
}
Map<PsiTypeElement, PsiClass> supersMap = new HashMap<>();
myClass.accept(new JavaRecursiveElementWalkingVisitor() {
Expand All @@ -152,7 +155,7 @@ public void visitTypeElement(@Nonnull PsiTypeElement typeElement) {
super.visitTypeElement(typeElement);
if (PsiUtil.resolveClassInType(typeElement.getType()) instanceof PsiTypeParameter typeParam) {
int i = ArrayUtil.find(typeParameters, typeParam);
if (i >= 0 && i < toRemoveParms.length && toRemoveParms[i]) {
if (i >= 0 && i < toRemoveParams.length && toRemoveParams[i]) {
supersMap.put(typeElement, typeParam.getSuperClass());
}
}
Expand All @@ -162,11 +165,11 @@ public void visitTypeElement(@Nonnull PsiTypeElement typeElement) {
for (Map.Entry<PsiTypeElement, PsiClass> classEntry : supersMap.entrySet()) {
classEntry.getKey().replace(elementFactory.createTypeElement(elementFactory.createType(classEntry.getValue())));
}
changeClassSignature(typeParameters, toRemoveParms);
changeClassSignature(typeParameters, toRemoveParams);
}

@RequiredWriteAction
private void changeClassSignature(PsiTypeParameter[] originalTypeParameters, boolean[] toRemoveParms)
private void changeClassSignature(PsiTypeParameter[] originalTypeParameters, boolean[] toRemoveParams)
throws IncorrectOperationException {
PsiElementFactory factory = JavaPsiFacade.getInstance(myClass.getProject()).getElementFactory();
List<PsiTypeParameter> newTypeParameters = new ArrayList<>();
Expand All @@ -179,23 +182,23 @@ private void changeClassSignature(PsiTypeParameter[] originalTypeParameters, boo
newTypeParameters.add(factory.createTypeParameterFromText(info.getNewName(), null));
}
}
ChangeSignatureUtil.synchronizeList(myClass.getTypeParameterList(), newTypeParameters, TypeParameterList.INSTANCE, toRemoveParms);
ChangeSignatureUtil.synchronizeList(myClass.getTypeParameterList(), newTypeParameters, TypeParameterList.INSTANCE, toRemoveParams);
}

private boolean[] detectRemovedParameters(PsiTypeParameter[] originaltypeParameters) {
boolean[] toRemoveParms = new boolean[originaltypeParameters.length];
Arrays.fill(toRemoveParms, true);
private boolean[] detectRemovedParameters(PsiTypeParameter[] originalTypeParams) {
boolean[] toRemoveParams = new boolean[originalTypeParams.length];
Arrays.fill(toRemoveParams, true);
for (TypeParameterInfo info : myNewSignature) {
int oldParameterIndex = info.getOldParameterIndex();
if (oldParameterIndex >= 0) {
toRemoveParms[oldParameterIndex] = false;
toRemoveParams[oldParameterIndex] = false;
}
}
return toRemoveParms;
return toRemoveParams;
}

@RequiredWriteAction
private void processUsage(UsageInfo usage, PsiTypeParameter[] originalTypeParameters, boolean[] toRemoveParms)
private void processUsage(UsageInfo usage, PsiTypeParameter[] originalTypeParameters, boolean[] toRemoveParams)
throws IncorrectOperationException {
PsiElementFactory factory = JavaPsiFacade.getInstance(myClass.getProject()).getElementFactory();
PsiJavaCodeReferenceElement referenceElement = (PsiJavaCodeReferenceElement)usage.getElement();
Expand All @@ -219,7 +222,7 @@ private void processUsage(UsageInfo usage, PsiTypeParameter[] originalTypeParame
newValues.add(newValue);
}
}
ChangeSignatureUtil.synchronizeList(referenceParameterList, newValues, ReferenceParameterList.INSTANCE, toRemoveParms);
ChangeSignatureUtil.synchronizeList(referenceParameterList, newValues, ReferenceParameterList.INSTANCE, toRemoveParams);
}

private PsiSubstitutor determineUsageSubstitutor(PsiJavaCodeReferenceElement referenceElement) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
import com.intellij.java.language.psi.*;
import com.intellij.java.language.psi.util.*;
import com.intellij.java.language.util.VisibilityUtil;
import consulo.annotation.access.RequiredReadAction;
import consulo.annotation.access.RequiredWriteAction;
import consulo.component.extension.ExtensionPoint;
import consulo.java.impl.refactoring.changeSignature.ChangeSignatureUsageProcessorEx;
import consulo.language.codeStyle.CodeStyleManager;
Expand All @@ -35,6 +37,7 @@
import consulo.language.editor.refactoring.ui.ConflictsDialog;
import consulo.language.psi.PsiElement;
import consulo.language.util.IncorrectOperationException;
import consulo.localize.LocalizeValue;
import consulo.logging.Logger;
import consulo.project.Project;
import consulo.ui.annotation.RequiredUIAccess;
Expand All @@ -53,6 +56,7 @@
public class ChangeSignatureProcessor extends ChangeSignatureProcessorBase {
private static final Logger LOG = Logger.getInstance(ChangeSignatureProcessor.class);

@RequiredReadAction
public ChangeSignatureProcessor(
Project project,
PsiMethod method,
Expand All @@ -76,6 +80,7 @@ public ChangeSignatureProcessor(
);
}

@RequiredReadAction
public ChangeSignatureProcessor(
Project project,
PsiMethod method,
Expand All @@ -100,6 +105,7 @@ public ChangeSignatureProcessor(
);
}

@RequiredReadAction
public ChangeSignatureProcessor(
Project project,
PsiMethod method,
Expand Down Expand Up @@ -128,11 +134,13 @@ public ChangeSignatureProcessor(
);
}

@RequiredReadAction
public ChangeSignatureProcessor(Project project, JavaChangeInfo changeInfo) {
super(project, changeInfo);
LOG.assertTrue(myChangeInfo.getMethod().isValid());
}

@RequiredReadAction
private static JavaChangeInfo generateChangeInfo(
PsiMethod method,
boolean generateDelegate,
Expand Down Expand Up @@ -173,14 +181,14 @@ protected UsageViewDescriptor createUsageViewDescriptor(@Nonnull UsageInfo[] usa

@Override
public JavaChangeInfoImpl getChangeInfo() {
return (JavaChangeInfoImpl)super.getChangeInfo();
return (JavaChangeInfoImpl) super.getChangeInfo();
}

@Override
protected void refreshElements(PsiElement[] elements) {
boolean condition = elements.length == 1 && elements[0] instanceof PsiMethod;
LOG.assertTrue(condition);
getChangeInfo().updateMethod((PsiMethod)elements[0]);
getChangeInfo().updateMethod((PsiMethod) elements[0]);
}

@Override
Expand All @@ -197,11 +205,11 @@ protected boolean preprocessUsages(@Nonnull SimpleReference<UsageInfo[]> refUsag
return false;
}

MultiMap<PsiElement, String> conflictDescriptions = new MultiMap<>();
MultiMap<PsiElement, LocalizeValue> conflictDescriptions = new MultiMap<>();
extensionPoint.forEach(usageProcessor -> {
MultiMap<PsiElement, String> conflicts = usageProcessor.findConflicts(myChangeInfo, refUsages);
MultiMap<PsiElement, LocalizeValue> conflicts = usageProcessor.findConflicts(myChangeInfo, refUsages);
for (PsiElement key : conflicts.keySet()) {
Collection<String> collection = conflictDescriptions.get(key);
Collection<LocalizeValue> collection = conflictDescriptions.get(key);
if (collection.size() == 0) {
collection = new HashSet<>();
}
Expand Down Expand Up @@ -289,6 +297,7 @@ protected boolean isProcessCovariantOverriders() {
) == DialogWrapper.OK_EXIT_CODE;
}

@RequiredWriteAction
public static void makeEmptyBody(PsiElementFactory factory, PsiMethod delegate) throws IncorrectOperationException {
PsiCodeBlock body = delegate.getBody();
if (body != null) {
Expand All @@ -311,19 +320,19 @@ public static PsiCallExpression addDelegatingCallTemplate(PsiMethod delegate, St
PsiElement callStatement = factory.createStatementFromText("this();", null);
callStatement = CodeStyleManager.getInstance(project).reformat(callStatement);
callStatement = body.add(callStatement);
callExpression = (PsiCallExpression)((PsiExpressionStatement)callStatement).getExpression();
callExpression = (PsiCallExpression) ((PsiExpressionStatement) callStatement).getExpression();
}
else if (PsiType.VOID.equals(delegate.getReturnType())) {
PsiElement callStatement = factory.createStatementFromText(newName + "();", null);
callStatement = CodeStyleManager.getInstance(project).reformat(callStatement);
callStatement = body.add(callStatement);
callExpression = (PsiCallExpression)((PsiExpressionStatement)callStatement).getExpression();
callExpression = (PsiCallExpression) ((PsiExpressionStatement) callStatement).getExpression();
}
else {
PsiElement callStatement = factory.createStatementFromText("return " + newName + "();", null);
callStatement = CodeStyleManager.getInstance(project).reformat(callStatement);
callStatement = body.add(callStatement);
callExpression = (PsiCallExpression)((PsiReturnStatement)callStatement).getReturnValue();
callExpression = (PsiCallExpression) ((PsiReturnStatement) callStatement).getReturnValue();
}
return callExpression;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ else if (element instanceof PsiDocTagValue) {
@RequiredUIAccess
protected boolean preprocessUsages(@Nonnull SimpleReference<UsageInfo[]> refUsages) {
UsageInfo[] usagesIn = refUsages.get();
MultiMap<PsiElement, String> conflicts = new MultiMap<>();
MultiMap<PsiElement, LocalizeValue> conflicts = new MultiMap<>();
Set<PsiMember> methods = Collections.singleton((PsiMember)myMethod);
if (!myTargetClass.isInterface()) {
RefactoringConflictsUtil.analyzeAccessibilityConflicts(methods, myTargetClass, conflicts, myNewVisibility);
Expand Down Expand Up @@ -174,7 +174,7 @@ protected boolean preprocessUsages(@Nonnull SimpleReference<UsageInfo[]> refUsag
RefactoringUIUtil.getDescription(ConflictsUtil.getContainer(methodCall), true),
CommonRefactoringUtil.htmlEmphasize(myTargetParameter.getName())
);
conflicts.putValue(methodCall, message.get());
conflicts.putValue(methodCall, message);
}
}
}
Expand Down Expand Up @@ -350,11 +350,8 @@ private void processParameterUsage(ParameterUsageInfo usage) throws IncorrectOpe
refExpr.replace(expression);
}
}
else {
PsiElement element = reference.getElement();
if (element instanceof PsiDocParamRef) {
element.getParent().delete();
}
else if (reference.getElement() instanceof PsiDocParamRef docParamRef) {
docParamRef.getParent().delete();
}
}

Expand Down
Loading
Loading