From 523d59d6d016e964cfc6025d17910eaac52123e9 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 20 Aug 2012 22:01:19 +0400 Subject: [PATCH] replace lambda with anonymous: hide for cyclic inference cases --- .../types/ReplaceLambdaWithAnonymousIntention.java | 2 +- .../ipp/types/lambda2anonymous/CyclicInference.java | 13 +++++++++++++ .../ReplaceLambdaWithAnonymousIntentionTest.java | 4 ++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 plugins/IntentionPowerPak/test/com/siyeh/ipp/types/lambda2anonymous/CyclicInference.java diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntention.java index 8a339bb62d49..4dd389fd6791 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntention.java @@ -91,7 +91,7 @@ public class ReplaceLambdaWithAnonymousIntention extends Intention { final PsiLambdaExpression lambdaExpression = PsiTreeUtil.getParentOfType(element, PsiLambdaExpression.class); if (lambdaExpression != null && PsiTreeUtil.isAncestor(lambdaExpression.getParameterList(), element, false)) { final PsiType functionalInterfaceType = lambdaExpression.getFunctionalInterfaceType(); - return functionalInterfaceType != null && LambdaUtil.getFunctionalInterfaceMethod(functionalInterfaceType) != null; + return functionalInterfaceType != null && LambdaUtil.getFunctionalInterfaceMethod(functionalInterfaceType) != null && LambdaUtil.isLambdaFullyInferred(lambdaExpression, functionalInterfaceType); } return false; } diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/lambda2anonymous/CyclicInference.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/lambda2anonymous/CyclicInference.java new file mode 100644 index 000000000000..981d5e6b04cd --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/lambda2anonymous/CyclicInference.java @@ -0,0 +1,13 @@ +class Test2 { + class Y{} + + interface I { + X foo(Y list); + } + + static I bar(I i){return i;} + + { + bar(x -> x); + } +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntentionTest.java b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntentionTest.java index 191ae96fe5a7..7aa62f3fe353 100644 --- a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntentionTest.java +++ b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntentionTest.java @@ -27,6 +27,10 @@ public class ReplaceLambdaWithAnonymousIntentionTest extends IPPTestCase { doTest(); } + public void testCyclicInference() { + assertIntentionNotAvailable(); + } + public void testNoFunctionalInterfaceFound() { assertIntentionNotAvailable(); }