From ca49f980a8119fb968f94abea44f1455f02c0d80 Mon Sep 17 00:00:00 2001 From: Oleg Shpynov Date: Tue, 2 Mar 2010 18:59:31 +0300 Subject: [PATCH] PY-623 "Unused assignment" false positive --- .../codeInsight/controlflow/PyControlFlowBuilder.java | 10 ++++++++++ .../src/com/jetbrains/python/psi/PyElementVisitor.java | 5 +++++ .../python/psi/impl/PyAssignmentStatementImpl.java | 2 +- .../python/psi/impl/PySubscriptionExpressionImpl.java | 6 ++++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/python/src/com/jetbrains/python/codeInsight/controlflow/PyControlFlowBuilder.java b/python/src/com/jetbrains/python/codeInsight/controlflow/PyControlFlowBuilder.java index 8023a028b79a..c3bef81d1274 100644 --- a/python/src/com/jetbrains/python/codeInsight/controlflow/PyControlFlowBuilder.java +++ b/python/src/com/jetbrains/python/codeInsight/controlflow/PyControlFlowBuilder.java @@ -47,6 +47,16 @@ public class PyControlFlowBuilder extends PyRecursiveElementVisitor { super.visitPyStatement(node); } + @Override + public void visitPySubscriptionExpression(PySubscriptionExpression node) { + myBuilder.startNode(node); + node.getOperand().accept(this); + final PyExpression expression = node.getIndexExpression(); + if (expression != null) { + expression.accept(this); + } + } + @Override public void visitPyReferenceExpression(final PyReferenceExpression node) { final PyExpression qualifier = node.getQualifier(); diff --git a/python/src/com/jetbrains/python/psi/PyElementVisitor.java b/python/src/com/jetbrains/python/psi/PyElementVisitor.java index 8084c465cc7e..16610afc596d 100644 --- a/python/src/com/jetbrains/python/psi/PyElementVisitor.java +++ b/python/src/com/jetbrains/python/psi/PyElementVisitor.java @@ -17,6 +17,7 @@ package com.jetbrains.python.psi; import com.intellij.psi.PsiElementVisitor; +import com.jetbrains.python.psi.impl.PySubscriptionExpressionImpl; /** * Visitor for python-specific nodes. @@ -225,4 +226,8 @@ public class PyElementVisitor extends PsiElementVisitor { public void visitPyStarExpression(PyStarExpression node) { visitPyExpression(node); } + + public void visitPySubscriptionExpression(PySubscriptionExpression node) { + visitPyExpression(node); + } } diff --git a/python/src/com/jetbrains/python/psi/impl/PyAssignmentStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyAssignmentStatementImpl.java index 8a4fd18a3b5b..18bb6fc6f60e 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyAssignmentStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyAssignmentStatementImpl.java @@ -58,7 +58,7 @@ public class PyAssignmentStatementImpl extends PyElementImpl implements PyAssign List candidates = PyUtil.flattenedParens(psi_nodes); // put all possible tuples to one level List targets = new ArrayList(); for (PyExpression expr : candidates) { // only filter out targets - if (expr instanceof PyTargetExpression) { + if (expr instanceof PyTargetExpression || expr instanceof PySubscriptionExpression) { targets.add(expr); } } diff --git a/python/src/com/jetbrains/python/psi/impl/PySubscriptionExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PySubscriptionExpressionImpl.java index aa1765f6c614..7a31d67f7e5e 100644 --- a/python/src/com/jetbrains/python/psi/impl/PySubscriptionExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PySubscriptionExpressionImpl.java @@ -18,6 +18,7 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; import com.jetbrains.python.PyElementTypes; +import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PySubscriptionExpression; import com.jetbrains.python.psi.types.PyType; @@ -44,6 +45,11 @@ public class PySubscriptionExpressionImpl extends PyElementImpl implements PySub return childToPsi(PyElementTypes.EXPRESSIONS, 1); } + @Override + protected void acceptPyVisitor(final PyElementVisitor pyVisitor) { + pyVisitor.visitPySubscriptionExpression(this); + } + public PyType getType() { return null; }