type migration: cleanup (warnings)

This commit is contained in:
Dmitry Batkovich
2016-10-17 21:54:50 +03:00
parent 34c9776d92
commit 66402ebb25
17 changed files with 49 additions and 59 deletions
@@ -80,7 +80,7 @@ public class TypeConversionDescriptor extends TypeConversionDescriptorBase {
}
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) {
if (getExpression() != null) expression = getExpression();
return replaceExpression(expression, getStringToReplace(), getReplaceByString());
}
@@ -348,7 +348,7 @@ public class GuavaInspection extends BaseJavaLocalInspectionTool {
throw new AssertionError();
}
private boolean performTypeMigration(List<PsiElement> elements, List<PsiType> types) {
private void performTypeMigration(List<PsiElement> elements, List<PsiType> types) {
PsiFile containingFile = null;
for (PsiElement element : elements) {
final PsiFile currentContainingFile = element.getContainingFile();
@@ -360,7 +360,7 @@ public class GuavaInspection extends BaseJavaLocalInspectionTool {
}
}
LOG.assertTrue(containingFile != null);
if (!FileModificationService.getInstance().prepareFileForWrite(containingFile)) return false;
if (!FileModificationService.getInstance().prepareFileForWrite(containingFile)) return;
try {
final TypeMigrationRules rules = new TypeMigrationRules();
rules.setBoundScope(GlobalSearchScopesCore.projectProductionScope(containingFile.getProject())
@@ -377,7 +377,6 @@ public class GuavaInspection extends BaseJavaLocalInspectionTool {
catch (IncorrectOperationException e) {
LOG.error(e);
}
return true;
}
private Function<PsiElement, PsiType> createMigrationTypeFunction(@NotNull final List<PsiElement> elements,
@@ -12,7 +12,6 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Pair;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.impl.AllowedApiFilterExtension;
@@ -23,7 +22,6 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.typeMigration.*;
import com.intellij.refactoring.typeMigration.rules.ThreadLocalConversionRule;
import com.intellij.refactoring.typeMigration.usageInfo.TypeMigrationUsageInfo;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.Query;
@@ -31,7 +29,6 @@ import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
@@ -43,13 +40,15 @@ public class ConvertFieldToThreadLocalIntention extends PsiElementBaseIntentionA
@NotNull
@Override
public String getText() {
return "Convert to ThreadLocal";
//noinspection DialogTitleCapitalization
return getFamilyName();
}
@NotNull
@Override
public String getFamilyName() {
return getText();
//noinspection DialogTitleCapitalization
return "Convert to ThreadLocal";
}
@Override
@@ -120,7 +120,7 @@ public class AtomicConversionRule extends TypeConversionRule {
return new TypeConversionDescriptor("$qualifier$ " + sign + " $val$",
"$qualifier$.addAndGet(" + (operationSign == JavaTokenType.MINUSEQ ? "-($val$))" : "$val$)")) {
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) {
final PsiMethodCallExpression result = (PsiMethodCallExpression)super.replace(expression, evaluator);
final PsiExpression argument = result.getArgumentList().getExpressions()[0];
if (argument instanceof PsiPrefixExpression) {
@@ -81,7 +81,7 @@ public class ListArrayConversionRule extends TypeConversionRule {
}
}
if (member instanceof PsiField && member.getName().equals("length")) {
if (member instanceof PsiField && "length".equals(member.getName())) {
return new TypeConversionDescriptor("$qualifier$.length", "$qualifier$.size()");
}
@@ -102,22 +102,20 @@ public class ListArrayConversionRule extends TypeConversionRule {
@Nullable
public static PsiType evaluateCollectionsType(PsiClassType classType, PsiExpression expression) {
final PsiClassType.ClassResolveResult classResolveResult = PsiUtil.resolveGenericsClassInType(classType);
if (classResolveResult != null) {
final PsiClass psiClass = classResolveResult.getElement();
if (psiClass != null) {
final GlobalSearchScope allScope = GlobalSearchScope.allScope(psiClass.getProject());
final PsiClass collectionClass =
JavaPsiFacade.getInstance(psiClass.getProject()).findClass(CommonClassNames.JAVA_UTIL_LIST, allScope);
if (collectionClass != null && InheritanceUtil.isInheritorOrSelf(psiClass, collectionClass, true)) {
final PsiSubstitutor derivedSubstitutor = classResolveResult.getSubstitutor();
if (PsiUtil.isRawSubstitutor(psiClass, derivedSubstitutor)) return null;
final PsiSubstitutor substitutor =
TypeConversionUtil.getClassSubstitutor(collectionClass, psiClass, derivedSubstitutor);
assert substitutor != null;
final PsiType type = substitutor.substitute(collectionClass.getTypeParameters()[0]);
assert type != null;
return PsiImplUtil.normalizeWildcardTypeByPosition(type, expression);
}
final PsiClass psiClass = classResolveResult.getElement();
if (psiClass != null) {
final GlobalSearchScope allScope = GlobalSearchScope.allScope(psiClass.getProject());
final PsiClass collectionClass =
JavaPsiFacade.getInstance(psiClass.getProject()).findClass(CommonClassNames.JAVA_UTIL_LIST, allScope);
if (collectionClass != null && InheritanceUtil.isInheritorOrSelf(psiClass, collectionClass, true)) {
final PsiSubstitutor derivedSubstitutor = classResolveResult.getSubstitutor();
if (PsiUtil.isRawSubstitutor(psiClass, derivedSubstitutor)) return null;
final PsiSubstitutor substitutor =
TypeConversionUtil.getClassSubstitutor(collectionClass, psiClass, derivedSubstitutor);
assert substitutor != null;
final PsiType type = substitutor.substitute(collectionClass.getTypeParameters()[0]);
assert type != null;
return PsiImplUtil.normalizeWildcardTypeByPosition(type, expression);
}
}
return null;
@@ -23,6 +23,7 @@ import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Locale;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
@@ -58,7 +59,7 @@ public class LongAdderConversionRule extends TypeConversionRule {
if (INCREMENT_DECREMENT_METHODS.contains(name)) {
if (isMethodCallWithIgnoredReturnValue(context)) return null;
assert name != null;
String replacementMethodName = name.toLowerCase().contains("increment") ? "increment" : "decrement";
String replacementMethodName = name.toLowerCase(Locale.ROOT).contains("increment") ? "increment" : "decrement";
return new TypeConversionDescriptor("$v$.$method$()", "$v$." + replacementMethodName + "()");
}
else if ("getAndAdd".equals(name) || "addAndGet".equals(name)) {
@@ -87,7 +88,7 @@ public class LongAdderConversionRule extends TypeConversionRule {
return null;
}
private boolean isMethodCallWithIgnoredReturnValue(PsiExpression context) {
private static boolean isMethodCallWithIgnoredReturnValue(PsiExpression context) {
final PsiElement methodCall = context.getParent();
if (!(methodCall instanceof PsiMethodCallExpression)) {
return true;
@@ -7,7 +7,6 @@ package com.intellij.refactoring.typeMigration.rules;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Comparing;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiDiamondTypeUtil;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.TypeConversionUtil;
@@ -212,7 +211,6 @@ public class ThreadLocalConversionRule extends TypeConversionRule {
final PsiType initial = resolveResult.getSubstitutor().substitute(typeParameters[0]);
final PsiPrimitiveType unboxedInitialType = PsiPrimitiveType.getUnboxedType(initial);
if (unboxedInitialType != null) {
LOG.assertTrue(initial != null);
if (tryType != null) {
final PsiType exprType = labeler.getTypeEvaluator().evaluateType(
JavaPsiFacade.getElementFactory(threadLocalClass.getProject()).createExpressionFromText(tryType, context));
@@ -46,7 +46,7 @@ public abstract class BaseGuavaTypeConversionRule extends TypeConversionRule {
}
};
protected void fillSimpleDescriptors(Map<String, TypeConversionDescriptorBase> descriptorsMap) {};
protected void fillSimpleDescriptors(Map<String, TypeConversionDescriptorBase> descriptorsMap) {}
@Nullable
protected TypeConversionDescriptorBase findConversionForMethod(PsiType from,
@@ -56,7 +56,7 @@ public abstract class BaseGuavaTypeConversionRule extends TypeConversionRule {
PsiExpression context,
TypeMigrationLabeler labeler) {
return null;
};
}
@Nullable
protected TypeConversionDescriptorBase findConversionForVariableReference(@NotNull PsiReferenceExpression referenceExpression,
@@ -76,7 +76,7 @@ public class FluentIterableConversionUtil {
PsiType myType = parameters[0];
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) throws IncorrectOperationException {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) throws IncorrectOperationException {
if (!JavaGenericsUtil.isReifiableType(myType)) {
final String chosenName = chooseName(expression, PsiType.INT);
final PsiType arrayType;
@@ -137,7 +137,7 @@ public class FluentIterableConversionUtil {
}
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator typeEvaluator) {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator typeEvaluator) {
PsiExpression argument = ((PsiMethodCallExpression)expression).getArgumentList().getExpressions()[0];
PsiAnonymousClass anonymousClass;
@@ -235,7 +235,7 @@ public class FluentIterableConversionUtil {
}
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) {
final PsiExpression argument = ((PsiMethodCallExpression)expression).getArgumentList().getExpressions()[0];
final PsiExpression newArgument = JavaPsiFacade.getElementFactory(expression.getProject()).createExpressionFromText("(" + argument.getText() + ")::isInstance", argument);
ParenthesesUtils.removeParentheses((PsiExpression)((PsiMethodReferenceExpression)newArgument).getQualifier(), false);
@@ -286,7 +286,7 @@ public class FluentIterableConversionUtil {
}
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) {
final JavaPsiFacade facade = JavaPsiFacade.getInstance(expression.getProject());
final PsiClass javaUtilCollection = facade.findClass(CommonClassNames.JAVA_UTIL_COLLECTION, expression.getResolveScope());
LOG.assertTrue(javaUtilCollection != null);
@@ -307,7 +307,7 @@ public class FluentIterableConversionUtil {
}
@Nullable
private PsiType getQualifierElementType(PsiMethodCallExpression expression) {
private static PsiType getQualifierElementType(PsiMethodCallExpression expression) {
final PsiExpression qualifier = expression.getMethodExpression().getQualifierExpression();
if (qualifier == null) return null;
final PsiType type = qualifier.getType();
@@ -40,7 +40,7 @@ public class FunctionalInterfaceTypeConversionDescriptor extends TypeConversionD
}
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) {
if (expression.getParent() instanceof PsiMethodReferenceExpression) {
expression = (PsiExpression)expression.getParent();
}
@@ -142,7 +142,7 @@ public class GuavaFluentIterableConversionRule extends BaseGuavaTypeConversionRu
} else if (methodName.equals("from")) {
descriptorBase = new TypeConversionDescriptor("'FluentIterable*.from($it$)", null) {
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) {
final PsiMethodCallExpression methodCall = (PsiMethodCallExpression)expression;
PsiExpression argument =
PseudoLambdaReplaceTemplate.replaceTypeParameters(methodCall.getArgumentList().getExpressions()[0]);
@@ -162,7 +162,7 @@ public class GuavaFluentIterableConversionRule extends BaseGuavaTypeConversionRu
} else if (methodName.equals("isEmpty")) {
descriptorBase = new TypeConversionDescriptor("$q$.isEmpty()", null) {
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) {
final PsiElement parent = expression.getParent();
boolean isDoubleNegation = false;
if (parent instanceof PsiExpression && DoubleNegationInspection.isNegation((PsiExpression)parent)) {
@@ -191,7 +191,7 @@ public class GuavaFluentIterableConversionRule extends BaseGuavaTypeConversionRu
else if (methodName.equals("get")) {
descriptorBase = new TypeConversionDescriptor("$it$.get($p$)", null) {
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) {
PsiMethodCallExpression methodCall = (PsiMethodCallExpression)expression;
final PsiExpression[] arguments = methodCall.getArgumentList().getExpressions();
setReplaceByString("$it$.skip($p$).findFirst().get()");
@@ -209,7 +209,7 @@ public class GuavaFluentIterableConversionRule extends BaseGuavaTypeConversionRu
else if (methodName.equals("contains")) {
descriptorBase = new TypeConversionDescriptor("$it$.contains($o$)", null) {
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) {
final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)expression;
final PsiExpression qualifier = methodCallExpression.getMethodExpression().getQualifierExpression();
LOG.assertTrue(qualifier != null);
@@ -232,7 +232,7 @@ public class GuavaFluentIterableConversionRule extends BaseGuavaTypeConversionRu
else if (methodName.equals("last")) {
descriptorBase = new TypeConversionDescriptor("$it$.last()", null) {
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) {
final JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(expression.getProject());
String varA = suggestName("a", codeStyleManager, expression);
String varB = suggestName("b", codeStyleManager, expression);
@@ -373,7 +373,7 @@ public class GuavaFluentIterableConversionRule extends BaseGuavaTypeConversionRu
private static void addToMigrateChainQualifier(TypeMigrationLabeler labeler, PsiExpression qualifier) {
final PsiClass qClass = PsiTypesUtil.getPsiClass(qualifier.getType());
final boolean isFluentIterable;
if (qClass != null && ((isFluentIterable = GuavaFluentIterableConversionRule.FLUENT_ITERABLE.equals(qClass.getQualifiedName())) ||
if (qClass != null && ((isFluentIterable = FLUENT_ITERABLE.equals(qClass.getQualifiedName())) ||
GuavaOptionalConversionRule.GUAVA_OPTIONAL.equals(qClass.getQualifiedName()))) {
labeler.migrateExpressionType(qualifier,
GuavaConversionUtil.addTypeParameters(isFluentIterable ? StreamApiConstants.JAVA_UTIL_STREAM_STREAM :
@@ -395,7 +395,7 @@ public class GuavaFluentIterableConversionRule extends BaseGuavaTypeConversionRu
}
@Override
public PsiExpression replace(@NotNull PsiExpression expression, TypeEvaluator evaluator) throws IncorrectOperationException {
public PsiExpression replace(@NotNull PsiExpression expression, @NotNull TypeEvaluator evaluator) throws IncorrectOperationException {
Stack<PsiMethodCallExpression> methodChainStack = new Stack<>();
PsiMethodCallExpression current = (PsiMethodCallExpression) expression;
while (current != null) {
@@ -61,7 +61,7 @@ public class GuavaOptionalConversionRule extends BaseGuavaTypeConversionRule {
TypeConversionDescriptor descriptor =
new TypeConversionDescriptor(null, "java.util.Optional.ofNullable($val$.orElseGet($o$::get))") {
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) {
setStringToReplace("$val$.or(" +
GuavaOptionalConversionUtil.simplifyParameterPattern((PsiMethodCallExpression)expression)
+ ")");
@@ -121,7 +121,7 @@ public class GuavaOptionalConversionRule extends BaseGuavaTypeConversionRule {
return new TypeConversionDescriptor("$o$", "$o$::get");
}
private PsiClass getParameterClass(PsiMethod method) {
private static PsiClass getParameterClass(PsiMethod method) {
final PsiParameter[] parameters = method.getParameterList().getParameters();
if (parameters.length != 1) {
return null;
@@ -133,7 +133,7 @@ public class GuavaOptionalConversionRule extends BaseGuavaTypeConversionRule {
protected void fillSimpleDescriptors(Map<String, TypeConversionDescriptorBase> descriptorsMap) {
descriptorsMap.put("absent", new TypeConversionDescriptor("'Optional*.absent()", "java.util.Optional.empty()") {
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) {
LOG.assertTrue(expression instanceof PsiMethodCallExpression);
final PsiReferenceParameterList typeArguments = ((PsiMethodCallExpression)expression).getTypeArgumentList();
@@ -17,12 +17,9 @@ package com.intellij.refactoring.typeMigration.rules.guava;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiMatcherExpression;
import com.intellij.refactoring.typeMigration.TypeConversionDescriptor;
import com.intellij.structuralsearch.MatchOptions;
import com.intellij.structuralsearch.MatchResult;
import com.intellij.structuralsearch.Matcher;
import com.intellij.structuralsearch.plugin.replace.impl.Replacer;
import org.jetbrains.annotations.Nullable;
import java.util.List;
@@ -24,7 +24,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
/**
@@ -63,7 +62,7 @@ public class GuavaPredicateConversionRule extends GuavaLambdaConversionRule {
}
return new TypeConversionDescriptorBase() {
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) throws IncorrectOperationException {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) throws IncorrectOperationException {
return (PsiExpression)expression.replace(JavaPsiFacade.getElementFactory(expression.getProject()).createExpressionFromText(expression.getText() + "::apply", expression));
}
};
@@ -69,7 +69,7 @@ public class GuavaPredicatesUtil {
@NotNull
private static TypeConversionDescriptorWithLocalVariable createConstantPredicate(String methodName, boolean value) {
return new TypeConversionDescriptorWithLocalVariable(methodName, "$x$ -> " + value + "");
return new TypeConversionDescriptorWithLocalVariable(methodName, "$x$ -> " + value);
}
private static class TypeConversionDescriptorWithLocalVariable extends TypeConversionDescriptor {
@@ -81,7 +81,7 @@ public class GuavaPredicatesUtil {
}
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) {
final String chosenName = FluentIterableConversionUtil.chooseName(expression, getIntroducedVariableType(expression));
setReplaceByString(StringUtil.replace(myReplaceByStringTemplate, "$x$", chosenName));
return super.replace(expression, evaluator);
@@ -24,6 +24,7 @@ import com.intellij.refactoring.typeMigration.TypeEvaluator;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
@@ -45,7 +46,7 @@ public class GuavaTypeConversionDescriptor extends TypeConversionDescriptor {
}
@Override
public PsiExpression replace(PsiExpression expression, TypeEvaluator evaluator) throws IncorrectOperationException {
public PsiExpression replace(PsiExpression expression, @NotNull TypeEvaluator evaluator) throws IncorrectOperationException {
setReplaceByString(myReplaceByStringSource + (isIterable(expression) ? ".collect(java.util.stream.Collectors.toList())" : ""));
if (myConvertParameterAsLambda) {
LOG.assertTrue(expression instanceof PsiMethodCallExpression);
@@ -17,8 +17,6 @@ package com.intellij.refactoring.typeMigration.rules.guava;
import com.intellij.codeInspection.java18StreamApi.StreamApiConstants;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTypesUtil;
import com.intellij.refactoring.typeMigration.TypeConversionDescriptor;
import com.intellij.refactoring.typeMigration.TypeConversionDescriptorBase;
import com.intellij.refactoring.typeMigration.TypeMigrationLabeler;
import com.intellij.refactoring.typeMigration.rules.TypeConversionRule;