diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties index ec48cb0d5653..2fec25829262 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties @@ -2166,6 +2166,7 @@ optional.used.as.field.type.problem.descriptor=#ref used as type fo optional.used.as.parameter.type.problem.descriptor=#ref used as type for parameter ''{0}'' lambda.unfriendly.method.overload.display.name=Lambda unfriendly method overload lambda.unfriendly.method.overload.problem.descriptor=Lambda unfriendly overload of method #ref() +lambda.unfriendly.constructor.overload.problem.descriptor=Lambda unfriendly overload of constructor #ref() optional.contains.collection.display.name='Optional' contains array or collection optional.contains.collection.problem.descriptor='Optional' contains collection #ref optional.contains.array.problem.descriptor='Optional' contains array #ref diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/naming/LambdaUnfriendlyMethodOverloadInspectionBase.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/naming/LambdaUnfriendlyMethodOverloadInspectionBase.java index 1aecdeb70d35..432b5acc3a51 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/naming/LambdaUnfriendlyMethodOverloadInspectionBase.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/naming/LambdaUnfriendlyMethodOverloadInspectionBase.java @@ -37,7 +37,10 @@ public class LambdaUnfriendlyMethodOverloadInspectionBase extends BaseInspection @NotNull @Override protected String buildErrorString(Object... infos) { - return InspectionGadgetsBundle.message("lambda.unfriendly.method.overload.problem.descriptor"); + final PsiMethod method = (PsiMethod)infos[0]; + return InspectionGadgetsBundle.message(method.isConstructor() + ? "lambda.unfriendly.constructor.overload.problem.descriptor" + : "lambda.unfriendly.method.overload.problem.descriptor"); } @Override @@ -50,9 +53,6 @@ public class LambdaUnfriendlyMethodOverloadInspectionBase extends BaseInspection @Override public void visitMethod(PsiMethod method) { super.visitMethod(method); - if (method.isConstructor()) { - return; - } final PsiParameterList parameterList = method.getParameterList(); final int parametersCount = parameterList.getParametersCount(); if (parametersCount == 0) { @@ -91,7 +91,7 @@ public class LambdaUnfriendlyMethodOverloadInspectionBase extends BaseInspection } final PsiType functionalType = parameters[functionalIndex].getType(); if (areSameShapeFunctionalTypes(functionalType, otherFunctionalType)) { - registerMethodError(method); + registerMethodError(method, method); return; } } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/naming/LambdaUnfriendlyMethodOverloadInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/naming/LambdaUnfriendlyMethodOverloadInspection.java index c576a61c9645..f19089dfcf88 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/naming/LambdaUnfriendlyMethodOverloadInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/naming/LambdaUnfriendlyMethodOverloadInspection.java @@ -15,6 +15,7 @@ */ package com.siyeh.ig.naming; +import com.intellij.psi.PsiMethod; import com.siyeh.ig.InspectionGadgetsFix; import com.siyeh.ig.fixes.RenameFix; import org.jetbrains.annotations.Nullable; @@ -27,6 +28,10 @@ public class LambdaUnfriendlyMethodOverloadInspection extends LambdaUnfriendlyMe @Nullable @Override protected InspectionGadgetsFix buildFix(Object... infos) { + final PsiMethod method = (PsiMethod)infos[0]; + if (method.isConstructor()) { + return null; + } return new RenameFix(); } diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/LambdaUnfriendlyMethodOverload.html b/plugins/InspectionGadgets/src/inspectionDescriptions/LambdaUnfriendlyMethodOverload.html index 0692030b4ff3..2e5ce871fcf3 100644 --- a/plugins/InspectionGadgets/src/inspectionDescriptions/LambdaUnfriendlyMethodOverload.html +++ b/plugins/InspectionGadgets/src/inspectionDescriptions/LambdaUnfriendlyMethodOverload.html @@ -1,6 +1,6 @@ -Reports overloaded methods with similar functional interface type parameters for which +Reports overloaded methods or constructors with similar functional interface type parameters for which any call sites will need a cast or parameter type specified on the lambda expression to resolve ambiguity. Such calls can look ugly and should be avoided if possible. It is preferable to give the overloaded methods a different name from each other, so that this problem does not occur. diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/naming/lambda_unfriendly_method_overload/LambdaUnfriendlyMethodOverload.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/naming/lambda_unfriendly_method_overload/LambdaUnfriendlyMethodOverload.java index e37bd6dea6ab..1a2c7df81267 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/naming/lambda_unfriendly_method_overload/LambdaUnfriendlyMethodOverload.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/naming/lambda_unfriendly_method_overload/LambdaUnfriendlyMethodOverload.java @@ -26,6 +26,9 @@ interface Stream { V map(IntFunction intMapper); } class X { + X(IntPredicate p) {} + X(Function f) {} + void a(IntPredicate p) {} void a (Function f) {}