Search in sources :

Example 11 with SourcePosition

use of com.intellij.debugger.SourcePosition in project intellij-community by JetBrains.

the class JumpToObjectAction method calcPosition.

private static SourcePosition calcPosition(final ValueDescriptor descriptor, final DebugProcessImpl debugProcess) throws ClassNotLoadedException {
    Type type = descriptor.getType();
    if (type == null) {
        return null;
    }
    try {
        if (type instanceof ArrayType) {
            type = ((ArrayType) type).componentType();
        }
        if (type instanceof ClassType) {
            ClassType clsType = (ClassType) type;
            Method lambdaMethod = MethodBytecodeUtil.getLambdaMethod(clsType, debugProcess.getVirtualMachineProxy());
            Location location = lambdaMethod != null ? ContainerUtil.getFirstItem(DebuggerUtilsEx.allLineLocations(lambdaMethod)) : null;
            if (location == null) {
                location = ContainerUtil.getFirstItem(clsType.allLineLocations());
            }
            if (location != null) {
                SourcePosition position = debugProcess.getPositionManager().getSourcePosition(location);
                return ApplicationManager.getApplication().runReadAction(new Computable<SourcePosition>() {

                    @Override
                    public SourcePosition compute() {
                        // adjust position for non-anonymous classes
                        if (clsType.name().indexOf('$') < 0) {
                            PsiClass classAt = JVMNameUtil.getClassAt(position);
                            if (classAt != null) {
                                SourcePosition classPosition = SourcePosition.createFromElement(classAt);
                                if (classPosition != null) {
                                    return classPosition;
                                }
                            }
                        }
                        return position;
                    }
                });
            }
        }
    } catch (ClassNotPreparedException | AbsentInformationException e) {
        LOG.debug(e);
    }
    return null;
}
Also used : SourcePosition(com.intellij.debugger.SourcePosition) PsiClass(com.intellij.psi.PsiClass)

Example 12 with SourcePosition

use of com.intellij.debugger.SourcePosition in project intellij-community by JetBrains.

the class CompoundPositionManager method locationsOfLine.

@Override
@NotNull
public List<Location> locationsOfLine(@NotNull final ReferenceType type, @NotNull SourcePosition position) {
    VirtualFile file = position.getFile().getVirtualFile();
    if (file != null) {
        LineNumbersMapping mapping = file.getUserData(LineNumbersMapping.LINE_NUMBERS_MAPPING_KEY);
        if (mapping != null) {
            int line = mapping.sourceToBytecode(position.getLine() + 1);
            if (line > -1) {
                position = SourcePosition.createFromLine(position.getFile(), line - 1);
            }
        }
    }
    final SourcePosition finalPosition = position;
    return iterate(positionManager -> positionManager.locationsOfLine(type, finalPosition), Collections.emptyList(), position);
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) LineNumbersMapping(com.intellij.execution.filters.LineNumbersMapping) SourcePosition(com.intellij.debugger.SourcePosition) NotNull(org.jetbrains.annotations.NotNull)

Example 13 with SourcePosition

use of com.intellij.debugger.SourcePosition in project intellij-community by JetBrains.

the class ContextUtil method getContextElement.

@Nullable
public static PsiElement getContextElement(final StackFrameContext context, final SourcePosition position) {
    if (LOG.isDebugEnabled()) {
        final SourcePosition sourcePosition = getSourcePosition(context);
        LOG.assertTrue(Comparing.equal(sourcePosition, position));
    }
    return ReadAction.compute(() -> {
        final PsiElement element = getContextElement(position);
        if (element == null) {
            return null;
        }
        // further code is java specific, actually
        if (element.getLanguage().getAssociatedFileType() != DefaultCodeFragmentFactory.getInstance().getFileType()) {
            return element;
        }
        final StackFrameProxyImpl frameProxy = (StackFrameProxyImpl) context.getFrameProxy();
        if (frameProxy == null) {
            return element;
        }
        try {
            List<LocalVariableProxyImpl> list = frameProxy.visibleVariables();
            PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(element.getProject()).getResolveHelper();
            StringBuilder buf = null;
            for (LocalVariableProxyImpl localVariable : list) {
                final String varName = localVariable.name();
                if (resolveHelper.resolveReferencedVariable(varName, element) == null) {
                    if (buf == null) {
                        buf = new StringBuilder("{");
                    }
                    buf.append(localVariable.getVariable().typeName()).append(" ").append(varName).append(";");
                }
            }
            if (buf == null) {
                return element;
            }
            buf.append('}');
            final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(element.getProject()).getElementFactory();
            final PsiCodeBlock codeBlockFromText = elementFactory.createCodeBlockFromText(buf.toString(), element);
            final PsiStatement[] statements = codeBlockFromText.getStatements();
            for (PsiStatement statement : statements) {
                if (statement instanceof PsiDeclarationStatement) {
                    PsiDeclarationStatement declStatement = (PsiDeclarationStatement) statement;
                    PsiElement[] declaredElements = declStatement.getDeclaredElements();
                    for (PsiElement declaredElement : declaredElements) {
                        declaredElement.putUserData(IS_JSP_IMPLICIT, Boolean.TRUE);
                    }
                }
            }
            return codeBlockFromText;
        } catch (IncorrectOperationException | EvaluateException ignored) {
            return element;
        }
    });
}
Also used : StackFrameProxyImpl(com.intellij.debugger.jdi.StackFrameProxyImpl) LocalVariableProxyImpl(com.intellij.debugger.jdi.LocalVariableProxyImpl) EvaluateException(com.intellij.debugger.engine.evaluation.EvaluateException) SourcePosition(com.intellij.debugger.SourcePosition) IncorrectOperationException(com.intellij.util.IncorrectOperationException) Nullable(org.jetbrains.annotations.Nullable)

Example 14 with SourcePosition

use of com.intellij.debugger.SourcePosition in project intellij-community by JetBrains.

the class ToggleFieldBreakpointAction method update.

@Override
public void update(AnActionEvent event) {
    SourcePosition place = getPlace(event);
    boolean toEnable = place != null;
    Presentation presentation = event.getPresentation();
    if (ActionPlaces.PROJECT_VIEW_POPUP.equals(event.getPlace()) || ActionPlaces.STRUCTURE_VIEW_POPUP.equals(event.getPlace()) || ActionPlaces.FAVORITES_VIEW_POPUP.equals(event.getPlace())) {
        presentation.setVisible(toEnable);
    } else if (DebuggerAction.isContextView(event)) {
        presentation.setText(DebuggerBundle.message("action.add.field.watchpoint.text"));
        Project project = event.getData(CommonDataKeys.PROJECT);
        if (project != null && place != null) {
            Document document = PsiDocumentManager.getInstance(project).getDocument(place.getFile());
            if (document != null) {
                final int offset = place.getOffset();
                final BreakpointManager breakpointManager = (DebuggerManagerEx.getInstanceEx(project)).getBreakpointManager();
                final Breakpoint fieldBreakpoint = offset >= 0 ? breakpointManager.findBreakpoint(document, offset, FieldBreakpoint.CATEGORY) : null;
                if (fieldBreakpoint != null) {
                    presentation.setEnabled(false);
                    return;
                }
            }
        }
    }
    presentation.setVisible(toEnable);
}
Also used : Project(com.intellij.openapi.project.Project) FieldBreakpoint(com.intellij.debugger.ui.breakpoints.FieldBreakpoint) Breakpoint(com.intellij.debugger.ui.breakpoints.Breakpoint) SourcePosition(com.intellij.debugger.SourcePosition) Document(com.intellij.openapi.editor.Document) BreakpointManager(com.intellij.debugger.ui.breakpoints.BreakpointManager)

Example 15 with SourcePosition

use of com.intellij.debugger.SourcePosition in project intellij-community by JetBrains.

the class ToggleFieldBreakpointAction method actionPerformed.

@Override
public void actionPerformed(AnActionEvent e) {
    Project project = e.getData(CommonDataKeys.PROJECT);
    if (project == null) {
        return;
    }
    final SourcePosition place = getPlace(e);
    if (place != null) {
        Document document = PsiDocumentManager.getInstance(project).getDocument(place.getFile());
        if (document != null) {
            DebuggerManagerEx debuggerManager = DebuggerManagerEx.getInstanceEx(project);
            BreakpointManager manager = debuggerManager.getBreakpointManager();
            final int offset = place.getOffset();
            final Breakpoint breakpoint = offset >= 0 ? manager.findBreakpoint(document, offset, FieldBreakpoint.CATEGORY) : null;
            if (breakpoint == null) {
                FieldBreakpoint fieldBreakpoint = manager.addFieldBreakpoint(document, offset);
                if (fieldBreakpoint != null) {
                    if (DebuggerAction.isContextView(e)) {
                        final DebuggerTreeNodeImpl selectedNode = DebuggerAction.getSelectedNode(e.getDataContext());
                        if (selectedNode != null && selectedNode.getDescriptor() instanceof FieldDescriptorImpl) {
                            ObjectReference object = ((FieldDescriptorImpl) selectedNode.getDescriptor()).getObject();
                            if (object != null) {
                                long id = object.uniqueID();
                                InstanceFilter[] instanceFilters = new InstanceFilter[] { InstanceFilter.create(Long.toString(id)) };
                                fieldBreakpoint.setInstanceFilters(instanceFilters);
                                fieldBreakpoint.setInstanceFiltersEnabled(true);
                            }
                        }
                    }
                    final Editor editor = CommonDataKeys.EDITOR.getData(e.getDataContext());
                    if (editor != null) {
                        manager.editBreakpoint(fieldBreakpoint, editor);
                    }
                }
            } else {
                manager.removeBreakpoint(breakpoint);
            }
        }
    }
}
Also used : FieldBreakpoint(com.intellij.debugger.ui.breakpoints.FieldBreakpoint) Breakpoint(com.intellij.debugger.ui.breakpoints.Breakpoint) InstanceFilter(com.intellij.debugger.InstanceFilter) DebuggerManagerEx(com.intellij.debugger.DebuggerManagerEx) DebuggerTreeNodeImpl(com.intellij.debugger.ui.impl.watch.DebuggerTreeNodeImpl) FieldBreakpoint(com.intellij.debugger.ui.breakpoints.FieldBreakpoint) Document(com.intellij.openapi.editor.Document) BreakpointManager(com.intellij.debugger.ui.breakpoints.BreakpointManager) FieldBreakpoint(com.intellij.debugger.ui.breakpoints.FieldBreakpoint) Breakpoint(com.intellij.debugger.ui.breakpoints.Breakpoint) FieldDescriptorImpl(com.intellij.debugger.ui.impl.watch.FieldDescriptorImpl) Project(com.intellij.openapi.project.Project) ObjectReference(com.sun.jdi.ObjectReference) SourcePosition(com.intellij.debugger.SourcePosition) Editor(com.intellij.openapi.editor.Editor)

Aggregations

SourcePosition (com.intellij.debugger.SourcePosition)36 Project (com.intellij.openapi.project.Project)13 Nullable (org.jetbrains.annotations.Nullable)11 EvaluateException (com.intellij.debugger.engine.evaluation.EvaluateException)9 VirtualFile (com.intellij.openapi.vfs.VirtualFile)8 XSourcePosition (com.intellij.xdebugger.XSourcePosition)7 DebuggerContextImpl (com.intellij.debugger.impl.DebuggerContextImpl)6 StackFrameProxyImpl (com.intellij.debugger.jdi.StackFrameProxyImpl)6 Document (com.intellij.openapi.editor.Document)6 DebuggerContextCommandImpl (com.intellij.debugger.engine.events.DebuggerContextCommandImpl)5 DebugProcessImpl (com.intellij.debugger.engine.DebugProcessImpl)4 ExpressionEvaluator (com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator)4 DebuggerSession (com.intellij.debugger.impl.DebuggerSession)4 DebuggerTreeNodeImpl (com.intellij.debugger.ui.impl.watch.DebuggerTreeNodeImpl)4 Location (com.sun.jdi.Location)4 NotNull (org.jetbrains.annotations.NotNull)4 PsiElement (com.intellij.psi.PsiElement)3 DebuggerBundle (com.intellij.debugger.DebuggerBundle)2 DebuggerManagerEx (com.intellij.debugger.DebuggerManagerEx)2 NoDataException (com.intellij.debugger.NoDataException)2