private InputData getInputData(DefaultBreakpointsViewInput input) { if (Boolean.TRUE.equals(input.getContext().getProperty(IPresentationContext.PROPERTY_DISPOSED)) ) { return null; } InputData data = null; synchronized (fInputToData) { data = fInputToData.get(input); if (data == null) { data = new InputData(input); fInputToData.put(input, data); } } return data; }
fInput, getSelectionFilter(fInput, getDebugContext()), breakpoints); breakpointsAdded(added.toArray(new IBreakpoint[added.size()])); breakpointsRemoved(removed.toArray(new IBreakpoint[removed.size()])); DebugUIPlugin.trace("POST BREAKPOINT DELTA (breakpointsChanged)\n"); //$NON-NLS-1$ postModelChanged(delta, false);
@Override protected IStatus run(IProgressMonitor monitor) { InputData[] datas = fInputToData.values().toArray(new InputData[0]); for (int i = 0; i < datas.length; i++) { datas[i].breakpointsChanged(breakpoints); } return Status.OK_STATUS; } }.schedule();
if (containsBP && buildTrackSelectionDelta(childDelta, childContainer, breakpoints) ) { return true;
if (buildTrackSelectionDelta(delta, fContainer, bpsSet)) { if (DebugUIPlugin.DEBUG_BREAKPOINT_DELTAS) { DebugUIPlugin.trace("POST BREAKPOINT DELTA (trackSelection)\n"); //$NON-NLS-1$ BreakpointManagerProxy[] proxies = getProxies(); for (int i = 0; i < proxies.length; i++) { proxies[i].postModelChanged(delta, true);
/** * 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); } }
/** * Delete elements from existing container that doesn't exist in the reference container. * * @param container the existing container to delete the removed elements. * @param refContainer the reference container to compare elements that are removed. * @param containerDelta the delta of the existing container. */ private void deleteRemovedElements(BreakpointContainer container, BreakpointContainer refContainer, ModelDelta containerDelta) { Object[] children = container.getChildren(); Object[] refChildren = refContainer.getChildren(); // if a child of container doesn't exist in refContainer, than remove it from container for (int i = 0; i < children.length; ++i) { Object element = getElement(refChildren, children[i]); if (element == null) { if (children[i] instanceof BreakpointContainer) { BreakpointContainer.removeAll((BreakpointContainer) children[i], containerDelta); } else { BreakpointContainer.removeBreakpoint(container, (IBreakpoint) children[i], containerDelta); } } else if (element instanceof BreakpointContainer){ ModelDelta childDelta = containerDelta.addNode(children[i], IModelDelta.STATE); deleteRemovedElements((BreakpointContainer) children[i], (BreakpointContainer) element, childDelta); } } }
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); } }
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); } }
/** * Handles the event when a presentation context is disposed. * Sub-classes may override to perform additional cleanup. * * @param context Presentation context that was disposed. */ protected void contextDisposed(IPresentationContext context) { List<InputData> removed = new ArrayList<>(1); synchronized (fInputToData) { for (Iterator<Entry<DefaultBreakpointsViewInput, InputData>> itr = fInputToData.entrySet().iterator(); itr.hasNext();) { Map.Entry<DefaultBreakpointsViewInput, InputData> entry = itr.next(); IPresentationContext entryContext = entry.getKey().getContext(); if (context.equals(entryContext)) { removed.add(entry.getValue()); itr.remove(); } } } // Dispose the removed input data for (int i = 0; i < removed.size(); i++) { removed.get(i).dispose(); } }
/** * Recursive function to build the model delta to install breakpoint * model proxies for all breakpoints and breakpoint containers. * * @param delta Delta node to build on * @param container Container element to build delta for. */ private void buildInstallDelta(ModelDelta delta, BreakpointContainer container) { Object[] children = container.getChildren(); delta.setChildCount(children.length); for (int i = 0; i < children.length; i++) { ModelDelta childDelta = delta.addNode(children[i], i, IModelDelta.NO_CHANGE); if (children[i] instanceof BreakpointContainer) { childDelta.setFlags(IModelDelta.INSTALL); buildInstallDelta(childDelta, (BreakpointContainer)children[i]); } else if (children[i] instanceof IBreakpoint) { childDelta.setFlags(IModelDelta.INSTALL); } } }
@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 proxyInstalled(BreakpointManagerProxy proxy) { ModelDelta rootDelta = null; synchronized(this) { fProxies.add(proxy); // Generate an install delta rootDelta = new ModelDelta(fInput, 0, IModelDelta.NO_CHANGE, -1); buildInstallDelta(rootDelta, fContainer); if (DebugUIPlugin.DEBUG_BREAKPOINT_DELTAS) { DebugUIPlugin.trace("PROXY INSTALLED (" + proxy + ")\n"); //$NON-NLS-1$ //$NON-NLS-2$ } proxy.postModelChanged(rootDelta, false); } }
@Override protected IStatus run(IProgressMonitor monitor) { InputData[] datas = fInputToData.values().toArray(new InputData[0]); for (int i = 0; i < datas.length; i++) { datas[i].breakpointsRemoved(breakpoints); } return Status.OK_STATUS; } }.schedule();
@Override protected IStatus run(IProgressMonitor monitor) { InputData[] datas = fInputToData.values().toArray(new InputData[0]); for (int i = 0; i < datas.length; i++) { datas[i].breakpointsAdded(breakpoints); } return Status.OK_STATUS; } }.schedule();