diff options
Diffstat (limited to 'java/java-impl/src/com/intellij/codeInspection/LambdaCanBeMethReferenceInspection.java')
-rw-r--r-- | java/java-impl/src/com/intellij/codeInspection/LambdaCanBeMethReferenceInspection.java | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/java/java-impl/src/com/intellij/codeInspection/LambdaCanBeMethReferenceInspection.java b/java/java-impl/src/com/intellij/codeInspection/LambdaCanBeMethReferenceInspection.java index 1c54bff2716e..aabb43ae6554 100644 --- a/java/java-impl/src/com/intellij/codeInspection/LambdaCanBeMethReferenceInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/LambdaCanBeMethReferenceInspection.java @@ -186,6 +186,17 @@ public class LambdaCanBeMethReferenceInspection extends BaseJavaLocalInspectionT if (usedInQualifier.get()) return null; } return methodCall; + } else if (methodCall instanceof PsiNewExpression) { + final PsiExpression[] dimensions = ((PsiNewExpression)methodCall).getArrayDimensions(); + if (dimensions.length > 0) { + final PsiMethod interfaceMethod = LambdaUtil.getFunctionalInterfaceMethod(functionalInterfaceType); + if (interfaceMethod != null) { + final PsiParameter[] psiParameters = interfaceMethod.getParameterList().getParameters(); + if (psiParameters.length == 1 && PsiType.INT.equals(psiParameters[0].getType())) { + return methodCall; + } + } + } } } return null; @@ -205,7 +216,15 @@ public class LambdaCanBeMethReferenceInspection extends BaseJavaLocalInspectionT final String methodReferenceName = methodExpression.getReferenceName(); if (qualifierExpression != null) { boolean isReceiverType = PsiMethodReferenceUtil.isReceiverType(functionalInterfaceType, containingClass, psiMethod); - methodRefText = (isReceiverType ? getClassReferenceName(containingClass) : qualifierExpression.getText()) + "::" + ((PsiMethodCallExpression)element).getTypeArgumentList().getText() + methodReferenceName; + final String qualifier; + if (isReceiverType) { + final PsiType qualifierExpressionType = qualifierExpression.getType(); + qualifier = qualifierExpressionType != null ? qualifierExpressionType.getCanonicalText() : getClassReferenceName(containingClass); + } + else { + qualifier = qualifierExpression.getText(); + } + methodRefText = qualifier + "::" + ((PsiMethodCallExpression)element).getTypeArgumentList().getText() + methodReferenceName; } else { methodRefText = @@ -229,8 +248,24 @@ public class LambdaCanBeMethReferenceInspection extends BaseJavaLocalInspectionT } } } + final PsiType newExprType = ((PsiNewExpression)element).getType(); if (containingClass != null) { - methodRefText = getClassReferenceName(containingClass) + "::new"; + methodRefText = getClassReferenceName(containingClass); + } else if (newExprType instanceof PsiArrayType){ + final PsiType deepComponentType = newExprType.getDeepComponentType(); + if (deepComponentType instanceof PsiPrimitiveType) { + methodRefText = deepComponentType.getCanonicalText(); + } + } + + if (methodRefText != null) { + if (newExprType != null) { + int dim = newExprType.getArrayDimensions(); + while (dim-- > 0) { + methodRefText += "[]"; + } + } + methodRefText += "::new"; } } return methodRefText; |