diff options
Diffstat (limited to 'java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java')
-rw-r--r-- | java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java | 56 |
1 files changed, 35 insertions, 21 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 8a8a6db0752e..9bc2a6ecacc2 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java @@ -88,27 +88,7 @@ public class LambdaCanBeMethodReferenceInspection extends BaseJavaBatchLocalInsp protected static PsiCallExpression canBeMethodReferenceProblem(@Nullable final PsiElement body, final PsiParameter[] parameters, PsiType functionalInterfaceType) { - 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; - } - } - } - } + PsiCallExpression methodCall = extractMethodCallFromBlock(body); if (methodCall != null) { final PsiExpressionList argumentList = methodCall.getArgumentList(); @@ -218,6 +198,40 @@ public class LambdaCanBeMethodReferenceInspection extends BaseJavaBatchLocalInsp return null; } + 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; + } + @Nullable private static PsiMethod ensureNonAmbiguousMethod(PsiParameter[] parameters, @NotNull PsiMethod psiMethod) { String methodName = psiMethod.getName(); |