From 80c0cd1a42001c04386fc73ccaa8efd1db6e4c39 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 11 Nov 2014 15:57:25 +0100 Subject: [PATCH] eliminate duplicates --- .../LambdaCanBeMethodReferenceInspection.java | 33 ++----------------- .../RedundantLambdaCodeBlockInspection.java | 25 ++------------ .../src/com/intellij/psi/LambdaUtil.java | 27 +++++++++++++++ 3 files changed, 31 insertions(+), 54 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java index 69b06107951d..c615c8a80de3 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java @@ -156,37 +156,8 @@ public class LambdaCanBeMethodReferenceInspection extends BaseJavaBatchLocalInsp } public static PsiCallExpression extractMethodCallFromBlock(PsiElement body) { - PsiCallExpression methodCall = null; - if (body instanceof PsiCallExpression) { - methodCall = (PsiCallExpression)body; - } - else if (body instanceof PsiCodeBlock) { - final PsiStatement[] statements = ((PsiCodeBlock)body).getStatements(); - if (statements.length == 1) { - if (statements[0] instanceof PsiReturnStatement) { - final PsiExpression returnValue = ((PsiReturnStatement)statements[0]).getReturnValue(); - if (returnValue instanceof PsiCallExpression) { - methodCall = (PsiCallExpression)returnValue; - } - } - else if (statements[0] instanceof PsiExpressionStatement) { - final PsiExpression expr = ((PsiExpressionStatement)statements[0]).getExpression(); - if (expr instanceof PsiCallExpression) { - methodCall = (PsiCallExpression)expr; - } - } - } - } - else if (body instanceof PsiBlockStatement) { - return extractMethodCallFromBlock(((PsiBlockStatement)body).getCodeBlock()); - } - else if (body instanceof PsiExpressionStatement) { - final PsiExpression expression = ((PsiExpressionStatement)body).getExpression(); - if (expression instanceof PsiCallExpression) { - methodCall = (PsiCallExpression)expression; - } - } - return methodCall; + final PsiExpression expression = LambdaUtil.extractSingleExpressionFromBody(body); + return expression instanceof PsiCallExpression ? (PsiCallExpression)expression : null; } @Nullable diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/RedundantLambdaCodeBlockInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/RedundantLambdaCodeBlockInspection.java index 2d542fb35918..1b4fd9812238 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/RedundantLambdaCodeBlockInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/RedundantLambdaCodeBlockInspection.java @@ -28,7 +28,6 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Arrays; @@ -75,7 +74,7 @@ public class RedundantLambdaCodeBlockInspection extends BaseJavaBatchLocalInspec super.visitLambdaExpression(expression); final PsiElement body = expression.getBody(); if (body instanceof PsiCodeBlock) { - PsiExpression psiExpression = getExpression((PsiCodeBlock)body); + PsiExpression psiExpression = LambdaUtil.extractSingleExpressionFromBody(body); if (psiExpression != null && !findCommentsOutsideExpression(body, psiExpression)) { if (LambdaUtil.isExpressionStatementExpression(psiExpression)) { final PsiElement parent = PsiUtil.skipParenthesizedExprUp(expression.getParent()); @@ -122,26 +121,6 @@ public class RedundantLambdaCodeBlockInspection extends BaseJavaBatchLocalInspec }; } - @Nullable - private static PsiExpression getExpression(PsiCodeBlock body) { - final PsiStatement[] statements = body.getStatements(); - if (statements.length == 1) { - if (statements[0] instanceof PsiBlockStatement) { - return getExpression(((PsiBlockStatement)statements[0]).getCodeBlock()); - } - if (statements[0] instanceof PsiReturnStatement || statements[0] instanceof PsiExpressionStatement) { - if (statements[0] instanceof PsiReturnStatement) { - final PsiReturnStatement returnStatement = (PsiReturnStatement)statements[0]; - return returnStatement.getReturnValue(); - } - else { - return ((PsiExpressionStatement)statements[0]).getExpression(); - } - } - } - return null; - } - private static class ReplaceWithExprFix implements LocalQuickFix, HighPriorityAction { @NotNull @Override @@ -164,7 +143,7 @@ public class RedundantLambdaCodeBlockInspection extends BaseJavaBatchLocalInspec if (lambdaExpression != null) { final PsiElement body = lambdaExpression.getBody(); if (body != null) { - PsiExpression expression = getExpression((PsiCodeBlock)body); + PsiExpression expression = LambdaUtil.extractSingleExpressionFromBody(body); if (expression != null) { body.replace(expression); } diff --git a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java index 8a855a3586bd..c1e37e3377fd 100644 --- a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java @@ -468,6 +468,33 @@ public class LambdaUtil { body instanceof PsiReferenceExpression && !body.isPhysical(); } + public static PsiExpression extractSingleExpressionFromBody(PsiElement body) { + PsiExpression expression = null; + if (body instanceof PsiExpression) { + expression = (PsiExpression)body; + } + else if (body instanceof PsiCodeBlock) { + final PsiStatement[] statements = ((PsiCodeBlock)body).getStatements(); + if (statements.length == 1) { + if (statements[0] instanceof PsiReturnStatement) { + expression = ((PsiReturnStatement)statements[0]).getReturnValue(); + } + else if (statements[0] instanceof PsiExpressionStatement) { + expression = ((PsiExpressionStatement)statements[0]).getExpression(); + } else if (statements[0] instanceof PsiBlockStatement) { + return extractSingleExpressionFromBody(((PsiBlockStatement)statements[0]).getCodeBlock()); + } + } + } + else if (body instanceof PsiBlockStatement) { + return extractSingleExpressionFromBody(((PsiBlockStatement)body).getCodeBlock()); + } + else if (body instanceof PsiExpressionStatement) { + expression = ((PsiExpressionStatement)body).getExpression(); + } + return expression; + } + public static class TypeParamsChecker extends PsiTypeVisitor { private PsiMethod myMethod; private final PsiClass myClass;