Java: Minor refactoring of quick fix for DuplicatesInspection (IDEA-144957)

This commit is contained in:
Pavel Dolgov
2017-08-21 13:13:56 +03:00
parent 16307e9fdb
commit f3dcb0fd01
3 changed files with 23 additions and 27 deletions
@@ -343,9 +343,9 @@ public class InputVariables {
}
}
public void foldAdditionalParameter(@NotNull PsiVariable additionalParameter, @NotNull PsiExpression value) {
public void foldExtractedParameter(@NotNull PsiVariable extractedParameter, @NotNull PsiExpression value) {
myFoldingAvailable = true;
myFolding.putCallArgument(additionalParameter, value);
myFolding.putCallArgument(extractedParameter, value);
}
public boolean isFoldingSelectedByDefault() {
@@ -32,28 +32,26 @@ import java.util.Set;
/**
* @author Pavel.Dolgov
*/
public class AdditionalParameter {
public class ExtractedParameter {
@NotNull public final List<PsiReferenceExpression> myPatternUsages = new ArrayList<>();
@NotNull public final PsiVariable myPatternVariable;
@NotNull public final List<PsiReferenceExpression> myCandidateUsages = new ArrayList<>();
@NotNull public final PsiReferenceExpression myCandidateUsage;
@NotNull public final PsiVariable myCandidateVariable;
@NotNull public final PsiType myType;
AdditionalParameter(@NotNull PsiVariable patternVariable,
@NotNull PsiVariable candidateVariable,
@NotNull PsiType type) {
ExtractedParameter(@NotNull PsiVariable patternVariable,
@NotNull PsiReferenceExpression patternUsage,
@NotNull PsiVariable candidateVariable,
@NotNull PsiReferenceExpression candidateUsage,
@NotNull PsiType type) {
myPatternVariable = patternVariable;
myPatternUsages.add(patternUsage);
myCandidateVariable = candidateVariable;
myCandidateUsage = candidateUsage;
myType = type;
}
void addUsage(@NotNull PsiReferenceExpression patternUsage,
@NotNull PsiReferenceExpression candidateUsage) {
myPatternUsages.add(patternUsage);
myCandidateUsages.add(candidateUsage);
}
public static boolean match(PsiElement pattern, PsiElement candidate, @NotNull List<AdditionalParameter> additionalParameters) {
public static boolean match(PsiElement pattern, PsiElement candidate, @NotNull List<ExtractedParameter> parameters) {
if (pattern instanceof PsiReferenceExpression && candidate instanceof PsiReferenceExpression) {
PsiReferenceExpression patternUsage = (PsiReferenceExpression)pattern;
PsiReferenceExpression candidateUsage = (PsiReferenceExpression)candidate;
@@ -64,11 +62,11 @@ public class AdditionalParameter {
PsiVariable candidateVariable = (PsiVariable)resolvedCandidate;
if (isStaticOrLocal(patternVariable) && isStaticOrLocal(candidateVariable)) {
for (AdditionalParameter additionalParameter : additionalParameters) {
boolean samePattern = resolvedPattern.equals(additionalParameter.myPatternVariable);
boolean sameCandidate = resolvedCandidate.equals(additionalParameter.myCandidateVariable);
for (ExtractedParameter parameter : parameters) {
boolean samePattern = resolvedPattern.equals(parameter.myPatternVariable);
boolean sameCandidate = resolvedCandidate.equals(parameter.myCandidateVariable);
if (samePattern && sameCandidate) {
additionalParameter.addUsage(patternUsage, candidateUsage);
parameter.myPatternUsages.add(patternUsage);
return true;
}
if (samePattern || sameCandidate) {
@@ -77,9 +75,7 @@ public class AdditionalParameter {
}
PsiType type = getParameterType(patternVariable, candidateVariable);
if (type != null) {
AdditionalParameter additionalParameter = new AdditionalParameter(patternVariable, candidateVariable, type);
additionalParameters.add(additionalParameter);
additionalParameter.addUsage(patternUsage, candidateUsage);
parameters.add(new ExtractedParameter(patternVariable, patternUsage, candidateVariable, candidateUsage, type));
return true;
}
}
@@ -93,7 +89,7 @@ public class AdditionalParameter {
Set<PsiVariable> patternVariables = null;
List<Match> result = new ArrayList<>();
for (Match match : matches) {
List<AdditionalParameter> parameters = match.getAdditionalParameters();
List<ExtractedParameter> parameters = match.getExtractedParameters();
if (patternVariables == null) {
patternVariables = getPatternVariables(parameters);
if (containsModifiedField(pattern, patternVariables)) {
@@ -127,7 +123,7 @@ public class AdditionalParameter {
}
@NotNull
static Set<PsiVariable> getPatternVariables(@Nullable List<AdditionalParameter> parameters) {
static Set<PsiVariable> getPatternVariables(@Nullable List<ExtractedParameter> parameters) {
if (parameters != null) {
return ContainerUtil.map2Set(parameters, parameter -> parameter.myPatternVariable);
}
@@ -55,7 +55,7 @@ public final class Match {
private Ref<PsiExpression> myInstanceExpression;
final Map<PsiVariable, PsiType> myChangedParams = new HashMap<>();
private final boolean myIgnoreParameterTypes;
private final List<AdditionalParameter> myAdditionalParameters = new ArrayList<>();
private final List<ExtractedParameter> myExtractedParameters = new ArrayList<>();
Match(PsiElement start, PsiElement end, boolean ignoreParameterTypes) {
LOG.assertTrue(start.getParent() == end.getParent());
@@ -425,10 +425,10 @@ public final class Match {
}
public boolean putAdditionalParameter(@NotNull PsiElement pattern, @NotNull PsiElement candidate) {
return AdditionalParameter.match(pattern, candidate, myAdditionalParameters);
return ExtractedParameter.match(pattern, candidate, myExtractedParameters);
}
public List<AdditionalParameter> getAdditionalParameters() {
return myAdditionalParameters;
public List<ExtractedParameter> getExtractedParameters() {
return myExtractedParameters;
}
}