lambda -> anonymous: static calls (IDEA-124187)

This commit is contained in:
Anna Kozlova
2014-04-23 16:33:46 +02:00
parent 2200bba35f
commit 265f0dca89
4 changed files with 38 additions and 4 deletions
@@ -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));
}
}
}
});
@@ -0,0 +1,11 @@
class Foo {
public static void main(String[] args) {
new Thread((<caret>) -> print());
}
public static void print() {
System.out.println("print");
}
}
@@ -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");
}
}
@@ -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");