mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
replace with collect: insert cast for method reference and simplify when redundant (IDEA-139704)
This commit is contained in:
+25
-3
@@ -22,7 +22,6 @@ import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
@@ -35,12 +34,16 @@ import com.intellij.psi.search.searches.ReferencesSearch;
|
||||
import com.intellij.psi.util.InheritanceUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.RedundantCastUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.IntArrayList;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* User: anna
|
||||
@@ -297,6 +300,8 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo
|
||||
(PsiExpressionStatement)callStatement.replace(elementFactory.createStatementFromText(buffer.toString() + "(" + parameter.getText() + ") -> " + wrapInBlock(body) + ");", callStatement));
|
||||
}
|
||||
|
||||
simplifyRedundantCast(callStatement);
|
||||
|
||||
CodeStyleManager.getInstance(project).reformat(callStatement);
|
||||
}
|
||||
}
|
||||
@@ -383,6 +388,7 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo
|
||||
restoreComments(foreachStatement, body);
|
||||
final String callText = builder.toString() + createInitializerReplacementText(initializer) + ")";
|
||||
result = initializer.replace(elementFactory.createExpressionFromText(callText, null));
|
||||
simplifyRedundantCast(result);
|
||||
foreachStatement.delete();
|
||||
return;
|
||||
}
|
||||
@@ -394,6 +400,7 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo
|
||||
final String qualifierText = qualifierExpression != null ? qualifierExpression.getText() : "";
|
||||
final String callText = StringUtil.getQualifiedName(qualifierText, "addAll(" + builder.toString() + "toList()));");
|
||||
result = foreachStatement.replace(elementFactory.createStatementFromText(callText, foreachStatement));
|
||||
simplifyRedundantCast(result);
|
||||
}
|
||||
finally {
|
||||
if (result != null) {
|
||||
@@ -427,7 +434,8 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo
|
||||
.canBeMethodReferenceProblem(expression, new PsiParameter[]{parameter}, functionalInterfaceType);
|
||||
final String methodReferenceText = LambdaCanBeMethodReferenceInspection.createMethodReferenceText(toConvertCall, functionalInterfaceType, new PsiParameter[]{parameter});
|
||||
if (methodReferenceText != null) {
|
||||
iteration += methodReferenceText;
|
||||
LOG.assertTrue(functionalInterfaceType != null);
|
||||
iteration += "(" + functionalInterfaceType.getCanonicalText() + ")" + methodReferenceText;
|
||||
} else {
|
||||
iteration += parameter.getName() + " -> " + expression.getText();
|
||||
}
|
||||
@@ -441,6 +449,20 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo
|
||||
}
|
||||
}
|
||||
|
||||
private static void simplifyRedundantCast(PsiElement result) {
|
||||
final PsiMethodReferenceExpression methodReferenceExpression = PsiTreeUtil.findChildOfType(result, PsiMethodReferenceExpression.class);
|
||||
if (methodReferenceExpression != null) {
|
||||
final PsiElement parent = methodReferenceExpression.getParent();
|
||||
if (parent instanceof PsiTypeCastExpression) {
|
||||
if (RedundantCastUtil.isCastRedundant((PsiTypeCastExpression)parent)) {
|
||||
final PsiExpression operand = ((PsiTypeCastExpression)parent).getOperand();
|
||||
LOG.assertTrue(operand != null);
|
||||
parent.replace(operand);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void restoreComments(PsiForeachStatement foreachStatement, PsiStatement body) {
|
||||
final PsiElement parent = foreachStatement.getParent();
|
||||
for (PsiElement comment : PsiTreeUtil.findChildrenOfType(body, PsiComment.class)) {
|
||||
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
// "Replace with collect" "true"
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
class Test {
|
||||
public static <T> List<TokenFilter<T>> fromString(final T src, Function<T, List<String>> extractor) {
|
||||
final List<TokenFilter<T>> result = extractor.apply(src).stream().map((Function<String, TokenFilter<T>>) TokenFilter::new).collect(Collectors.toList());
|
||||
return result;
|
||||
}
|
||||
|
||||
static class TokenFilter<T> {
|
||||
public TokenFilter(String s) {
|
||||
}
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// "Replace with collect" "true"
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
|
||||
class Test {
|
||||
public static <T> List<TokenFilter<T>> fromString(final T src, Function<T, List<String>> extractor) {
|
||||
final List<TokenFilter<T>> result = new ArrayList<>();
|
||||
for (final String st : extrac<caret>tor.apply(src)) {
|
||||
result.add(new TokenFilter<T>(st));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static class TokenFilter<T> {
|
||||
public TokenFilter(String s) {
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user