From c38063f59b6d06df15cf1beceadc4144c108510f Mon Sep 17 00:00:00 2001 From: Egor Ushakov Date: Fri, 8 Nov 2024 19:38:24 +0100 Subject: [PATCH] IDEA-361349 Debugger Shows Internal Android Fields - added EP GitOrigin-RevId: e4e88b06bbcac856bfe3b539354240aacefd586b --- .../ui/tree/render/ClassRenderer.java | 3 ++- .../engine/FieldVisibilityProvider.kt | 21 +++++++++++++++++++ java/java-impl/src/META-INF/JavaPlugin.xml | 3 +++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 java/debugger/openapi/src/com/intellij/debugger/engine/FieldVisibilityProvider.kt diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ClassRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ClassRenderer.java index d7ce31c602b7..6bc804023cc6 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ClassRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ClassRenderer.java @@ -5,6 +5,7 @@ import com.intellij.debugger.DebuggerContext; import com.intellij.debugger.JavaDebuggerBundle; import com.intellij.debugger.engine.DebuggerManagerThreadImpl; import com.intellij.debugger.engine.DebuggerUtils; +import com.intellij.debugger.engine.FieldVisibilityProvider; import com.intellij.debugger.engine.evaluation.EvaluateException; import com.intellij.debugger.engine.evaluation.EvaluationContext; import com.intellij.debugger.engine.jdi.StackFrameProxy; @@ -293,7 +294,7 @@ public class ClassRenderer extends NodeRendererImpl { return false; } - return true; + return FieldVisibilityProvider.shouldDisplayField(field); } @Override diff --git a/java/debugger/openapi/src/com/intellij/debugger/engine/FieldVisibilityProvider.kt b/java/debugger/openapi/src/com/intellij/debugger/engine/FieldVisibilityProvider.kt new file mode 100644 index 000000000000..b64367ee13c1 --- /dev/null +++ b/java/debugger/openapi/src/com/intellij/debugger/engine/FieldVisibilityProvider.kt @@ -0,0 +1,21 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.debugger.engine + +import com.intellij.openapi.extensions.ExtensionPointName +import com.sun.jdi.Field + +/** + * Allows plugins to hide fields unconditionally + * + * The field will be displayed only if all extensions allow. + */ +interface FieldVisibilityProvider { + fun shouldDisplay(field: Field): Boolean + + companion object { + private val EP_NAME: ExtensionPointName = ExtensionPointName.create("com.intellij.debugger.fieldVisibilityProvider") + + @JvmStatic + fun shouldDisplayField(field: Field): Boolean = EP_NAME.findFirstSafe { !it.shouldDisplay(field) } == null + } +} \ No newline at end of file diff --git a/java/java-impl/src/META-INF/JavaPlugin.xml b/java/java-impl/src/META-INF/JavaPlugin.xml index e9d1110edfdc..96f6084e0d33 100644 --- a/java/java-impl/src/META-INF/JavaPlugin.xml +++ b/java/java-impl/src/META-INF/JavaPlugin.xml @@ -303,6 +303,9 @@ + +