diff --git a/python/src/com/jetbrains/python/codeInsight/controlflow/PyControlFlowBuilder.java b/python/src/com/jetbrains/python/codeInsight/controlflow/PyControlFlowBuilder.java index 16614cb42de3..40b1c7cbbe9d 100644 --- a/python/src/com/jetbrains/python/codeInsight/controlflow/PyControlFlowBuilder.java +++ b/python/src/com/jetbrains/python/codeInsight/controlflow/PyControlFlowBuilder.java @@ -38,7 +38,15 @@ public class PyControlFlowBuilder extends PyRecursiveElementVisitor { public void visitPyFunction(final PyFunction node) { // Create node and stop here myBuilder.startNode(node); - ParamHelper.walkDownParamArray(node.getParameterList().getParameters(), new ParamHelper.ParamVisitor() { + visitDefaultParameterValues(node.getParameterList()); + + final ReadWriteInstruction instruction = ReadWriteInstruction.write(myBuilder, node, node.getName()); + myBuilder.addNode(instruction); + myBuilder.checkPending(instruction); + } + + private void visitDefaultParameterValues(PyParameterList parameterList) { + ParamHelper.walkDownParamArray(parameterList.getParameters(), new ParamHelper.ParamVisitor() { @Override public void visitNamedParameter(PyNamedParameter param, boolean first, boolean last) { final PyExpression defaultValue = param.getDefaultValue(); @@ -47,10 +55,6 @@ public class PyControlFlowBuilder extends PyRecursiveElementVisitor { } } }); - - final ReadWriteInstruction instruction = ReadWriteInstruction.write(myBuilder, node, node.getName()); - myBuilder.addNode(instruction); - myBuilder.checkPending(instruction); } @Override @@ -664,6 +668,7 @@ public class PyControlFlowBuilder extends PyRecursiveElementVisitor { @Override public void visitPyLambdaExpression(final PyLambdaExpression node) { myBuilder.startNode(node); + visitDefaultParameterValues(node.getParameterList()); } @Override diff --git a/python/testData/codeInsight/controlflow/lambdadefaultparameter.py b/python/testData/codeInsight/controlflow/lambdadefaultparameter.py new file mode 100644 index 000000000000..24665fe0bd07 --- /dev/null +++ b/python/testData/codeInsight/controlflow/lambdadefaultparameter.py @@ -0,0 +1 @@ +{(lambda ii=ii: ii) for ii in range(5)} diff --git a/python/testData/codeInsight/controlflow/lambdadefaultparameter.txt b/python/testData/codeInsight/controlflow/lambdadefaultparameter.txt new file mode 100644 index 000000000000..55223c043482 --- /dev/null +++ b/python/testData/codeInsight/controlflow/lambdadefaultparameter.txt @@ -0,0 +1,11 @@ +0(1) element: null +1(2) element: PyExpressionStatement +2(3) element: PySetCompExpression +3(4) element: PyCallExpression: range +4(5,10) READ ACCESS: range +5(6) element: PyTargetExpression: ii +6(7) WRITE ACCESS: ii +7(8) element: PyParenthesizedExpression +8(9) element: PyLambdaExpression +9(5,10) READ ACCESS: ii +10() element: null \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyControlFlowBuilderTest.java b/python/testSrc/com/jetbrains/python/PyControlFlowBuilderTest.java index 7f3f2e9b6c07..d004262879f5 100644 --- a/python/testSrc/com/jetbrains/python/PyControlFlowBuilderTest.java +++ b/python/testSrc/com/jetbrains/python/PyControlFlowBuilderTest.java @@ -161,6 +161,10 @@ public class PyControlFlowBuilderTest extends LightMarkedTestCase { doTest(); } + public void testLambdaDefaultParameter() { + doTest(); + } + public void testQualifiedSelfReference() { final String testName = getTestName(false).toLowerCase(); configureByFile(testName + ".py");