From 265f0dca89b6257d1c468219f94b7dc2cfaa71ad Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 23 Apr 2014 14:12:03 +0200 Subject: [PATCH] lambda -> anonymous: static calls (IDEA-124187) --- .../ReplaceLambdaWithAnonymousIntention.java | 11 +++++++---- .../ipp/types/lambda2anonymous/StaticCalls.java | 11 +++++++++++ .../lambda2anonymous/StaticCalls_after.java | 16 ++++++++++++++++ .../ReplaceLambdaWithAnonymousIntentionTest.java | 4 ++++ 4 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 plugins/IntentionPowerPak/test/com/siyeh/ipp/types/lambda2anonymous/StaticCalls.java create mode 100644 plugins/IntentionPowerPak/test/com/siyeh/ipp/types/lambda2anonymous/StaticCalls_after.java diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntention.java index 13f7f8b4c814..26ca6de593ed 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntention.java @@ -64,8 +64,8 @@ public class ReplaceLambdaWithAnonymousIntention extends Intention { PsiCodeBlock blockFromText = psiElementFactory.createCodeBlockFromText(blockText, lambdaExpression); ChangeContextUtil.encodeContextInfo(blockFromText, true); PsiNewExpression newExpression = (PsiNewExpression)psiElementFactory.createExpressionFromText("new " + functionalInterfaceType.getCanonicalText() + "(){}", lambdaExpression); - final PsiClass thisClass = PsiTreeUtil.getParentOfType(lambdaExpression, PsiClass.class, true); - final String thisClassName = thisClass.getName(); + final PsiClass thisClass = RefactoringChangeUtil.getThisClass(lambdaExpression); + final String thisClassName = thisClass != null ? thisClass.getName() : null; if (thisClassName != null) { final PsiThisExpression thisAccessExpr = thisClass instanceof PsiAnonymousClass ? null : RefactoringChangeUtil .createThisExpression(lambdaExpression.getManager(), thisClass); @@ -86,8 +86,11 @@ public class ReplaceLambdaWithAnonymousIntention extends Intention { @Override public void visitMethodCallExpression(PsiMethodCallExpression expression) { super.visitMethodCallExpression(expression); - if (thisAccessExpr != null && expression.getMethodExpression().getQualifierExpression() == null) { - replacements.put(expression, psiElementFactory.createExpressionFromText(thisAccessExpr.getText() + "." + expression.getText(), expression)); + if (thisAccessExpr != null) { + final PsiMethod psiMethod = expression.resolveMethod(); + if (psiMethod != null && !psiMethod.hasModifierProperty(PsiModifier.STATIC) && expression.getMethodExpression().getQualifierExpression() == null) { + replacements.put(expression, psiElementFactory.createExpressionFromText(thisAccessExpr.getText() + "." + expression.getText(), expression)); + } } } }); diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/lambda2anonymous/StaticCalls.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/lambda2anonymous/StaticCalls.java new file mode 100644 index 000000000000..b4fa8c284200 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/lambda2anonymous/StaticCalls.java @@ -0,0 +1,11 @@ +class Foo { + + public static void main(String[] args) { + new Thread(() -> print()); + } + + public static void print() { + System.out.println("print"); + } + +} diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/lambda2anonymous/StaticCalls_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/lambda2anonymous/StaticCalls_after.java new file mode 100644 index 000000000000..2d4f54c9ab7f --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/lambda2anonymous/StaticCalls_after.java @@ -0,0 +1,16 @@ +class Foo { + + public static void main(String[] args) { + new Thread(new Runnable() { + @Override + public void run() { + print(); + } + }); + } + + public static void print() { + System.out.println("print"); + } + +} diff --git a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntentionTest.java b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntentionTest.java index a6076422ffd5..6f209415d468 100644 --- a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntentionTest.java +++ b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/types/ReplaceLambdaWithAnonymousIntentionTest.java @@ -75,6 +75,10 @@ public class ReplaceLambdaWithAnonymousIntentionTest extends IPPTestCase { doTest(); } + public void testStaticCalls() { + doTest(); + } + @Override protected String getIntentionName() { return IntentionPowerPackBundle.message("replace.lambda.with.anonymous.intention.name");