diff --git a/python/src/com/jetbrains/python/codeInsight/PyBreakContinueGotoProvider.java b/python/src/com/jetbrains/python/codeInsight/PyBreakContinueGotoProvider.java index 75a60a1a678e..26f144ee256d 100644 --- a/python/src/com/jetbrains/python/codeInsight/PyBreakContinueGotoProvider.java +++ b/python/src/com/jetbrains/python/codeInsight/PyBreakContinueGotoProvider.java @@ -10,9 +10,6 @@ import com.intellij.psi.util.PsiTreeUtil; import com.jetbrains.python.PyTokenTypes; import com.jetbrains.python.PythonLanguage; import com.jetbrains.python.psi.*; -import com.jetbrains.python.psi.patterns.ParentMatcher; - -import java.util.List; /** * Provides reaction on ctrl+click for {@code break} and {@code continue} statements. @@ -23,19 +20,16 @@ public class PyBreakContinueGotoProvider extends GotoDeclarationHandlerBase { public PsiElement getGotoDeclarationTarget(PsiElement source) { if (source != null && source.getLanguage() instanceof PythonLanguage) { - ParentMatcher parent_matcher = new ParentMatcher(PyForStatement.class, PyWhileStatement.class); - parent_matcher.limitBy(PyFunction.class, PyClass.class); - List cycle_list = parent_matcher.search(source); - if (cycle_list != null && cycle_list.size() == 1) { - PsiElement cycle_element = cycle_list.get(0); + final PyLoopStatement loop = PsiTreeUtil.getParentOfType(source, PyLoopStatement.class, false, PyFunction.class, PyClass.class); + if (loop != null) { ASTNode node = source.getNode(); if (node != null) { IElementType node_type = node.getElementType(); if (node_type == PyTokenTypes.CONTINUE_KEYWORD) { - return cycle_element; + return loop; } if (node_type == PyTokenTypes.BREAK_KEYWORD) { - PsiElement outer_element = cycle_element; + PsiElement outer_element = loop; PsiElement after_cycle; while (true) { after_cycle = outer_element.getNextSibling(); @@ -51,7 +45,7 @@ public class PyBreakContinueGotoProvider extends GotoDeclarationHandlerBase { } } // cycle is the last statement in the flow of execution. its last element is our best bet. - return PsiTreeUtil.getDeepestLast(cycle_element); + return PsiTreeUtil.getDeepestLast(loop); } } }