diff --git a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java index 54dcde0d0566..f7d47c8088d1 100644 --- a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java @@ -262,7 +262,16 @@ public class LambdaUtil { public static boolean dependsOnTypeParams(PsiType type, PsiLambdaExpression expr, PsiTypeParameter param2Check) { - final TypeParamsChecker visitor = new TypeParamsChecker(expr); + return depends(type, param2Check, new TypeParamsChecker(expr)); + } + + public static boolean dependsOnTypeParams(PsiType type, + PsiClass aClass, + PsiMethod aMethod) { + return depends(type, null, new TypeParamsChecker(aMethod, aClass)); + } + + private static boolean depends(PsiType type, PsiTypeParameter param2Check, TypeParamsChecker visitor) { if (!visitor.startedInference()) return false; final Boolean accept = type.accept(visitor); if (param2Check != null) { @@ -328,8 +337,8 @@ public class LambdaUtil { } final PsiElement gParent = expressionList.getParent(); - if (gParent instanceof PsiMethodCallExpression) { - final PsiMethodCallExpression contextCall = (PsiMethodCallExpression)gParent; + if (gParent instanceof PsiCallExpression) { + final PsiCallExpression contextCall = (PsiCallExpression)gParent; final JavaResolveResult resolveResult = contextCall.resolveMethodGenerics(); final PsiElement resolve = resolveResult.getElement(); if (resolve instanceof PsiMethod) { @@ -403,6 +412,11 @@ public class LambdaUtil { private final PsiClass myClass; private final Set myUsedTypeParams = new HashSet(); + private TypeParamsChecker(PsiMethod method, PsiClass aClass) { + myMethod = method; + myClass = aClass; + } + public TypeParamsChecker(PsiLambdaExpression expression) { myClass = PsiUtil.resolveGenericsClassInType(getFunctionalInterfaceType(expression, false)).getElement(); PsiElement parent = expression.getParent(); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistencyMisc2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistencyMisc2.java index 03054e759060..a544348dea64 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistencyMisc2.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/TypeArgsConsistencyMisc2.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +import java.util.*; class Test1 { { Comparable c = (Integer o)->{ @@ -46,3 +46,13 @@ class Test2 { } } +class TestNewExpression { + public TestNewExpression(Comparator comparator) { + //some code + } + public static void main(String[] args) { + TestNewExpression strs = new TestNewExpression((o1, o2) -> { + return o2.compareToIgnoreCase(o1); + }); + } +} \ No newline at end of file