From 26ea8cc0eb3d456683ab4fbf7846dd3056a17c6e Mon Sep 17 00:00:00 2001 From: Egor Ushakov Date: Wed, 24 Jul 2019 11:10:48 +0300 Subject: [PATCH] speedup toString search GitOrigin-RevId: fa27d74a28cce199d521669e17fd893c7eb96cab --- .../intellij/debugger/impl/DebuggerUtilsEx.java | 14 ++++++++++++++ .../debugger/ui/tree/render/ToStringRenderer.java | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java index e95e17d99bd5..5923da05e776 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java @@ -1084,4 +1084,18 @@ public abstract class DebuggerUtilsEx extends DebuggerUtils { } }); } + + @Nullable + public static Method concreteMethodByName(@NotNull ClassType type, String name, String signature) { + //TODO: currently does not include interface default methods + while (type != null) { + for (Method candidate : type.methods()) { + if (candidate.name().equals(name) && candidate.signature().equals(signature) && !candidate.isAbstract()) { + return candidate; + } + } + type = type.superclass(); + } + return null; + } } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java index df0b7b0d7418..8644e9c3de3a 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java @@ -1,4 +1,4 @@ -// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.debugger.ui.tree.render; import com.intellij.debugger.DebuggerBundle; @@ -130,7 +130,7 @@ public class ToStringRenderer extends NodeRendererImpl implements OnDemandRender @SuppressWarnings({"HardCodedStringLiteral"}) private static boolean overridesToString(Type type) { if (type instanceof ClassType) { - Method toStringMethod = ((ClassType)type).concreteMethodByName("toString", "()Ljava/lang/String;"); + Method toStringMethod = DebuggerUtilsEx.concreteMethodByName((ClassType)type, "toString", "()Ljava/lang/String;"); return toStringMethod != null && !CommonClassNames.JAVA_LANG_OBJECT.equals(toStringMethod.declaringType().name()); } return false;