Search in sources :

Example 1 with ExpressionEvaluator

use of com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator in project intellij-community by JetBrains.

the class Breakpoint method evaluateCondition.

public boolean evaluateCondition(final EvaluationContextImpl context, LocatableEvent event) throws EvaluateException {
    DebugProcessImpl debugProcess = context.getDebugProcess();
    if (isCountFilterEnabled() && !isConditionEnabled()) {
        debugProcess.getVirtualMachineProxy().suspend();
        debugProcess.getRequestsManager().deleteRequest(this);
        createRequest(debugProcess);
        debugProcess.getVirtualMachineProxy().resume();
    }
    if (isInstanceFiltersEnabled()) {
        Value value = context.getThisObject();
        if (value != null) {
            // non-static
            ObjectReference reference = (ObjectReference) value;
            if (!hasObjectID(reference.uniqueID())) {
                return false;
            }
        }
    }
    if (isClassFiltersEnabled() && !typeMatchesClassFilters(calculateEventClass(context, event), getClassFilters(), getClassExclusionFilters())) {
        return false;
    }
    if (isConditionEnabled()) {
        TextWithImports condition = getCondition();
        if (condition.isEmpty()) {
            return true;
        }
        StackFrameProxyImpl frame = context.getFrameProxy();
        if (frame != null) {
            Location location = frame.location();
            if (location != null) {
                ThreeState result = debugProcess.getPositionManager().evaluateCondition(context, frame, location, condition.getText());
                if (result != ThreeState.UNSURE) {
                    return result == ThreeState.YES;
                }
            }
        }
        try {
            SourcePosition contextSourcePosition = ContextUtil.getSourcePosition(context);
            ExpressionEvaluator evaluator = DebuggerInvocationUtil.commitAndRunReadAction(myProject, () -> {
                // IMPORTANT: calculate context psi element basing on the location where the exception
                // has been hit, not on the location where it was set. (For line breakpoints these locations are the same, however,
                // for method, exception and field breakpoints these locations differ)
                PsiElement contextElement = ContextUtil.getContextElement(contextSourcePosition);
                // as a last resort
                PsiElement contextPsiElement = contextElement != null ? contextElement : getEvaluationElement();
                return EvaluatorCache.cacheOrGet("ConditionEvaluator", event.request(), contextPsiElement, condition, () -> createExpressionEvaluator(myProject, contextPsiElement, contextSourcePosition, condition, this::createConditionCodeFragment));
            });
            if (!DebuggerUtilsEx.evaluateBoolean(evaluator, context)) {
                return false;
            }
        } catch (EvaluateException ex) {
            if (ex.getCause() instanceof VMDisconnectedException) {
                return false;
            }
            throw EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("error.failed.evaluating.breakpoint.condition", condition, ex.getMessage()));
        }
    }
    if (isCountFilterEnabled() && isConditionEnabled()) {
        Long hitCount = ObjectUtils.notNull((Long) event.request().getProperty(HIT_COUNTER), 0L) + 1;
        event.request().putProperty(HIT_COUNTER, hitCount);
        return hitCount % getCountFilter() == 0;
    }
    return true;
}
Also used : StackFrameProxyImpl(com.intellij.debugger.jdi.StackFrameProxyImpl) ExpressionEvaluator(com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator) ThreeState(com.intellij.util.ThreeState) PsiElement(com.intellij.psi.PsiElement)

Example 2 with ExpressionEvaluator

use of com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator in project intellij-community by JetBrains.

the class Breakpoint method runAction.

private void runAction(EvaluationContextImpl context, LocatableEvent event) {
    DebugProcessImpl debugProcess = context.getDebugProcess();
    if (isLogEnabled() || isLogExpressionEnabled()) {
        StringBuilder buf = StringBuilderSpinAllocator.alloc();
        try {
            if (myXBreakpoint.isLogMessage()) {
                buf.append(getEventMessage(event)).append("\n");
            }
            if (isLogExpressionEnabled()) {
                if (!debugProcess.isAttached()) {
                    return;
                }
                TextWithImports logMessage = getLogMessage();
                try {
                    SourcePosition position = ContextUtil.getSourcePosition(context);
                    PsiElement element = ContextUtil.getContextElement(context, position);
                    ExpressionEvaluator evaluator = DebuggerInvocationUtil.commitAndRunReadAction(myProject, () -> EvaluatorCache.cacheOrGet("LogMessageEvaluator", event.request(), element, logMessage, () -> createExpressionEvaluator(myProject, element, position, logMessage, this::createLogMessageCodeFragment)));
                    Value eval = evaluator.evaluate(context);
                    buf.append(eval instanceof VoidValue ? "void" : DebuggerUtils.getValueAsString(context, eval));
                } catch (EvaluateException e) {
                    buf.append(DebuggerBundle.message("error.unable.to.evaluate.expression")).append(" \"").append(logMessage).append("\"").append(" : ").append(e.getMessage());
                }
                buf.append("\n");
            }
            if (buf.length() > 0) {
                debugProcess.printToConsole(buf.toString());
            }
        } finally {
            StringBuilderSpinAllocator.dispose(buf);
        }
    }
    if (isRemoveAfterHit()) {
        handleTemporaryBreakpointHit(debugProcess);
    }
}
Also used : ExpressionEvaluator(com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator) PsiElement(com.intellij.psi.PsiElement)

Example 3 with ExpressionEvaluator

use of com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator in project intellij-community by JetBrains.

the class JavaSmartStepIntoHandler method findSmartStepTargets.

protected List<SmartStepTarget> findSmartStepTargets(final SourcePosition position, @Nullable SuspendContextImpl suspendContext, @NotNull DebuggerContextImpl debuggerContext) {
    final int line = position.getLine();
    if (line < 0) {
        // the document has been changed
        return Collections.emptyList();
    }
    final PsiFile file = position.getFile();
    final VirtualFile vFile = file.getVirtualFile();
    if (vFile == null) {
        // the file is not physical
        return Collections.emptyList();
    }
    final Document doc = FileDocumentManager.getInstance().getDocument(vFile);
    if (doc == null)
        return Collections.emptyList();
    if (line >= doc.getLineCount()) {
        // the document has been changed
        return Collections.emptyList();
    }
    TextRange curLineRange = DocumentUtil.getLineTextRange(doc, line);
    PsiElement element = position.getElementAt();
    PsiElement body = DebuggerUtilsEx.getBody(DebuggerUtilsEx.getContainingMethod(element));
    final TextRange lineRange = (body != null) ? curLineRange.intersection(body.getTextRange()) : curLineRange;
    if (lineRange == null || lineRange.isEmpty()) {
        return Collections.emptyList();
    }
    if (element != null && !(element instanceof PsiCompiledElement)) {
        do {
            final PsiElement parent = element.getParent();
            if (parent == null || (parent.getTextOffset() < lineRange.getStartOffset())) {
                break;
            }
            element = parent;
        } while (true);
        //noinspection unchecked
        final List<SmartStepTarget> targets = new OrderedSet<>();
        final Ref<TextRange> textRange = new Ref<>(lineRange);
        final PsiElementVisitor methodCollector = new JavaRecursiveElementVisitor() {

            final Deque<PsiMethod> myContextStack = new LinkedList<>();

            final Deque<String> myParamNameStack = new LinkedList<>();

            private int myNextLambdaExpressionOrdinal = 0;

            private boolean myInsideLambda = false;

            @Nullable
            private String getCurrentParamName() {
                return myParamNameStack.peekFirst();
            }

            @Override
            public void visitAnonymousClass(PsiAnonymousClass aClass) {
                for (PsiMethod psiMethod : aClass.getMethods()) {
                    targets.add(0, new MethodSmartStepTarget(psiMethod, getCurrentParamName(), psiMethod.getBody(), true, null));
                }
            }

            public void visitLambdaExpression(PsiLambdaExpression expression) {
                boolean inLambda = myInsideLambda;
                myInsideLambda = true;
                super.visitLambdaExpression(expression);
                myInsideLambda = inLambda;
                targets.add(0, new LambdaSmartStepTarget(expression, getCurrentParamName(), expression.getBody(), myNextLambdaExpressionOrdinal++, null, !myInsideLambda));
            }

            @Override
            public void visitMethodReferenceExpression(PsiMethodReferenceExpression expression) {
                PsiElement element = expression.resolve();
                if (element instanceof PsiMethod) {
                    PsiElement navMethod = element.getNavigationElement();
                    if (navMethod instanceof PsiMethod) {
                        targets.add(0, new MethodSmartStepTarget(((PsiMethod) navMethod), null, expression, true, null));
                    }
                }
            }

            @Override
            public void visitField(PsiField field) {
                if (checkTextRange(field, false)) {
                    super.visitField(field);
                }
            }

            @Override
            public void visitMethod(PsiMethod method) {
                if (checkTextRange(method, false)) {
                    super.visitMethod(method);
                }
            }

            @Override
            public void visitStatement(PsiStatement statement) {
                if (checkTextRange(statement, true)) {
                    super.visitStatement(statement);
                }
            }

            @Override
            public void visitIfStatement(PsiIfStatement statement) {
                visitConditional(statement.getCondition(), statement.getThenBranch(), statement.getElseBranch());
            }

            @Override
            public void visitConditionalExpression(PsiConditionalExpression expression) {
                visitConditional(expression.getCondition(), expression.getThenExpression(), expression.getElseExpression());
            }

            private void visitConditional(@Nullable PsiElement condition, @Nullable PsiElement thenBranch, @Nullable PsiElement elseBranch) {
                if (condition != null && checkTextRange(condition, true)) {
                    condition.accept(this);
                }
                ThreeState conditionRes = evaluateCondition(condition);
                if (conditionRes != ThreeState.NO && thenBranch != null && checkTextRange(thenBranch, true)) {
                    thenBranch.accept(this);
                }
                if (conditionRes != ThreeState.YES && elseBranch != null && checkTextRange(elseBranch, true)) {
                    elseBranch.accept(this);
                }
            }

            private ThreeState evaluateCondition(@Nullable PsiElement condition) {
                if (condition != null && !DebuggerUtils.hasSideEffects(condition)) {
                    try {
                        ExpressionEvaluator evaluator = EvaluatorBuilderImpl.getInstance().build(condition, position);
                        return ThreeState.fromBoolean(DebuggerUtilsEx.evaluateBoolean(evaluator, debuggerContext.createEvaluationContext()));
                    } catch (EvaluateException e) {
                        LOG.info(e);
                    }
                }
                return ThreeState.UNSURE;
            }

            @Override
            public void visitExpression(PsiExpression expression) {
                checkTextRange(expression, true);
                super.visitExpression(expression);
            }

            boolean checkTextRange(@NotNull PsiElement expression, boolean expand) {
                TextRange range = expression.getTextRange();
                if (lineRange.intersects(range)) {
                    if (expand) {
                        textRange.set(textRange.get().union(range));
                    }
                    return true;
                }
                return false;
            }

            public void visitExpressionList(PsiExpressionList expressionList) {
                PsiMethod psiMethod = myContextStack.peekFirst();
                if (psiMethod != null) {
                    final String methodName = psiMethod.getName();
                    final PsiExpression[] expressions = expressionList.getExpressions();
                    final PsiParameter[] parameters = psiMethod.getParameterList().getParameters();
                    for (int idx = 0; idx < expressions.length; idx++) {
                        final String paramName = (idx < parameters.length && !parameters[idx].isVarArgs()) ? parameters[idx].getName() : "arg" + (idx + 1);
                        myParamNameStack.push(methodName + ": " + paramName + ".");
                        final PsiExpression argExpression = expressions[idx];
                        try {
                            argExpression.accept(this);
                        } finally {
                            myParamNameStack.pop();
                        }
                    }
                } else {
                    super.visitExpressionList(expressionList);
                }
            }

            @Override
            public void visitCallExpression(final PsiCallExpression expression) {
                final PsiMethod psiMethod = expression.resolveMethod();
                if (psiMethod != null) {
                    myContextStack.push(psiMethod);
                    targets.add(new MethodSmartStepTarget(psiMethod, null, expression instanceof PsiMethodCallExpression ? ((PsiMethodCallExpression) expression).getMethodExpression().getReferenceNameElement() : expression instanceof PsiNewExpression ? ((PsiNewExpression) expression).getClassOrAnonymousClassReference() : expression, myInsideLambda, null));
                }
                try {
                    super.visitCallExpression(expression);
                } finally {
                    if (psiMethod != null) {
                        myContextStack.pop();
                    }
                }
            }
        };
        element.accept(methodCollector);
        for (PsiElement sibling = element.getNextSibling(); sibling != null; sibling = sibling.getNextSibling()) {
            if (!lineRange.intersects(sibling.getTextRange())) {
                break;
            }
            sibling.accept(methodCollector);
        }
        Range<Integer> lines = new Range<>(doc.getLineNumber(textRange.get().getStartOffset()), doc.getLineNumber(textRange.get().getEndOffset()));
        targets.forEach(t -> t.setCallingExpressionLines(lines));
        if (!targets.isEmpty()) {
            StackFrameProxyImpl frameProxy = suspendContext != null ? suspendContext.getFrameProxy() : null;
            if (frameProxy != null) {
                try {
                    Location location = frameProxy.location();
                    MethodBytecodeUtil.visit(location.method(), location.codeIndex(), new MethodVisitor(Opcodes.API_VERSION) {

                        boolean myLineMatch = false;

                        @Override
                        public void visitLineNumber(int line, Label start) {
                            myLineMatch = lines.isWithin(line - 1);
                        }

                        @Override
                        public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
                            if (myLineMatch) {
                                targets.removeIf(t -> {
                                    if (t instanceof MethodSmartStepTarget) {
                                        return DebuggerUtilsEx.methodMatches(((MethodSmartStepTarget) t).getMethod(), owner.replace("/", "."), name, desc, suspendContext.getDebugProcess());
                                    }
                                    return false;
                                });
                            }
                        }
                    }, true);
                } catch (Exception e) {
                    LOG.info(e);
                }
            }
            return targets;
        }
    }
    return Collections.emptyList();
}
Also used : DebuggerContextImpl(com.intellij.debugger.impl.DebuggerContextImpl) VirtualFile(com.intellij.openapi.vfs.VirtualFile) Document(com.intellij.openapi.editor.Document) Opcodes(org.jetbrains.org.objectweb.asm.Opcodes) DebuggerUtilsEx(com.intellij.debugger.impl.DebuggerUtilsEx) OrderedSet(com.intellij.util.containers.OrderedSet) Computable(com.intellij.openapi.util.Computable) MethodBytecodeUtil(com.intellij.debugger.jdi.MethodBytecodeUtil) Deque(java.util.Deque) DebuggerUIUtil(com.intellij.xdebugger.impl.ui.DebuggerUIUtil) ExpressionEvaluator(com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator) DebuggerContextCommandImpl(com.intellij.debugger.engine.events.DebuggerContextCommandImpl) DebuggerSession(com.intellij.debugger.impl.DebuggerSession) DocumentUtil(com.intellij.util.DocumentUtil) SuspendContextImpl(com.intellij.debugger.engine.SuspendContextImpl) Location(com.sun.jdi.Location) Logger(com.intellij.openapi.diagnostic.Logger) LinkedList(java.util.LinkedList) JavaLanguage(com.intellij.lang.java.JavaLanguage) TextEditor(com.intellij.openapi.fileEditor.TextEditor) StackFrameProxyImpl(com.intellij.debugger.jdi.StackFrameProxyImpl) Range(com.intellij.util.Range) DebuggerUtils(com.intellij.debugger.engine.DebuggerUtils) EvaluateException(com.intellij.debugger.engine.evaluation.EvaluateException) MethodVisitor(org.jetbrains.org.objectweb.asm.MethodVisitor) ThreeState(com.intellij.util.ThreeState) FileDocumentManager(com.intellij.openapi.fileEditor.FileDocumentManager) TextRange(com.intellij.openapi.util.TextRange) Nullable(org.jetbrains.annotations.Nullable) List(java.util.List) EvaluatorBuilderImpl(com.intellij.debugger.engine.evaluation.expression.EvaluatorBuilderImpl) ApplicationManager(com.intellij.openapi.application.ApplicationManager) Registry(com.intellij.openapi.util.registry.Registry) com.intellij.psi(com.intellij.psi) NotNull(org.jetbrains.annotations.NotNull) Ref(com.intellij.openapi.util.Ref) Collections(java.util.Collections) SourcePosition(com.intellij.debugger.SourcePosition) Label(org.jetbrains.org.objectweb.asm.Label) Label(org.jetbrains.org.objectweb.asm.Label) Document(com.intellij.openapi.editor.Document) MethodVisitor(org.jetbrains.org.objectweb.asm.MethodVisitor) ThreeState(com.intellij.util.ThreeState) TextRange(com.intellij.openapi.util.TextRange) Range(com.intellij.util.Range) TextRange(com.intellij.openapi.util.TextRange) Nullable(org.jetbrains.annotations.Nullable) VirtualFile(com.intellij.openapi.vfs.VirtualFile) StackFrameProxyImpl(com.intellij.debugger.jdi.StackFrameProxyImpl) ExpressionEvaluator(com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator) NotNull(org.jetbrains.annotations.NotNull) EvaluateException(com.intellij.debugger.engine.evaluation.EvaluateException) OrderedSet(com.intellij.util.containers.OrderedSet) Deque(java.util.Deque) EvaluateException(com.intellij.debugger.engine.evaluation.EvaluateException) Ref(com.intellij.openapi.util.Ref) Location(com.sun.jdi.Location)

Example 4 with ExpressionEvaluator

use of com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator in project intellij-community by JetBrains.

the class EvaluationDescriptor method calcValue.

public final Value calcValue(EvaluationContextImpl evaluationContext) throws EvaluateException {
    try {
        PsiDocumentManager.getInstance(myProject).commitAndRunReadAction(() -> {
        });
        EvaluationContextImpl thisEvaluationContext = getEvaluationContext(evaluationContext);
        SourcePosition position = ContextUtil.getSourcePosition(evaluationContext);
        PsiElement psiContext = ContextUtil.getContextElement(evaluationContext, position);
        ExpressionEvaluator evaluator = ReadAction.compute(() -> {
            PsiCodeFragment code = getEvaluationCode(thisEvaluationContext);
            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;
                }
                throw ex;
            }
        });
        if (!thisEvaluationContext.getDebugProcess().isAttached()) {
            throw EvaluateExceptionUtil.PROCESS_EXITED;
        }
        StackFrameProxyImpl frameProxy = thisEvaluationContext.getFrameProxy();
        if (frameProxy == null) {
            throw EvaluateExceptionUtil.NULL_STACK_FRAME;
        }
        Value value = evaluator.evaluate(thisEvaluationContext);
        DebuggerUtilsEx.keep(value, thisEvaluationContext);
        myModifier = evaluator.getModifier();
        setLvalue(myModifier != null);
        return value;
    } catch (final EvaluateException ex) {
        throw new EvaluateException(ex.getLocalizedMessage(), ex);
    } catch (ObjectCollectedException ex) {
        throw EvaluateExceptionUtil.OBJECT_WAS_COLLECTED;
    }
}
Also used : StackFrameContext(com.intellij.debugger.engine.StackFrameContext) Modifier(com.intellij.debugger.engine.evaluation.expression.Modifier) DebuggerContextImpl(com.intellij.debugger.impl.DebuggerContextImpl) ContextUtil(com.intellij.debugger.engine.ContextUtil) DebuggerUtilsEx(com.intellij.debugger.impl.DebuggerUtilsEx) EvaluationContextImpl(com.intellij.debugger.engine.evaluation.EvaluationContextImpl) ReadAction(com.intellij.openapi.application.ReadAction) ExpressionEvaluator(com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator) XValueModifier(com.intellij.xdebugger.frame.XValueModifier) TextWithImports(com.intellij.debugger.engine.evaluation.TextWithImports) Project(com.intellij.openapi.project.Project) DebuggerBundle(com.intellij.debugger.DebuggerBundle) StackFrameProxyImpl(com.intellij.debugger.jdi.StackFrameProxyImpl) EvaluateException(com.intellij.debugger.engine.evaluation.EvaluateException) UnsupportedExpressionException(com.intellij.debugger.engine.evaluation.expression.UnsupportedExpressionException) JavaValueModifier(com.intellij.debugger.engine.JavaValueModifier) EvaluateExceptionUtil(com.intellij.debugger.engine.evaluation.EvaluateExceptionUtil) JavaValue(com.intellij.debugger.engine.JavaValue) Nullable(org.jetbrains.annotations.Nullable) DebuggerContext(com.intellij.debugger.DebuggerContext) DebuggerManagerEx(com.intellij.debugger.DebuggerManagerEx) com.sun.jdi(com.sun.jdi) com.intellij.psi(com.intellij.psi) NotNull(org.jetbrains.annotations.NotNull) SourcePosition(com.intellij.debugger.SourcePosition) StackFrameProxyImpl(com.intellij.debugger.jdi.StackFrameProxyImpl) EvaluateException(com.intellij.debugger.engine.evaluation.EvaluateException) EvaluationContextImpl(com.intellij.debugger.engine.evaluation.EvaluationContextImpl) SourcePosition(com.intellij.debugger.SourcePosition) JavaValue(com.intellij.debugger.engine.JavaValue) UnsupportedExpressionException(com.intellij.debugger.engine.evaluation.expression.UnsupportedExpressionException) ExpressionEvaluator(com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator)

Example 5 with ExpressionEvaluator

use of com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator in project intellij-community by JetBrains.

the class RuntimeTypeEvaluator method evaluate.

@Nullable
protected PsiType evaluate(final EvaluationContextImpl evaluationContext) throws EvaluateException {
    Project project = evaluationContext.getProject();
    SourcePosition position = ContextUtil.getSourcePosition(evaluationContext);
    ExpressionEvaluator evaluator = DebuggerInvocationUtil.commitAndRunReadAction(project, new EvaluatingComputable<ExpressionEvaluator>() {

        public ExpressionEvaluator compute() throws EvaluateException {
            return EvaluatorBuilderImpl.getInstance().build(myElement, position);
        }
    });
    final Value value = evaluator.evaluate(evaluationContext);
    if (value != null) {
        return getCastableRuntimeType(project, value);
    }
    throw EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.surrounded.expression.null"));
}
Also used : Project(com.intellij.openapi.project.Project) EvaluateException(com.intellij.debugger.engine.evaluation.EvaluateException) SourcePosition(com.intellij.debugger.SourcePosition) Value(com.sun.jdi.Value) ExpressionEvaluator(com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator) Nullable(org.jetbrains.annotations.Nullable)

Aggregations

ExpressionEvaluator (com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator)9 SourcePosition (com.intellij.debugger.SourcePosition)4 EvaluateException (com.intellij.debugger.engine.evaluation.EvaluateException)4 Value (com.sun.jdi.Value)4 DebuggerContextImpl (com.intellij.debugger.impl.DebuggerContextImpl)3 StackFrameProxyImpl (com.intellij.debugger.jdi.StackFrameProxyImpl)3 PsiElement (com.intellij.psi.PsiElement)3 Nullable (org.jetbrains.annotations.Nullable)3 DebugProcess (com.intellij.debugger.engine.DebugProcess)2 DebuggerContextCommandImpl (com.intellij.debugger.engine.events.DebuggerContextCommandImpl)2 DebuggerSession (com.intellij.debugger.impl.DebuggerSession)2 DebuggerUtilsEx (com.intellij.debugger.impl.DebuggerUtilsEx)2 Project (com.intellij.openapi.project.Project)2 com.intellij.psi (com.intellij.psi)2 ThreeState (com.intellij.util.ThreeState)2 NotNull (org.jetbrains.annotations.NotNull)2 DebuggerBundle (com.intellij.debugger.DebuggerBundle)1 DebuggerContext (com.intellij.debugger.DebuggerContext)1 DebuggerManagerEx (com.intellij.debugger.DebuggerManagerEx)1 ContextUtil (com.intellij.debugger.engine.ContextUtil)1