summaryrefslogtreecommitdiff
path: root/java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java
diff options
context:
space:
mode:
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.java56
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();