diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java index 2cd5e6484165..3f218ce5d3ec 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java @@ -292,9 +292,9 @@ public class LambdaCanBeMethodReferenceInspection extends BaseJavaBatchLocalInsp } @Nullable - protected static String createMethodReferenceText(final PsiElement element, - final PsiType functionalInterfaceType, - final PsiParameter[] parameters) { + public static String createMethodReferenceText(final PsiElement element, + final PsiType functionalInterfaceType, + final PsiParameter[] parameters) { if (element instanceof PsiMethodCallExpression) { final PsiMethodCallExpression methodCall = (PsiMethodCallExpression)element; diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterDialog.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterDialog.java index e9be4ee19324..c900679cdac0 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterDialog.java @@ -25,6 +25,7 @@ package com.intellij.refactoring.introduceParameter; import com.intellij.codeInspection.AnonymousCanBeLambdaInspection; +import com.intellij.codeInspection.LambdaCanBeMethodReferenceInspection; import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.help.HelpManager; import com.intellij.openapi.options.ConfigurationException; @@ -275,15 +276,25 @@ public class IntroduceParameterDialog extends RefactoringDialog { isDeleteLocalVariable = myPanel.isDeleteLocalVariable(); } + final PsiType selectedType = getSelectedType(); final IntroduceParameterProcessor processor = new IntroduceParameterProcessor( myProject, myMethodToReplaceIn, myMethodToSearchFor, parameterInitializer, myExpression, myLocalVar, isDeleteLocalVariable, getParameterName(), myPanel.isReplaceAllOccurences(), - myPanel.getReplaceFieldsWithGetters(), isDeclareFinal(), myPanel.isGenerateDelegate(), getSelectedType(), myPanel.getParametersToRemove()); + myPanel.getReplaceFieldsWithGetters(), isDeclareFinal(), myPanel.isGenerateDelegate(), selectedType, myPanel.getParametersToRemove()); if (myCbCollapseToLambda.isVisible() && myCbCollapseToLambda.isSelected() && parameterInitializer != null) { - PsiExpression lambda = AnonymousCanBeLambdaInspection.replaceAnonymousWithLambda(parameterInitializer, getSelectedType()); + PsiExpression lambda = AnonymousCanBeLambdaInspection.replaceAnonymousWithLambda(parameterInitializer, selectedType); if (lambda != null) { + final PsiParameter[] lambdaParameters = ((PsiLambdaExpression)lambda).getParameterList().getParameters(); + final PsiCallExpression toConvertCall = LambdaCanBeMethodReferenceInspection.canBeMethodReferenceProblem(((PsiLambdaExpression)lambda).getBody(), lambdaParameters, selectedType); + if (toConvertCall != null) { + final String methodReferenceText = LambdaCanBeMethodReferenceInspection.createMethodReferenceText(toConvertCall, selectedType, lambdaParameters); + if (methodReferenceText != null) { + lambda = JavaPsiFacade.getElementFactory(getProject()).createExpressionFromText(methodReferenceText, lambda); + } + } + processor.setParameterInitializer(lambda); } } diff --git a/platform/platform-resources-en/src/messages/RefactoringBundle.properties b/platform/platform-resources-en/src/messages/RefactoringBundle.properties index 2b6d0d1bc904..f4177b6b2878 100644 --- a/platform/platform-resources-en/src/messages/RefactoringBundle.properties +++ b/platform/platform-resources-en/src/messages/RefactoringBundle.properties @@ -791,4 +791,4 @@ enter.new.project.name=Enter new project name: rename.project=Rename Project renames.project=Renames project introduce.functional.parameter.title=Extract Functional Parameter -introduce.parameter.convert.lambda=&Convert to lambda +introduce.parameter.convert.lambda=&Convert to functional expression