introduce functional: convert to lambda when applicable (IDEA-174018)

This commit is contained in:
Anna Kozlova
2017-06-07 19:04:04 +03:00
parent d65ff6ad81
commit 101ae53c3b
7 changed files with 26 additions and 36 deletions
@@ -17,6 +17,7 @@ package com.intellij.refactoring.introduceVariable;
import com.intellij.codeInsight.FunctionalInterfaceSuggester;
import com.intellij.codeInsight.navigation.NavigationUtil;
import com.intellij.codeInspection.AnonymousCanBeLambdaInspection;
import com.intellij.ide.util.PsiClassListCellRenderer;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.application.ApplicationManager;
@@ -159,9 +160,20 @@ public class IntroduceFunctionalVariableHandler extends IntroduceVariableHandler
}
}
final PsiMethodCallExpression methodCall = processor.getMethodCall();
PsiExpression psiExpression = factory
PsiMethodCallExpression psiExpression = (PsiMethodCallExpression)factory
.createExpressionFromText("new " + selectedType.getCanonicalText() + "() {" + extractedMethod.getText() + "}." + methodCall.getText(),
methodCall);
PsiExpression qualifierExpression = psiExpression.getMethodExpression().getQualifierExpression();
assert qualifierExpression != null;
if (AnonymousCanBeLambdaInspection.canBeConvertedToLambda(((PsiNewExpression)qualifierExpression).getAnonymousClass(), false, Collections.emptySet())) {
PsiExpression castExpression = JavaPsiFacade.getElementFactory(project)
.createExpressionFromText("((" +
selectedType.getCanonicalText() + ")" +
AnonymousCanBeLambdaInspection.replaceAnonymousWithLambda(qualifierExpression, selectedType).getText() +
")", qualifierExpression);
qualifierExpression.replace(castExpression);
}
processor.getExtractedMethod().delete();
return (PsiMethodCallExpression)JavaCodeStyleManager.getInstance(project).shortenClassReferences(methodCall.replace(psiExpression));
}