From a74af24011e529f494473e3ef67d4f4ec9feccbe Mon Sep 17 00:00:00 2001 From: "grigoriy.myasoedov" Date: Fri, 11 Feb 2022 12:04:44 +0300 Subject: [PATCH] [maven] IDEA-288023 optimize DomGotoSuperHandler GitOrigin-RevId: c4dd791af618e928494a78f881d60fa04c1b7356 --- .../navigation/DomGotoSuperHandler.java | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/xml/dom-impl/src/com/intellij/codeInsight/navigation/DomGotoSuperHandler.java b/xml/dom-impl/src/com/intellij/codeInsight/navigation/DomGotoSuperHandler.java index dfe193e3d0c8..e12c0ee84789 100644 --- a/xml/dom-impl/src/com/intellij/codeInsight/navigation/DomGotoSuperHandler.java +++ b/xml/dom-impl/src/com/intellij/codeInsight/navigation/DomGotoSuperHandler.java @@ -5,13 +5,12 @@ import com.intellij.codeInsight.CodeInsightActionHandler; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiFile; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.xml.DomElement; +import com.intellij.util.xml.DomElementNavigationProvider; import com.intellij.util.xml.DomUtil; import org.jetbrains.annotations.NotNull; -import java.util.Objects; -import java.util.stream.Stream; - public class DomGotoSuperHandler implements CodeInsightActionHandler { @Override public void invoke(@NotNull Project project, @@ -19,18 +18,18 @@ public class DomGotoSuperHandler implements CodeInsightActionHandler { @NotNull PsiFile file) { var currentElement = DomUtil.getDomElement(editor, file); - if (currentElement == null) { - return; + while (currentElement != null) { + DomElementNavigationProvider provider = getDomElementNavigationProvider(currentElement); + if (provider != null) { + provider.navigate(currentElement, true); + return; + } else { + currentElement = currentElement.getParent(); + } } + } - Stream.iterate(currentElement, Objects::nonNull, DomElement::getParent) - .flatMap(element -> { - return DomGotoActions.DOM_GOTO_SUPER.getExtensionList() - .stream() - .filter(p -> p.canNavigate(element)) - .map(p -> () -> p.navigate(element, true)); - }) - .findFirst() - .ifPresent(Runnable::run); + private static DomElementNavigationProvider getDomElementNavigationProvider(DomElement element) { + return ContainerUtil.find(DomGotoActions.DOM_GOTO_SUPER.getExtensionList(), p -> p.canNavigate(element)); } }