functional expression can be folded quick fix should work in case of statement lambda

This commit is contained in:
Dmitry Batkovich
2018-09-06 11:46:20 +03:00
parent 78a9247309
commit 54ee69b6df
5 changed files with 42 additions and 2 deletions

View File

@@ -0,0 +1,8 @@
// "Replace with qualifier" "true"
import java.util.function.Function;
class Test {
void foo(Function<String, String> function) {
Function<String, String> another = function;
}
}

View File

@@ -0,0 +1,8 @@
// "Replace with qualifier" "true"
import java.util.function.Consumer;
class Test {
void foo(Consumer<String> consumer) {
Consumer<String> another = consumer;
}
}

View File

@@ -0,0 +1,10 @@
// "Replace with qualifier" "true"
import java.util.function.Function;
class Test {
void foo(Function<String, String> function) {
Function<String, String> another = s -> {
return function.ap<caret>ply(s);
};
}
}

View File

@@ -0,0 +1,10 @@
// "Replace with qualifier" "true"
import java.util.function.Consumer;
class Test {
void foo(Consumer<String> consumer) {
Consumer<String> another = s -> {
consumer.acce<caret>pt(s);
};
}
}

View File

@@ -4,6 +4,7 @@ package com.intellij.codeInspection;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.util.MethodSignatureUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.TypeConversionUtil;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
@@ -72,14 +73,17 @@ public class FunctionalExpressionCanBeFoldedInspection extends AbstractBaseJavaL
@Override
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
PsiElement element = descriptor.getPsiElement();
final PsiElement parent = element != null ? element.getParent() : null;
PsiElement parent = element != null ? element.getParent() : null;
if (parent instanceof PsiMethodReferenceExpression) {
final PsiExpression qualifierExpression = ((PsiMethodReferenceExpression)parent).getQualifierExpression();
if (qualifierExpression != null) {
parent.replace(qualifierExpression);
}
}
else if (parent instanceof PsiLambdaExpression) {
if (parent instanceof PsiReturnStatement || parent instanceof PsiExpressionStatement) {
parent = PsiTreeUtil.getParentOfType(parent, PsiLambdaExpression.class);
}
if (parent instanceof PsiLambdaExpression) {
PsiExpression expression = LambdaUtil.extractSingleExpressionFromBody(((PsiLambdaExpression)parent).getBody());
if (expression instanceof PsiMethodCallExpression) {
PsiExpression qualifierExpression = ((PsiMethodCallExpression)expression).getMethodExpression().getQualifierExpression();