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");