diff --git a/platform/platform-api/src/com/intellij/ui/components/MacScrollBarUI.java b/platform/platform-api/src/com/intellij/ui/components/MacScrollBarUI.java index 53e46b483ae4..64af0286464e 100644 --- a/platform/platform-api/src/com/intellij/ui/components/MacScrollBarUI.java +++ b/platform/platform-api/src/com/intellij/ui/components/MacScrollBarUI.java @@ -152,7 +152,7 @@ final class MacScrollBarUI extends DefaultScrollBarUI { if (event != null && MouseEvent.MOUSE_MOVED == event.getID()) { Object source = event.getSource(); if (source instanceof Component) { - JScrollPane pane = UIUtil.findParentByClass((Component)source, JScrollPane.class); + JScrollPane pane = UIUtil.getParentOfType(JScrollPane.class, (Component)source); if (pane != null) { pauseThumbAnimation(pane.getHorizontalScrollBar()); pauseThumbAnimation(pane.getVerticalScrollBar()); diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenu.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenu.java index 12a81b8df6d4..cfafd82257a2 100644 --- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenu.java +++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenu.java @@ -399,7 +399,7 @@ public final class ActionMenu extends JMenu { if (event instanceof ComponentEvent) { ComponentEvent componentEvent = (ComponentEvent)event; Component component = componentEvent.getComponent(); - JPopupMenu popup = UIUtil.findParentByClass(component, JPopupMenu.class); + JPopupMenu popup = UIUtil.getParentOfType(JPopupMenu.class, component); if (popup != null && popup.getInvoker() == myComponent) { Rectangle bounds = popup.getBounds(); if (bounds.isEmpty()) return; diff --git a/platform/util/src/com/intellij/util/ui/UIUtil.java b/platform/util/src/com/intellij/util/ui/UIUtil.java index 4d81b207d2c7..fe47fb4b25df 100644 --- a/platform/util/src/com/intellij/util/ui/UIUtil.java +++ b/platform/util/src/com/intellij/util/ui/UIUtil.java @@ -2053,14 +2053,9 @@ public class UIUtil { return null; } + @Deprecated public static T findParentByClass(@NotNull Component c, Class cls) { - for (Component component = c; component != null; component = component.getParent()) { - if (cls.isAssignableFrom(component.getClass())) { - @SuppressWarnings({"unchecked"}) final T t = (T)component; - return t; - } - } - return null; + return getParentOfType(cls, c); } @Language("HTML") @@ -2762,18 +2757,24 @@ public class UIUtil { return child == parent; } + /** + * Searches above in the component hierarchy starting from the specified component. + * Note that the initial component is also checked. + * + * @param type expected class + * @param component initial component + * @return a component of the specified type, or {@code null} if the search is failed + * @see SwingUtilities#getAncestorOfClass + */ @Nullable - public static T getParentOfType(Class cls, Component c) { - Component eachParent = c; - while (eachParent != null) { - if (cls.isAssignableFrom(eachParent.getClass())) { - @SuppressWarnings({"unchecked"}) final T t = (T)eachParent; - return t; + public static T getParentOfType(@NotNull Class type, Component component) { + while (component != null) { + if (type.isInstance(component)) { + //noinspection unchecked + return (T)component; } - - eachParent = eachParent.getParent(); + component = component.getParent(); } - return null; } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointsDialog.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointsDialog.java index 57d3e3e16e55..47e418339766 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointsDialog.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointsDialog.java @@ -352,7 +352,7 @@ public class BreakpointsDialog extends DialogWrapper { JPanel decoratedTree = decorator.createPanel(); decoratedTree.setBorder(IdeBorderFactory.createEmptyBorder()); - JScrollPane pane = UIUtil.findParentByClass(tree, JScrollPane.class); + JScrollPane pane = UIUtil.getParentOfType(JScrollPane.class, tree); if (pane != null) pane.setBorder(IdeBorderFactory.createBorder()); myTreeController.setTreeView(tree);