diff --git a/python/src/com/jetbrains/python/PyBundle.properties b/python/src/com/jetbrains/python/PyBundle.properties index 3ff7139dca89..a67d8da2fa90 100644 --- a/python/src/com/jetbrains/python/PyBundle.properties +++ b/python/src/com/jetbrains/python/PyBundle.properties @@ -123,6 +123,7 @@ INTN.flip.$0.to.$1=Flip ''{0}'' to ''{1}'' INTN.convert.string=Convert single-quoted string to double-quoted INTN.join.if=Join if's +INTN.join.if.text=Join two if's # Conflict checker CONFLICT.name.$0.obscured=Name ''{0}'' obscured by local definitions diff --git a/python/src/com/jetbrains/python/codeInsight/intentions/PyJoinIfIntention.java b/python/src/com/jetbrains/python/codeInsight/intentions/PyJoinIfIntention.java index 67726e15f934..05b6599b3f9e 100644 --- a/python/src/com/jetbrains/python/codeInsight/intentions/PyJoinIfIntention.java +++ b/python/src/com/jetbrains/python/codeInsight/intentions/PyJoinIfIntention.java @@ -24,18 +24,36 @@ public class PyJoinIfIntention extends BaseIntentionAction { @NotNull public String getText() { - return PyBundle.message("INTN.join.if"); + return PyBundle.message("INTN.join.if.text"); } public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) { PyIfStatement expression = PsiTreeUtil.getParentOfType(file.findElementAt(editor.getCaretModel().getOffset()), PyIfStatement.class); while (expression != null) { - PyStatement firstStatement = expression.getIfPart().getStatementList().getStatements()[0]; - if (firstStatement instanceof PyIfStatement) { - return true; + PyStatementList stList = expression.getIfPart().getStatementList(); + if (stList != null) { + if (stList.getStatements().length != 0) { + PyStatement firstStatement = stList.getStatements()[0]; + if (firstStatement instanceof PyIfStatement) { + return true; + } + } } - expression = PsiTreeUtil.getParentOfType(file.findElementAt(editor.getCaretModel().getOffset()), PyIfStatement.class); + expression = PsiTreeUtil.getParentOfType(expression, PyIfStatement.class); + } + expression = PsiTreeUtil.getParentOfType(file.findElementAt(editor.getCaretModel().getOffset()), PyIfStatement.class); + while (expression != null) { + PyStatementList stList = expression.getIfPart().getStatementList(); + if (stList != null) { + if (stList.getStatements().length != 0) { + PyStatement firstStatement = stList.getStatements()[0]; + if (firstStatement instanceof PyIfStatement) { + return true; + } + } + } + expression = PsiTreeUtil.getChildOfType(expression, PyIfStatement.class); } return false; } @@ -50,7 +68,7 @@ public class PyJoinIfIntention extends BaseIntentionAction { if (firstStatement instanceof PyIfStatement) { break; } - expression = PsiTreeUtil.getParentOfType(file.findElementAt(editor.getCaretModel().getOffset()), PyIfStatement.class); + expression = PsiTreeUtil.getParentOfType(expression, PyIfStatement.class); } if (firstStatement != null && firstStatement instanceof PyIfStatement) { PyExpression condition = ((PyIfStatement)firstStatement).getIfPart().getCondition(); diff --git a/python/testSrc/com/jetbrains/python/PyIntentionTest.java b/python/testSrc/com/jetbrains/python/PyIntentionTest.java index a5279690ff5b..fba23886e4d6 100644 --- a/python/testSrc/com/jetbrains/python/PyIntentionTest.java +++ b/python/testSrc/com/jetbrains/python/PyIntentionTest.java @@ -110,6 +110,6 @@ public class PyIntentionTest extends PyLightFixtureTestCase { } public void testJoinIf() { - doTest(PyBundle.message("INTN.join.if")); + doTest(PyBundle.message("INTN.join.if.text")); } }