mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-02-04 23:39:07 +07:00
IDEA-245393 Convenient representation of String in quick evaluate popup
added new popup for strings, unified inline and `quick evaluate` popups GitOrigin-RevId: daa403b0772a5bd2c4b25859f635bd97b0f19d8c
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1cedae5882
commit
d97e619698
@@ -0,0 +1,26 @@
|
||||
// Copyright 2000-2021 JetBrains s.r.o. and contributors. 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.actions;
|
||||
|
||||
import com.intellij.debugger.engine.DebuggerUtils;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.NlsContexts;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.xdebugger.impl.breakpoints.XExpressionImpl;
|
||||
import com.intellij.xdebugger.impl.inline.SetTextValueActionBase;
|
||||
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil;
|
||||
import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@ApiStatus.Experimental
|
||||
public class SetTextValueAction extends SetTextValueActionBase {
|
||||
|
||||
@Override
|
||||
protected void setTextValue(@NotNull XValueNodeImpl node, @NotNull String text) {
|
||||
DebuggerUIUtil.setTreeNodeValue(node,
|
||||
XExpressionImpl.fromText(
|
||||
StringUtil.wrapWithDoubleQuote(DebuggerUtils.translateStringValue(text))),
|
||||
(@NlsContexts.DialogMessage String errorMessage) -> Messages.showErrorDialog(node.getTree(),
|
||||
errorMessage));
|
||||
}
|
||||
}
|
||||
@@ -33,7 +33,6 @@ import com.intellij.xdebugger.evaluation.XDebuggerEvaluator;
|
||||
import com.intellij.xdebugger.impl.breakpoints.XExpressionImpl;
|
||||
import com.intellij.xdebugger.impl.evaluate.quick.XDebuggerPsiEvaluator;
|
||||
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil;
|
||||
import com.sun.jdi.Value;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.concurrency.Promise;
|
||||
@@ -148,8 +147,8 @@ public class JavaDebuggerEvaluator extends XDebuggerEvaluator implements XDebugg
|
||||
throw ex;
|
||||
}
|
||||
});
|
||||
Value value = evaluator.evaluate(evalContext);
|
||||
WatchItemDescriptor descriptor = new WatchItemDescriptor(project, text.get(), value, evalContext);
|
||||
WatchItemDescriptor descriptor = new WatchItemDescriptor(project, text.get(), evaluator);
|
||||
descriptor.setContext(evalContext);
|
||||
callback.evaluated(JavaValue.create(null, descriptor, evalContext, process.getNodeManager(), true));
|
||||
}
|
||||
catch (EvaluateException e) {
|
||||
|
||||
@@ -564,6 +564,11 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider, XV
|
||||
return myValueDescriptor.getValueText();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isShowsTextValue() {
|
||||
return myValueDescriptor.isString();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public XReferrersProvider getReferrersProvider() {
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.xdebugger.XExpression;
|
||||
import com.intellij.xdebugger.frame.XValueModifier;
|
||||
import com.sun.jdi.*;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -34,6 +35,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
*/
|
||||
public abstract class EvaluationDescriptor extends ValueDescriptorImpl {
|
||||
private Modifier myModifier;
|
||||
private ExpressionEvaluator myEvaluator;
|
||||
protected TextWithImports myText;
|
||||
|
||||
protected EvaluationDescriptor(TextWithImports text, Project project, Value value) {
|
||||
@@ -47,6 +49,12 @@ public abstract class EvaluationDescriptor extends ValueDescriptorImpl {
|
||||
myText = text;
|
||||
}
|
||||
|
||||
@ApiStatus.Experimental
|
||||
protected EvaluationDescriptor(TextWithImports text, Project project, ExpressionEvaluator evaluator) {
|
||||
this(text, project);
|
||||
myEvaluator = evaluator;
|
||||
}
|
||||
|
||||
protected abstract EvaluationContextImpl getEvaluationContext(EvaluationContextImpl evaluationContext);
|
||||
|
||||
protected abstract PsiCodeFragment getEvaluationCode(StackFrameContext context) throws EvaluateException;
|
||||
@@ -64,20 +72,23 @@ public abstract class EvaluationDescriptor extends ValueDescriptorImpl {
|
||||
EvaluationContextImpl thisEvaluationContext = getEvaluationContext(evaluationContext);
|
||||
SourcePosition position = ContextUtil.getSourcePosition(evaluationContext);
|
||||
|
||||
ExpressionEvaluator evaluator = ReadAction.compute(() -> {
|
||||
PsiCodeFragment code = getEvaluationCode(thisEvaluationContext);
|
||||
PsiElement psiContext = ContextUtil.getContextElement(evaluationContext, position);
|
||||
try {
|
||||
return DebuggerUtilsEx.findAppropriateCodeFragmentFactory(getEvaluationText(), psiContext).getEvaluatorBuilder().build(code, position);
|
||||
}
|
||||
catch (UnsupportedExpressionException ex) {
|
||||
ExpressionEvaluator eval = CompilingEvaluatorImpl.create(myProject, code.getContext(), element -> code);
|
||||
if (eval != null) {
|
||||
return eval;
|
||||
ExpressionEvaluator evaluator = myEvaluator;
|
||||
if (evaluator == null) {
|
||||
evaluator = ReadAction.compute(() -> {
|
||||
PsiCodeFragment code = getEvaluationCode(thisEvaluationContext);
|
||||
PsiElement psiContext = ContextUtil.getContextElement(evaluationContext, position);
|
||||
try {
|
||||
return DebuggerUtilsEx.findAppropriateCodeFragmentFactory(getEvaluationText(), psiContext).getEvaluatorBuilder().build(code, position);
|
||||
}
|
||||
throw ex;
|
||||
}
|
||||
});
|
||||
catch (UnsupportedExpressionException ex) {
|
||||
ExpressionEvaluator eval = CompilingEvaluatorImpl.create(myProject, code.getContext(), element -> code);
|
||||
if (eval != null) {
|
||||
return eval;
|
||||
}
|
||||
throw ex;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (!thisEvaluationContext.getDebugProcess().isAttached()) {
|
||||
throw EvaluateExceptionUtil.PROCESS_EXITED;
|
||||
@@ -164,4 +175,4 @@ public abstract class EvaluationDescriptor extends ValueDescriptorImpl {
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,11 +9,13 @@ package com.intellij.debugger.ui.impl.watch;
|
||||
import com.intellij.debugger.engine.StackFrameContext;
|
||||
import com.intellij.debugger.engine.evaluation.EvaluationContextImpl;
|
||||
import com.intellij.debugger.engine.evaluation.TextWithImports;
|
||||
import com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator;
|
||||
import com.intellij.debugger.impl.PositionUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.psi.PsiCodeFragment;
|
||||
import com.sun.jdi.Value;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
public class WatchItemDescriptor extends EvaluationDescriptor {
|
||||
public WatchItemDescriptor(Project project, TextWithImports text) {
|
||||
@@ -32,6 +34,12 @@ public class WatchItemDescriptor extends EvaluationDescriptor {
|
||||
myStoredEvaluationContext = evaluationContext;
|
||||
}
|
||||
|
||||
@ApiStatus.Experimental
|
||||
public WatchItemDescriptor(Project project, TextWithImports text, ExpressionEvaluator evaluator) {
|
||||
super(text, project, evaluator);
|
||||
setValueLabel("");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return getEvaluationText().getText();
|
||||
|
||||
Reference in New Issue
Block a user