diff --git a/python/src/com/jetbrains/python/codeInsight/codeFragment/PyCodeFragmentUtil.java b/python/src/com/jetbrains/python/codeInsight/codeFragment/PyCodeFragmentUtil.java index bf1c14952422..6dd64b2d2d37 100644 --- a/python/src/com/jetbrains/python/codeInsight/codeFragment/PyCodeFragmentUtil.java +++ b/python/src/com/jetbrains/python/codeInsight/codeFragment/PyCodeFragmentUtil.java @@ -237,7 +237,7 @@ public class PyCodeFragmentUtil { } @NotNull - private static List getInputElements(@NotNull List subGraph, @NotNull List graph) { + public static List getInputElements(@NotNull List subGraph, @NotNull List graph) { final List result = new ArrayList(); final Set subGraphElements = getSubGraphElements(subGraph); for (Instruction instruction : getReadInstructions(subGraph)) { diff --git a/python/src/com/jetbrains/python/codeInsight/intentions/PyConvertLambdaToFunctionIntention.java b/python/src/com/jetbrains/python/codeInsight/intentions/PyConvertLambdaToFunctionIntention.java index 58a8c850b0b2..4fa5480b4c84 100644 --- a/python/src/com/jetbrains/python/codeInsight/intentions/PyConvertLambdaToFunctionIntention.java +++ b/python/src/com/jetbrains/python/codeInsight/intentions/PyConvertLambdaToFunctionIntention.java @@ -1,6 +1,8 @@ package com.jetbrains.python.codeInsight.intentions; import com.intellij.codeInsight.CodeInsightUtilBase; +import com.intellij.codeInsight.controlflow.ControlFlow; +import com.intellij.codeInsight.controlflow.Instruction; import com.intellij.codeInsight.intention.impl.BaseIntentionAction; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.template.*; @@ -11,10 +13,15 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; import com.jetbrains.python.PyBundle; +import com.jetbrains.python.codeInsight.codeFragment.PyCodeFragmentUtil; +import com.jetbrains.python.codeInsight.controlflow.ControlFlowCache; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyFunctionBuilder; import org.jetbrains.annotations.NotNull; +import java.util.Arrays; +import java.util.List; + /** * User: catherine * Intention to convert lambda to function @@ -34,8 +41,13 @@ public class PyConvertLambdaToFunctionIntention extends BaseIntentionAction { public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) { PyLambdaExpression lambdaExpression = PsiTreeUtil.getParentOfType(file.findElementAt(editor.getCaretModel().getOffset()), PyLambdaExpression.class); if (lambdaExpression != null) { - if (lambdaExpression.getBody() != null) + if (lambdaExpression.getBody() != null) { + final ControlFlow flow = ControlFlowCache.getControlFlow(lambdaExpression); + final List graph = Arrays.asList(flow.getInstructions()); + final List elements = PyCodeFragmentUtil.getInputElements(graph, graph); + if (elements.size() > 0) return false; return true; + } } return false; } diff --git a/python/testData/intentions/beforeConvertLambdaToFunction1.py b/python/testData/intentions/beforeConvertLambdaToFunction1.py new file mode 100644 index 000000000000..2a2703622a85 --- /dev/null +++ b/python/testData/intentions/beforeConvertLambdaToFunction1.py @@ -0,0 +1,2 @@ +def transform(n): + return lambda x: x + n \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyIntentionTest.java b/python/testSrc/com/jetbrains/python/PyIntentionTest.java index e4a4187b4d26..5c247606c57a 100644 --- a/python/testSrc/com/jetbrains/python/PyIntentionTest.java +++ b/python/testSrc/com/jetbrains/python/PyIntentionTest.java @@ -202,6 +202,11 @@ public class PyIntentionTest extends PyTestCase { public void testConvertLambdaToFunction() { doTest(PyBundle.message("INTN.convert.lambda.to.function")); } + + public void testConvertLambdaToFunction1() { //PY-6610 + doNegativeTest(PyBundle.message("INTN.convert.lambda.to.function")); + } + public void testConvertVariadicParam() { //PY-2264 doTest(PyBundle.message("INTN.convert.variadic.param")); }