From 0144adf7b3767cdab144ba67c8e23ec38c4f42f5 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 31 May 2010 15:42:31 +0400 Subject: [PATCH] reduce scope of simplifiable boolean expression inspection (PY-1021) --- .../PySimplifyBooleanCheckInspection.java | 30 ++++++++++++++----- .../python/psi/PyElementVisitor.java | 5 ++++ .../impl/PyConditionalStatementPartImpl.java | 6 ++++ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/python/src/com/jetbrains/python/inspections/PySimplifyBooleanCheckInspection.java b/python/src/com/jetbrains/python/inspections/PySimplifyBooleanCheckInspection.java index 84c10a6d31b9..46053539c381 100644 --- a/python/src/com/jetbrains/python/inspections/PySimplifyBooleanCheckInspection.java +++ b/python/src/com/jetbrains/python/inspections/PySimplifyBooleanCheckInspection.java @@ -7,16 +7,13 @@ import com.intellij.psi.tree.TokenSet; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PyTokenTypes; import com.jetbrains.python.actions.SimplifyBooleanCheckQuickFix; -import com.jetbrains.python.psi.PyBinaryExpression; -import com.jetbrains.python.psi.PyElementType; +import com.jetbrains.python.psi.*; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** - * Created by IntelliJ IDEA. - * Author: Alexey.Ivanov - * Date: 17.03.2010 - * Time: 18:03:35 + * @author Alexey.Ivanov */ public class PySimplifyBooleanCheckInspection extends LocalInspectionTool { @Nls @@ -56,14 +53,31 @@ public class PySimplifyBooleanCheckInspection extends LocalInspectionTool { super(holder); } + @Override + public void visitPyConditionalStatementPart(PyConditionalStatementPart node) { + super.visitPyConditionalStatementPart(node); + final PyExpression condition = node.getCondition(); + if (condition != null) { + condition.accept(new PyBinaryExpressionVisitor(getHolder())); + } + } + } + + private static class PyBinaryExpressionVisitor extends PyInspectionVisitor { + public PyBinaryExpressionVisitor(@Nullable final ProblemsHolder holder) { + super(holder); + } + @Override public void visitPyBinaryExpression(PyBinaryExpression node) { + super.visitPyBinaryExpression(node); final PyElementType operator = node.getOperator(); - if (node.getRightExpression() == null) { + final PyExpression rightExpression = node.getRightExpression(); + if (rightExpression == null) { return; } final String leftExpressionText = node.getLeftExpression().getText(); - final String rightExpressionText = node.getRightExpression().getText(); + final String rightExpressionText = rightExpression.getText(); if ("True".equals(leftExpressionText) || "False".equals(leftExpressionText) || "True".equals(rightExpressionText) || diff --git a/python/src/com/jetbrains/python/psi/PyElementVisitor.java b/python/src/com/jetbrains/python/psi/PyElementVisitor.java index 4e5b39503abc..61205145a11a 100644 --- a/python/src/com/jetbrains/python/psi/PyElementVisitor.java +++ b/python/src/com/jetbrains/python/psi/PyElementVisitor.java @@ -1,6 +1,7 @@ package com.jetbrains.python.psi; import com.intellij.psi.PsiElementVisitor; +import com.jetbrains.python.psi.impl.PyConditionalStatementPartImpl; /** * Visitor for python-specific nodes. @@ -221,4 +222,8 @@ public class PyElementVisitor extends PsiElementVisitor { public void visitPyStarImportElement(PyStarImportElement node) { visitPyElement(node); } + + public void visitPyConditionalStatementPart(PyConditionalStatementPart node) { + visitPyElement(node); + } } diff --git a/python/src/com/jetbrains/python/psi/impl/PyConditionalStatementPartImpl.java b/python/src/com/jetbrains/python/psi/impl/PyConditionalStatementPartImpl.java index 258d2cd7307f..27a6a5d861f0 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyConditionalStatementPartImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyConditionalStatementPartImpl.java @@ -1,6 +1,7 @@ package com.jetbrains.python.psi.impl; import com.jetbrains.python.psi.PyConditionalStatementPart; +import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.PyElementTypes; import com.intellij.lang.ASTNode; @@ -21,4 +22,9 @@ public abstract class PyConditionalStatementPartImpl extends PyStatementPartImpl } return null; } + + @Override + protected void acceptPyVisitor(PyElementVisitor pyVisitor) { + pyVisitor.visitPyConditionalStatementPart(this); + } }