/** * Sub-classes may override this to determine whether the breakpoint is supported by the selection. * * @param ss the selection of the debug elements. * @param breakpoint the breakpoint. * @return true if supported. */ protected boolean supportsBreakpoint(IStructuredSelection ss, IBreakpoint breakpoint) { return supportsBreakpoint(getDebugTargets(ss), breakpoint); }
@Override protected Object[] getChildren(Object parent, int index, int length, IPresentationContext context, IViewerUpdate monitor) throws CoreException { Object input = monitor.getViewerInput(); if (input instanceof DefaultBreakpointsViewInput) { DefaultBreakpointsViewInput bpManagerInput = (DefaultBreakpointsViewInput)input; InputData inputData = getInputData(bpManagerInput); if (inputData != null) { Object[] children = inputData.fContainer.getChildren(); return getElements(children, index, length); } } return EMPTY; }
@Override protected boolean removeEldestEntry(java.util.Map.Entry<K, V> arg0) { InputData data = (InputData)arg0.getValue(); if (size() > getMaxInputsCache() && data.fProxies.isEmpty()) { data.dispose(); return true; } return false; } }
void breakpointsChanged(IBreakpoint[] breakpoints) { IBreakpoint[] filteredBreakpoints = filterBreakpoints( fInput, getSelectionFilter(fInput, getDebugContext()), breakpoints);
@Override protected int getChildCount(Object element, IPresentationContext context, IViewerUpdate monitor) throws CoreException { Object input = monitor.getViewerInput(); if (input instanceof DefaultBreakpointsViewInput) { DefaultBreakpointsViewInput bpManagerInput = (DefaultBreakpointsViewInput)input; InputData inputData = getInputData(bpManagerInput); if (inputData != null) { return inputData.fContainer.getChildren().length; } } return 0; }
@Override public void installed(Viewer viewer) { super.installed(viewer); if (fProvider != null) { fProvider.registerModelProxy(fInput, this); } }
/** * Appends the model delta to the first found element in the model delta tree. * * @param parentDelta the parent delta * @param element the element to search * @param flags the delta flags */ private void appendModelDeltaToElement(IModelDelta parentDelta, Object element, int flags) { if (element.equals(parentDelta.getElement())) { ((ModelDelta) parentDelta).setFlags(parentDelta.getFlags() | flags); return; } IModelDelta[] childDeltas = parentDelta.getChildDeltas(); for (int i = 0; i < childDeltas.length; ++i) { if (element.equals(childDeltas[i].getElement())) { ((ModelDelta) childDeltas[i]).setFlags(childDeltas[i].getFlags() | flags); return; } appendModelDeltaToElement(childDeltas[i], element, flags); } } }
/** * Appends the model delta flags to child containers that contains the breakpoint. * * @param parent the parent container. * @param parentDelta the parent model delta. * @param flags the model delta flags. * @param breakpoint the breakpoint to search in the children containers. */ private void appendModelDelta(BreakpointContainer parent, ModelDelta parentDelta, int flags, IBreakpoint breakpoint) { BreakpointContainer[] containers = parent.getContainers(); if (parent.contains(breakpoint)) { if ((containers.length != 0)) { for (int i = 0; i < containers.length; ++i) { ModelDelta nodeDelta = parentDelta.addNode(containers[i], IModelDelta.STATE); appendModelDelta(containers[i], nodeDelta, flags, breakpoint); } } else { parentDelta.addNode(breakpoint, flags); } } }
sortContainers(); } else if (IPresentationContext.PROPERTY_DISPOSED.equals(event.getProperty())) { contextDisposed(fInput.getContext());
void updateContainers() { IBreakpoint[] breakpoints = filterBreakpoints( fInput, getSelectionFilter(fInput, getDebugContext()), fBpManager.getBreakpoints()); synchronized(this) { ModelDelta delta = new ModelDelta(fInput, IModelDelta.NO_CHANGE); // create a reference container, use for deleting elements and adding elements ModelDelta dummyDelta = new ModelDelta(null, IModelDelta.NO_CHANGE); BreakpointContainer refContainer = createRootContainer(dummyDelta, fInput, fOrganizers, breakpoints); // delete the removed elements deleteRemovedElements(fContainer, refContainer, delta); // adjust the old organizer with the reference organizer BreakpointContainer.copyOrganizers(fContainer, refContainer); // insert the added elements IBreakpoint newBreakpoint = insertAddedElements(fContainer, refContainer, delta); delta.setChildCount(fContainer.getChildren().length); // select the new breakpoint if (newBreakpoint != null) { appendModelDeltaToElement(delta, newBreakpoint, IModelDelta.SELECT); } if (DebugUIPlugin.DEBUG_BREAKPOINT_DELTAS) { DebugUIPlugin.trace("POST BREAKPOINT DELTA (setOrganizers)\n"); //$NON-NLS-1$ } postModelChanged(delta, false); } }
/** * Register the breakpoint manager input with this content provider. * * @param input the breakpoint manager input to register. * @param proxy the model proxy of the input. */ public void registerModelProxy(DefaultBreakpointsViewInput input, BreakpointManagerProxy proxy) { synchronized(this) { if (!fIsBreakpointListener) { fBpManager.addBreakpointListener(this); fIsBreakpointListener = true; } } InputData inputData = getInputData(input); if (inputData != null) { inputData.proxyInstalled(proxy); } }
void sortContainers() { IBreakpoint[] breakpoints = filterBreakpoints(fInput, getSelectionFilter(fInput, getDebugContext()), fBpManager.getBreakpoints()); synchronized (this) { ModelDelta delta = new ModelDelta(fInput, IModelDelta.NO_CHANGE); // create a reference container, use for deleting elements and // adding elements ModelDelta dummyDelta = new ModelDelta(null, IModelDelta.NO_CHANGE); BreakpointContainer refContainer = createRootContainer(dummyDelta, fInput, fOrganizers, breakpoints); // delete all elements deleteAllElements(fContainer, delta); // adjust the old organizer with the reference organizer BreakpointContainer.copyOrganizers(fContainer, refContainer); // insert all elements IBreakpoint newBreakpoint = insertAddedElements(fContainer, refContainer, delta); delta.setChildCount(fContainer.getChildren().length); // select the new breakpoint if (newBreakpoint != null) { appendModelDeltaToElement(delta, newBreakpoint, IModelDelta.SELECT); } if (DebugUIPlugin.DEBUG_BREAKPOINT_DELTAS) { DebugUIPlugin.trace("POST BREAKPOINT DELTA (setOrganizers)\n"); //$NON-NLS-1$ } postModelChanged(delta, false); } }
/** * Sub-classes may override this method to filter the breakpoints. * * @param input the breakpoint manager input. * @param selectionFilter the selection to use as filter * @param breakpoints the list of breakpoint to filter. * @return the filtered list of breakpoint based on the input. */ protected IBreakpoint[] filterBreakpoints(DefaultBreakpointsViewInput input, IStructuredSelection selectionFilter, IBreakpoint[] breakpoints) { if (selectionFilter != null && !selectionFilter.isEmpty()) { List<IDebugTarget> targets = getDebugTargets(selectionFilter); ArrayList<IBreakpoint> retVal = new ArrayList<>(); if (targets != null) { for (int i = 0; i < breakpoints.length; ++i) { if (supportsBreakpoint(targets, breakpoints[i])) { retVal.add(breakpoints[i]); } } } return retVal.toArray(new IBreakpoint[retVal.size()]); } else { return breakpoints; } }
IBreakpoint[] filteredBreakpoints = filterBreakpoints( fInput, getSelectionFilter(fInput, getDebugContext()), breakpoints);
/** * Constructor * * @param input the breakpoint manager input */ InputData(DefaultBreakpointsViewInput input) { fInput = input; fComparator = (ElementComparator) input.getContext().getProperty(IBreakpointUIConstants.PROP_BREAKPOINTS_ELEMENT_COMPARATOR); fOrganizers = (IBreakpointOrganizer[]) input.getContext().getProperty(IBreakpointUIConstants.PROP_BREAKPOINTS_ORGANIZERS); // Create the initial container. ModelDelta initialDelta = new ModelDelta(fInput, 0, IModelDelta.NO_CHANGE, -1); IBreakpoint[] breakpoints = filterBreakpoints( fInput, getSelectionFilter(fInput, getDebugContext()), fBpManager.getBreakpoints()); fContainer = createRootContainer(initialDelta, fInput, fOrganizers, breakpoints); registerOrganizersListener(null, fOrganizers); input.getContext().addPropertyChangeListener(fPresentationContextListener); IWorkbenchWindow window = fInput.getContext().getWindow(); if (window != null) { IDebugContextService debugContextService = DebugUITools.getDebugContextManager().getContextService(window); ISelection debugContext = debugContextService.getActiveContext(); if (debugContext instanceof IStructuredSelection) { synchronized(this) { fDebugContext = (IStructuredSelection)debugContext; } } debugContextService.addDebugContextListener(fDebugContextListener); } }