From bbcd7164ed6c28c5e8da1dca47d2383403054514 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 26 Mar 2008 21:21:51 +0300 Subject: [PATCH] fix incorrect resolve to self in tuple expressions; fix possible SOE --- .../python/psi/impl/PyReferenceExpressionImpl.java | 3 +++ .../jetbrains/python/psi/impl/PyTupleExpressionImpl.java | 2 +- python/testData/resolve/Tuple.py | 3 +++ python/testSrc/com/jetbrains/python/PyResolveTest.java | 6 ++++++ 4 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 python/testData/resolve/Tuple.py diff --git a/python/src/com/jetbrains/python/psi/impl/PyReferenceExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyReferenceExpressionImpl.java index 57363bd94069..134cb3732562 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyReferenceExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyReferenceExpressionImpl.java @@ -240,6 +240,9 @@ public class PyReferenceExpressionImpl extends PyElementImpl implements PyRefere } } PsiElement target = resolve(); + if (target == this) { + return null; + } return getTypeFromTarget(target); } diff --git a/python/src/com/jetbrains/python/psi/impl/PyTupleExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyTupleExpressionImpl.java index 59c0acd73e72..97c3fb140ff8 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyTupleExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyTupleExpressionImpl.java @@ -54,7 +54,7 @@ public class PyTupleExpressionImpl extends PyElementImpl implements PyTupleExpre PsiElement lastParent, @NotNull PsiElement place) { for (PyExpression expression : getElements()) { - if (!expression.processDeclarations(processor, substitutor, lastParent, place)) { + if (expression != lastParent && !expression.processDeclarations(processor, substitutor, lastParent, place)) { return false; } } diff --git a/python/testData/resolve/Tuple.py b/python/testData/resolve/Tuple.py new file mode 100644 index 000000000000..5bc07fe01bac --- /dev/null +++ b/python/testData/resolve/Tuple.py @@ -0,0 +1,3 @@ +aa = 1 +bb = 2 +c = aa, bb \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyResolveTest.java b/python/testSrc/com/jetbrains/python/PyResolveTest.java index 45c75e8e27f8..f65a8820022b 100644 --- a/python/testSrc/com/jetbrains/python/PyResolveTest.java +++ b/python/testSrc/com/jetbrains/python/PyResolveTest.java @@ -87,6 +87,12 @@ public class PyResolveTest extends ResolveTestCase { assertTrue(targetElement instanceof PyTargetExpression); } + public void testTuple() throws Exception { + PsiElement targetElement = resolve(); + assertTrue(targetElement instanceof PyTargetExpression); + assertTrue(targetElement.getParent() instanceof PyAssignmentStatement); + } + @Override protected String getTestDataPath() { return PathManager.getHomePath() + "/plugins/python/testData/resolve/";