From 4c5fca5bc6f39edb959f650ce0ef6fe541777d11 Mon Sep 17 00:00:00 2001 From: "Alexey.Merkulov" Date: Tue, 26 Nov 2024 20:03:20 +0100 Subject: [PATCH] [debugger] Refactoring: move utility method to common debugger module (cherry picked from commit 6f6e50e992fe534f44636136d36c1e53067329b4) IJ-CR-151042 GitOrigin-RevId: 80c7d32c3b8b297a01e46ed4170a4abe0f2adf0f --- .../debugger/engine/DebuggerUtils.java | 19 ++++++++++++++++++- .../trace/EvaluateExpressionTracer.java | 17 ++--------------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java b/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java index c8239a322c57..b587ce7f5f8a 100644 --- a/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java +++ b/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java @@ -39,7 +39,10 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.Set; import java.util.function.Function; public abstract class DebuggerUtils { @@ -590,6 +593,20 @@ public abstract class DebuggerUtils { protected record ArrayClass(String className, int dims) { } + @ApiStatus.Internal + public static @Nullable String tryExtractExceptionMessage(@NotNull ObjectReference exception) { + final ReferenceType type = exception.referenceType(); + final Field messageField = type.fieldByName("detailMessage"); + if (messageField == null) return null; + final Value message = exception.getValue(messageField); + if (message instanceof StringReference) { + return ((StringReference)message).value(); + } + + return null; + } + + public static DebuggerUtils getInstance() { return ApplicationManager.getApplication().getService(DebuggerUtils.class); } diff --git a/plugins/stream-debugger/src/com/intellij/debugger/streams/trace/EvaluateExpressionTracer.java b/plugins/stream-debugger/src/com/intellij/debugger/streams/trace/EvaluateExpressionTracer.java index 62cd48771a52..073f32f6ba36 100644 --- a/plugins/stream-debugger/src/com/intellij/debugger/streams/trace/EvaluateExpressionTracer.java +++ b/plugins/stream-debugger/src/com/intellij/debugger/streams/trace/EvaluateExpressionTracer.java @@ -1,6 +1,7 @@ // Copyright 2000-2020 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.streams.trace; +import com.intellij.debugger.engine.DebuggerUtils; import com.intellij.debugger.engine.JavaValue; import com.intellij.debugger.engine.evaluation.EvaluationContextImpl; import com.intellij.debugger.streams.StreamDebuggerBundle; @@ -15,7 +16,6 @@ import com.intellij.xdebugger.impl.breakpoints.XExpressionImpl; import com.intellij.xdebugger.impl.ui.tree.nodes.XEvaluationCallbackBase; import com.sun.jdi.*; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * @author Vitaliy.Bibaev @@ -68,7 +68,7 @@ public class EvaluateExpressionTracer implements StreamTracer { } if (classType != null) { - final String exceptionMessage = tryExtractExceptionMessage((ObjectReference)reference); + final String exceptionMessage = DebuggerUtils.tryExtractExceptionMessage((ObjectReference)reference); final String description = "Evaluation failed: " + type.name() + " exception thrown"; final String descriptionWithReason = exceptionMessage == null ? description : description + ": " + exceptionMessage; callback.evaluationFailed(streamTraceExpression, descriptionWithReason); @@ -88,17 +88,4 @@ public class EvaluateExpressionTracer implements StreamTracer { }, stackFrame.getSourcePosition()); } } - - @Nullable - private static String tryExtractExceptionMessage(@NotNull ObjectReference exception) { - final ReferenceType type = exception.referenceType(); - final Field messageField = type.fieldByName("detailMessage"); - if (messageField == null) return null; - final Value message = exception.getValue(messageField); - if (message instanceof StringReference) { - return ((StringReference)message).value(); - } - - return null; - } }