summaryrefslogtreecommitdiff
path: root/java/java-impl/src/com/intellij/codeInspection/LambdaCanBeMethReferenceInspection.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/java-impl/src/com/intellij/codeInspection/LambdaCanBeMethReferenceInspection.java')
-rw-r--r--java/java-impl/src/com/intellij/codeInspection/LambdaCanBeMethReferenceInspection.java39
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;