Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainer.java')
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainer.java1064
1 files changed, 532 insertions, 532 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainer.java
index 319dbb85f..a643263f8 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainer.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainer.java
@@ -44,587 +44,587 @@ public class BreakpointContainer extends ElementContentProvider implements IAdap
*/
final private List<IBreakpoint> fBreakpoints = new ArrayList<>();
- /**
- * Child containers - inserting new element into this container should use the insertChildContainer method
- */
+ /**
+ * Child containers - inserting new element into this container should use the insertChildContainer method
+ */
final private List<BreakpointContainer> fChildContainers = new ArrayList<>();
- /**
- * The category for this container
- */
- private IAdaptable fCategory;
-
- /**
- * The breakpoint organizer for this container
- */
- private IBreakpointOrganizer fOrganizer;
-
- /**
- * The nested breakpoint organizer
- */
- private IBreakpointOrganizer[] fNesting;
-
- /**
- * A flag to indicate this is the default container
- */
- private boolean fDefaultContainer;
-
- /**
- * Parent container
- */
- private BreakpointContainer fParent;
-
- /**
- * The comparator, will be use to compare the order for inserting new element into this container
- */
- private ElementComparator fComparator;
-
- /**
- * Constructor, intended to be call when creating the root container.
- *
- * @param organizers the breakpoint organizer for this container
- * @param comparator the element comparator, can be <code>null</code>. If <code>null</code> than new element
- * will be added to the end of the list.
- */
- public BreakpointContainer(IBreakpointOrganizer[] organizers, ElementComparator comparator) {
- fNesting = organizers;
- fComparator = comparator;
- }
-
- /**
- * Constructor, intended to be call within this class only.
- *
- * @param parent the parent breakpoint container
- * @param category the category for this container
- * @param organizer the organizer for this container
- * @param comparator the element comparator
- * @param nesting the nested breakpoint organizer
- */
- private BreakpointContainer(BreakpointContainer parent, IAdaptable category, IBreakpointOrganizer organizer,
- ElementComparator comparator, IBreakpointOrganizer[] nesting) {
- this(category, organizer, nesting);
- fParent = parent;
- fComparator = comparator;
- }
-
- /**
- * Constructor, intended to be call when reorganizing the content.
- *
- * @param category the breakpoint category
- * @param organizer the breakpoint organizer
- * @param nesting the nested breakpoint organizer
- */
- BreakpointContainer(IAdaptable category, IBreakpointOrganizer organizer, IBreakpointOrganizer[] nesting) {
- fCategory = category;
- fOrganizer = organizer;
- fNesting = nesting;
- }
-
- /**
- * Initialize the default containers.
- *
- * @param parentDelta the parent delta, addition child delta will be added to the parent
- */
- public void initDefaultContainers(ModelDelta parentDelta) {
- // seed with all nested categories
- if (fNesting != null && fNesting.length > 0) {
- IAdaptable[] emptyCategories = fNesting[0].getCategories();
- if (emptyCategories != null) {
- for (int i = 0; i < emptyCategories.length; i++) {
- IAdaptable empty = emptyCategories[i];
- BreakpointContainer container = findExistingContainer(fChildContainers, empty);
- if (container == null) {
- IBreakpointOrganizer[] siblings = new IBreakpointOrganizer[fNesting.length - 1];
- System.arraycopy(fNesting, 1, siblings, 0, siblings.length);
- container = new BreakpointContainer(this, empty, fNesting[0], fComparator, siblings);
- insertChildContainer(container);
- container.fDefaultContainer = true;
-
- int size = container.getChildren().length;
- parentDelta.addNode(container, fChildContainers.indexOf(container), IModelDelta.INSTALL|IModelDelta.ADDED|IModelDelta.EXPAND, size);
-
- }
- }
- }
- }
- }
-
- /**
- * Insert the breakpoint to this container.
- *
- * @param breakpoint the new breakpoint
- * @return the index of the breakpoint in the cache, -1 if the breakpoint already exist
- */
- private int insertBreakpoint(IBreakpoint breakpoint) {
- if (fBreakpoints.contains(breakpoint) || breakpoint == null) {
- return -1;
- }
- int index = fBreakpoints.size();
- for (; fComparator != null && index > 0; index--) {
- if (fComparator.compare(fBreakpoints.get(index-1), breakpoint) < 0) {
+ /**
+ * The category for this container
+ */
+ private IAdaptable fCategory;
+
+ /**
+ * The breakpoint organizer for this container
+ */
+ private IBreakpointOrganizer fOrganizer;
+
+ /**
+ * The nested breakpoint organizer
+ */
+ private IBreakpointOrganizer[] fNesting;
+
+ /**
+ * A flag to indicate this is the default container
+ */
+ private boolean fDefaultContainer;
+
+ /**
+ * Parent container
+ */
+ private BreakpointContainer fParent;
+
+ /**
+ * The comparator, will be use to compare the order for inserting new element into this container
+ */
+ private ElementComparator fComparator;
+
+ /**
+ * Constructor, intended to be call when creating the root container.
+ *
+ * @param organizers the breakpoint organizer for this container
+ * @param comparator the element comparator, can be <code>null</code>. If <code>null</code> than new element
+ * will be added to the end of the list.
+ */
+ public BreakpointContainer(IBreakpointOrganizer[] organizers, ElementComparator comparator) {
+ fNesting = organizers;
+ fComparator = comparator;
+ }
+
+ /**
+ * Constructor, intended to be call within this class only.
+ *
+ * @param parent the parent breakpoint container
+ * @param category the category for this container
+ * @param organizer the organizer for this container
+ * @param comparator the element comparator
+ * @param nesting the nested breakpoint organizer
+ */
+ private BreakpointContainer(BreakpointContainer parent, IAdaptable category, IBreakpointOrganizer organizer,
+ ElementComparator comparator, IBreakpointOrganizer[] nesting) {
+ this(category, organizer, nesting);
+ fParent = parent;
+ fComparator = comparator;
+ }
+
+ /**
+ * Constructor, intended to be call when reorganizing the content.
+ *
+ * @param category the breakpoint category
+ * @param organizer the breakpoint organizer
+ * @param nesting the nested breakpoint organizer
+ */
+ BreakpointContainer(IAdaptable category, IBreakpointOrganizer organizer, IBreakpointOrganizer[] nesting) {
+ fCategory = category;
+ fOrganizer = organizer;
+ fNesting = nesting;
+ }
+
+ /**
+ * Initialize the default containers.
+ *
+ * @param parentDelta the parent delta, addition child delta will be added to the parent
+ */
+ public void initDefaultContainers(ModelDelta parentDelta) {
+ // seed with all nested categories
+ if (fNesting != null && fNesting.length > 0) {
+ IAdaptable[] emptyCategories = fNesting[0].getCategories();
+ if (emptyCategories != null) {
+ for (int i = 0; i < emptyCategories.length; i++) {
+ IAdaptable empty = emptyCategories[i];
+ BreakpointContainer container = findExistingContainer(fChildContainers, empty);
+ if (container == null) {
+ IBreakpointOrganizer[] siblings = new IBreakpointOrganizer[fNesting.length - 1];
+ System.arraycopy(fNesting, 1, siblings, 0, siblings.length);
+ container = new BreakpointContainer(this, empty, fNesting[0], fComparator, siblings);
+ insertChildContainer(container);
+ container.fDefaultContainer = true;
+
+ int size = container.getChildren().length;
+ parentDelta.addNode(container, fChildContainers.indexOf(container), IModelDelta.INSTALL|IModelDelta.ADDED|IModelDelta.EXPAND, size);
+
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Insert the breakpoint to this container.
+ *
+ * @param breakpoint the new breakpoint
+ * @return the index of the breakpoint in the cache, -1 if the breakpoint already exist
+ */
+ private int insertBreakpoint(IBreakpoint breakpoint) {
+ if (fBreakpoints.contains(breakpoint) || breakpoint == null) {
+ return -1;
+ }
+ int index = fBreakpoints.size();
+ for (; fComparator != null && index > 0; index--) {
+ if (fComparator.compare(fBreakpoints.get(index-1), breakpoint) < 0) {
break;
}
- }
- if (index < 0) {
- index = 0;
- }
- fBreakpoints.add(index, breakpoint);
- return index;
- }
-
- /**
- * Insert the child container this container.
- *
- * @param container the child container
- * @return the index of the container in the cache, -1 if the child container already exist
- */
- private int insertChildContainer(BreakpointContainer container) {
- int index = fChildContainers.size();
- for (; fComparator != null && index > 0; index--) {
- if (fComparator.compare(fChildContainers.get(index-1), container) < 0) {
+ }
+ if (index < 0) {
+ index = 0;
+ }
+ fBreakpoints.add(index, breakpoint);
+ return index;
+ }
+
+ /**
+ * Insert the child container this container.
+ *
+ * @param container the child container
+ * @return the index of the container in the cache, -1 if the child container already exist
+ */
+ private int insertChildContainer(BreakpointContainer container) {
+ int index = fChildContainers.size();
+ for (; fComparator != null && index > 0; index--) {
+ if (fComparator.compare(fChildContainers.get(index-1), container) < 0) {
break;
}
- }
+ }
- if (index < 0) {
+ if (index < 0) {
index = 0;
}
- fChildContainers.add(index, container);
-
- return index;
- }
-
-
- /**
- * Returns the element comparator.
- *
- * @return the element comparator
- */
- public ElementComparator getElementComparator() {
- return fComparator;
- }
-
- /**
- * Returns the parent container, can be <code>null</code>.
- *
- * @return the parent container
- */
- public BreakpointContainer getParent() {
- return fParent;
- }
-
- /**
- * Determine whether there is any nested container.
- *
- * @return true if has nested container
- */
- private boolean hasNesting() {
- return fNesting != null && fNesting.length > 0;
- }
-
- /**
- * Get the categories for the breakpoint with the given organizer.
- *
- * @param breakpoint the breakpoint
- * @param organizer the organizer
- * @return the categories
- */
- private static IAdaptable[] getCategories(IBreakpoint breakpoint, IBreakpointOrganizer organizer) {
- IAdaptable[] categories = organizer.getCategories(breakpoint);
- if (categories == null || categories.length == 0) {
+ fChildContainers.add(index, container);
+
+ return index;
+ }
+
+
+ /**
+ * Returns the element comparator.
+ *
+ * @return the element comparator
+ */
+ public ElementComparator getElementComparator() {
+ return fComparator;
+ }
+
+ /**
+ * Returns the parent container, can be <code>null</code>.
+ *
+ * @return the parent container
+ */
+ public BreakpointContainer getParent() {
+ return fParent;
+ }
+
+ /**
+ * Determine whether there is any nested container.
+ *
+ * @return true if has nested container
+ */
+ private boolean hasNesting() {
+ return fNesting != null && fNesting.length > 0;
+ }
+
+ /**
+ * Get the categories for the breakpoint with the given organizer.
+ *
+ * @param breakpoint the breakpoint
+ * @param organizer the organizer
+ * @return the categories
+ */
+ private static IAdaptable[] getCategories(IBreakpoint breakpoint, IBreakpointOrganizer organizer) {
+ IAdaptable[] categories = organizer.getCategories(breakpoint);
+ if (categories == null || categories.length == 0) {
categories = OtherBreakpointCategory.getCategories(organizer);
}
- return categories;
- }
-
- /**
- * Find existing breakpoint container in the container array the given category.
- *
- * @param containers the container array
- * @param category the category
- * @return the breakpoint container, can be <code>null</code>.
- */
+ return categories;
+ }
+
+ /**
+ * Find existing breakpoint container in the container array the given category.
+ *
+ * @param containers the container array
+ * @param category the category
+ * @return the breakpoint container, can be <code>null</code>.
+ */
private static BreakpointContainer findExistingContainer(List<BreakpointContainer> containers, IAdaptable category) {
for (BreakpointContainer c : containers) {
- if (category.equals(c.getCategory())) {
+ if (category.equals(c.getCategory())) {
return c;
}
- }
- return null;
- }
-
- // TODO [pchuong]: can be remove if BreakpointsContentProvider no longer uses this class
- void addBreakpoint(IBreakpoint breakpoint) {
- addBreakpoint(breakpoint, new ModelDelta(null, IModelDelta.NO_CHANGE));
- }
-
- /**
- * Add a breakpoint to the container, additional delta will be added to the root delta.
- *
- * @param breakpoint the breakpoint to added
- * @param rootDelta the root delta of this container
- * @see #removeBreakpoint
- */
- public void addBreakpoint(IBreakpoint breakpoint, ModelDelta rootDelta) {
- final int bpIndex = insertBreakpoint(breakpoint);
- if (bpIndex < 0) {
+ }
+ return null;
+ }
+
+ // TODO [pchuong]: can be remove if BreakpointsContentProvider no longer uses this class
+ void addBreakpoint(IBreakpoint breakpoint) {
+ addBreakpoint(breakpoint, new ModelDelta(null, IModelDelta.NO_CHANGE));
+ }
+
+ /**
+ * Add a breakpoint to the container, additional delta will be added to the root delta.
+ *
+ * @param breakpoint the breakpoint to added
+ * @param rootDelta the root delta of this container
+ * @see #removeBreakpoint
+ */
+ public void addBreakpoint(IBreakpoint breakpoint, ModelDelta rootDelta) {
+ final int bpIndex = insertBreakpoint(breakpoint);
+ if (bpIndex < 0) {
return;
}
- if (hasNesting()) {
- IBreakpointOrganizer organizer = fNesting[0];
-
- // get the breakpoint categories from the organizer
- IAdaptable[] categories = getCategories(breakpoint, organizer);
-
- for (int i = 0; i < categories.length; ++i) {
- ModelDelta childDelta = null;
- IAdaptable category = categories[i];
- BreakpointContainer container = findExistingContainer(fChildContainers, category);
-
- // create a new container if it doesn't exist
- if (container == null) {
- IBreakpointOrganizer[] nesting = null;
- if (fNesting.length > 1) {
- nesting = new IBreakpointOrganizer[fNesting.length - 1];
- System.arraycopy(fNesting, 1, nesting, 0, nesting.length);
- }
- container = new BreakpointContainer(this, category, organizer, fComparator, nesting);
- insertChildContainer(container);
- childDelta = rootDelta.addNode(container, fChildContainers.indexOf(container), IModelDelta.INSERTED|IModelDelta.INSTALL, -1);
-
- } else {
+ if (hasNesting()) {
+ IBreakpointOrganizer organizer = fNesting[0];
+
+ // get the breakpoint categories from the organizer
+ IAdaptable[] categories = getCategories(breakpoint, organizer);
+
+ for (int i = 0; i < categories.length; ++i) {
+ ModelDelta childDelta = null;
+ IAdaptable category = categories[i];
+ BreakpointContainer container = findExistingContainer(fChildContainers, category);
+
+ // create a new container if it doesn't exist
+ if (container == null) {
+ IBreakpointOrganizer[] nesting = null;
+ if (fNesting.length > 1) {
+ nesting = new IBreakpointOrganizer[fNesting.length - 1];
+ System.arraycopy(fNesting, 1, nesting, 0, nesting.length);
+ }
+ container = new BreakpointContainer(this, category, organizer, fComparator, nesting);
+ insertChildContainer(container);
+ childDelta = rootDelta.addNode(container, fChildContainers.indexOf(container), IModelDelta.INSERTED|IModelDelta.INSTALL, -1);
+
+ } else {
childDelta = rootDelta.addNode(container, fChildContainers.indexOf(container), IModelDelta.STATE, -1);
- }
-
- container.addBreakpoint(breakpoint, childDelta);
- childDelta.setChildCount(container.getChildren().length);
- }
-
- } else {
- // TODO [pchuong]: There seems to be some kind of problem when the INSERTED flag is used,
- // there is a additional checkbox added to the end of the tree.
- // Also the tree seems to have a strange visual effect when using the INSERTED
- // flag for the child node instead of ADDED flag. Note: all breakpoint delta
- // is using the ADDED flag in this class.
- rootDelta.addNode(breakpoint, bpIndex, IModelDelta.ADDED|IModelDelta.INSTALL, 0);
- // rootDelta.addNode(breakpoint, bpIndex, IModelDelta.INSERTED|IModelDelta.INSTALL, 0);
-
- rootDelta.setFlags(rootDelta.getFlags() | IModelDelta.EXPAND);
- }
- }
-
- /**
- * Remove a breakpoint from the container, additional delta will be added to the root delta.
- *
- * @param breakpoint the breakpoint to remove
- * @param rootDelta the root delta of this container
- * @return if the breakpoint was successfully removed
- * @see #addBreakpoint
- */
- public boolean removeBreakpoint(IBreakpoint breakpoint, ModelDelta rootDelta) {
- boolean removed = fBreakpoints.remove(breakpoint);
-
- if (removed) {
- boolean addRemoveBpDelta = getContainers().length == 0;
+ }
+
+ container.addBreakpoint(breakpoint, childDelta);
+ childDelta.setChildCount(container.getChildren().length);
+ }
+
+ } else {
+ // TODO [pchuong]: There seems to be some kind of problem when the INSERTED flag is used,
+ // there is a additional checkbox added to the end of the tree.
+ // Also the tree seems to have a strange visual effect when using the INSERTED
+ // flag for the child node instead of ADDED flag. Note: all breakpoint delta
+ // is using the ADDED flag in this class.
+ rootDelta.addNode(breakpoint, bpIndex, IModelDelta.ADDED|IModelDelta.INSTALL, 0);
+ // rootDelta.addNode(breakpoint, bpIndex, IModelDelta.INSERTED|IModelDelta.INSTALL, 0);
+
+ rootDelta.setFlags(rootDelta.getFlags() | IModelDelta.EXPAND);
+ }
+ }
+
+ /**
+ * Remove a breakpoint from the container, additional delta will be added to the root delta.
+ *
+ * @param breakpoint the breakpoint to remove
+ * @param rootDelta the root delta of this container
+ * @return if the breakpoint was successfully removed
+ * @see #addBreakpoint
+ */
+ public boolean removeBreakpoint(IBreakpoint breakpoint, ModelDelta rootDelta) {
+ boolean removed = fBreakpoints.remove(breakpoint);
+
+ if (removed) {
+ boolean addRemoveBpDelta = getContainers().length == 0;
Iterator<BreakpointContainer> it = fChildContainers.iterator();
- while (it.hasNext()) {
- BreakpointContainer container = it.next();
+ while (it.hasNext()) {
+ BreakpointContainer container = it.next();
// if the breakpoint contains in the container and it is the only breakpoint,
// than remove the container from the collection
- if (container.contains(breakpoint)) {
- ModelDelta childDelta = null;
- if ((!container.isDefaultContainer()) && (container.getBreakpoints().length <= 1)) {
- it.remove();
- childDelta = rootDelta.addNode(container, IModelDelta.REMOVED|IModelDelta.UNINSTALL);
-
- } else {
- childDelta = rootDelta.addNode(container, IModelDelta.STATE);
- }
- // remove the breakpoint from the nested containers
- container.removeBreakpoint(breakpoint, childDelta);
- }
- }
-
- if (addRemoveBpDelta) {
- rootDelta.addNode(breakpoint, IModelDelta.REMOVED|IModelDelta.UNINSTALL);
- }
- }
- return removed;
- }
-
- /**
- * A helper method to copy the organizers between two containers.
- *
- * @param destContainer the destination container
- * @param sourceContainer the source container
- */
- public static void copyOrganizers(BreakpointContainer destContainer, BreakpointContainer sourceContainer) {
- destContainer.fNesting = sourceContainer.fNesting;
- destContainer.fOrganizer = sourceContainer.fOrganizer;
+ if (container.contains(breakpoint)) {
+ ModelDelta childDelta = null;
+ if ((!container.isDefaultContainer()) && (container.getBreakpoints().length <= 1)) {
+ it.remove();
+ childDelta = rootDelta.addNode(container, IModelDelta.REMOVED|IModelDelta.UNINSTALL);
+
+ } else {
+ childDelta = rootDelta.addNode(container, IModelDelta.STATE);
+ }
+ // remove the breakpoint from the nested containers
+ container.removeBreakpoint(breakpoint, childDelta);
+ }
+ }
+
+ if (addRemoveBpDelta) {
+ rootDelta.addNode(breakpoint, IModelDelta.REMOVED|IModelDelta.UNINSTALL);
+ }
+ }
+ return removed;
+ }
+
+ /**
+ * A helper method to copy the organizers between two containers.
+ *
+ * @param destContainer the destination container
+ * @param sourceContainer the source container
+ */
+ public static void copyOrganizers(BreakpointContainer destContainer, BreakpointContainer sourceContainer) {
+ destContainer.fNesting = sourceContainer.fNesting;
+ destContainer.fOrganizer = sourceContainer.fOrganizer;
destContainer.fCategory = sourceContainer.fCategory;
- }
-
- /**
- * A helper method to update the breakpoint cache of the container and it's ancestors.
- *
- * @param container the breakpoint container
- * @param breakpoints the breakpoint to update
- * @param add true if breakpoint should be added to the cache, otherwise remove the breakpoint from the cache
- */
+ }
+
+ /**
+ * A helper method to update the breakpoint cache of the container and it's ancestors.
+ *
+ * @param container the breakpoint container
+ * @param breakpoints the breakpoint to update
+ * @param add true if breakpoint should be added to the cache, otherwise remove the breakpoint from the cache
+ */
private static void updateSelfAndAncestorsBreakpointCache(BreakpointContainer container, List<IBreakpoint> breakpoints, boolean add) {
- if (container != null) {
- container.fBreakpoints.removeAll(breakpoints);
- if (add) {
+ if (container != null) {
+ container.fBreakpoints.removeAll(breakpoints);
+ if (add) {
container.fBreakpoints.addAll(breakpoints);
}
- updateSelfAndAncestorsBreakpointCache(container.getParent(), breakpoints, add);
- }
- }
-
- /**
- * A helper method to add a breakpoint to an existing container.
- *
- * @param destContainer the destination container
- * @param breakpoint the breakpoint to add
- * @param destContainerDelta the destination container delta, additional delta will be added to this delta
- */
- static public void addBreakpoint(BreakpointContainer destContainer, IBreakpoint breakpoint, ModelDelta destContainerDelta) {
- int index = destContainer.insertBreakpoint(breakpoint);
- Assert.isTrue(index >= 0);
+ updateSelfAndAncestorsBreakpointCache(container.getParent(), breakpoints, add);
+ }
+ }
+
+ /**
+ * A helper method to add a breakpoint to an existing container.
+ *
+ * @param destContainer the destination container
+ * @param breakpoint the breakpoint to add
+ * @param destContainerDelta the destination container delta, additional delta will be added to this delta
+ */
+ static public void addBreakpoint(BreakpointContainer destContainer, IBreakpoint breakpoint, ModelDelta destContainerDelta) {
+ int index = destContainer.insertBreakpoint(breakpoint);
+ Assert.isTrue(index >= 0);
List<IBreakpoint> breakpoints = destContainer.fBreakpoints;
- destContainerDelta.addNode(breakpoint, index/*breakpoints.indexOf(breakpoint)*/, IModelDelta.ADDED|IModelDelta.INSTALL, 0);
- destContainerDelta.setFlags(destContainerDelta.getFlags() | IModelDelta.EXPAND);
-
- // add the breakpoints to the parent containers.
- updateSelfAndAncestorsBreakpointCache(destContainer.getParent(), breakpoints, true);
- }
-
- /**
- * A helper method to add a child container to an existing container.
- *
- * @param destContainer the destination container
- * @param sourceContainer the source container
- * @param destContainerDelta the delta of the destination container, additional delta will be added to this delta
- */
- static public void addChildContainer(BreakpointContainer destContainer, BreakpointContainer sourceContainer, ModelDelta destContainerDelta) {
- destContainer.insertChildContainer(sourceContainer);
- sourceContainer.fParent = destContainer;
-
- // add the breakpoints to the parent containers.
+ destContainerDelta.addNode(breakpoint, index/*breakpoints.indexOf(breakpoint)*/, IModelDelta.ADDED|IModelDelta.INSTALL, 0);
+ destContainerDelta.setFlags(destContainerDelta.getFlags() | IModelDelta.EXPAND);
+
+ // add the breakpoints to the parent containers.
+ updateSelfAndAncestorsBreakpointCache(destContainer.getParent(), breakpoints, true);
+ }
+
+ /**
+ * A helper method to add a child container to an existing container.
+ *
+ * @param destContainer the destination container
+ * @param sourceContainer the source container
+ * @param destContainerDelta the delta of the destination container, additional delta will be added to this delta
+ */
+ static public void addChildContainer(BreakpointContainer destContainer, BreakpointContainer sourceContainer, ModelDelta destContainerDelta) {
+ destContainer.insertChildContainer(sourceContainer);
+ sourceContainer.fParent = destContainer;
+
+ // add the breakpoints to the parent containers.
List<IBreakpoint> breakpoints = Arrays.asList(sourceContainer.getBreakpoints());
- updateSelfAndAncestorsBreakpointCache(destContainer, breakpoints, true);
-
- int index = destContainer.fChildContainers.indexOf(sourceContainer);
- int size = sourceContainer.getChildren().length;
- ModelDelta childDelta = destContainerDelta.addNode(sourceContainer, index, IModelDelta.INSERTED|IModelDelta.INSTALL|IModelDelta.EXPAND, size);
-
- appendContainerDelta(sourceContainer, childDelta);
- }
-
- /**
- * A helper method to append delta to the breakpoint container. This method is used by addContainer only.
- *
- * @param container the container to append child delta
- * @param containerDelta the delta of the breakpoint container, additional delta will be added to this delta
- */
- static private void appendContainerDelta(BreakpointContainer container, ModelDelta containerDelta) {
- Object[] children = container.getChildren();
- for (int i = 0; i < children.length; ++i) {
- boolean isBreakpoint = children[0] instanceof IBreakpoint;
- int numChild = isBreakpoint ? 0 : children.length;
- int flag = isBreakpoint ? IModelDelta.ADDED|IModelDelta.INSTALL
- : IModelDelta.INSERTED|IModelDelta.INSTALL|IModelDelta.EXPAND;
- ModelDelta childDelta = containerDelta.addNode(children[i], i, flag, numChild);
-
- if (children[i] instanceof BreakpointContainer) {
- BreakpointContainer childContainer = (BreakpointContainer) children[i];
- appendContainerDelta(childContainer, childDelta);
- }
- }
- }
-
- /**
- * A helper method to remove the breakpoint from the container.
- *
- * @param container the container to remove the breakpoint
- * @param breakpoint the breakpoint to remove
- * @param containerDelta the delta of the breakpoint container, additional delta will be added to this delta
- */
- static public void removeBreakpoint(BreakpointContainer container, IBreakpoint breakpoint, ModelDelta containerDelta) {
- container.removeBreakpoint(breakpoint, containerDelta);
+ updateSelfAndAncestorsBreakpointCache(destContainer, breakpoints, true);
+
+ int index = destContainer.fChildContainers.indexOf(sourceContainer);
+ int size = sourceContainer.getChildren().length;
+ ModelDelta childDelta = destContainerDelta.addNode(sourceContainer, index, IModelDelta.INSERTED|IModelDelta.INSTALL|IModelDelta.EXPAND, size);
+
+ appendContainerDelta(sourceContainer, childDelta);
+ }
+
+ /**
+ * A helper method to append delta to the breakpoint container. This method is used by addContainer only.
+ *
+ * @param container the container to append child delta
+ * @param containerDelta the delta of the breakpoint container, additional delta will be added to this delta
+ */
+ static private void appendContainerDelta(BreakpointContainer container, ModelDelta containerDelta) {
+ Object[] children = container.getChildren();
+ for (int i = 0; i < children.length; ++i) {
+ boolean isBreakpoint = children[0] instanceof IBreakpoint;
+ int numChild = isBreakpoint ? 0 : children.length;
+ int flag = isBreakpoint ? IModelDelta.ADDED|IModelDelta.INSTALL
+ : IModelDelta.INSERTED|IModelDelta.INSTALL|IModelDelta.EXPAND;
+ ModelDelta childDelta = containerDelta.addNode(children[i], i, flag, numChild);
+
+ if (children[i] instanceof BreakpointContainer) {
+ BreakpointContainer childContainer = (BreakpointContainer) children[i];
+ appendContainerDelta(childContainer, childDelta);
+ }
+ }
+ }
+
+ /**
+ * A helper method to remove the breakpoint from the container.
+ *
+ * @param container the container to remove the breakpoint
+ * @param breakpoint the breakpoint to remove
+ * @param containerDelta the delta of the breakpoint container, additional delta will be added to this delta
+ */
+ static public void removeBreakpoint(BreakpointContainer container, IBreakpoint breakpoint, ModelDelta containerDelta) {
+ container.removeBreakpoint(breakpoint, containerDelta);
List<IBreakpoint> breakpoints = new ArrayList<>();
- breakpoints.add(breakpoint);
- updateSelfAndAncestorsBreakpointCache(container.getParent(), breakpoints, false);
- }
-
- /**
- * Remove all child elements including the given container itself.
- *
- * @param container the breakpoint container
- * @param delta the parent delta
- */
- static public void removeAll(BreakpointContainer container, ModelDelta delta) {
- BreakpointContainer parent = container.getParent();
- if (parent != null) {
- parent.fChildContainers.remove(container);
- delta = delta.addNode(container, IModelDelta.UNINSTALL|IModelDelta.REMOVED);
- }
-
- if (container.fChildContainers.isEmpty()) {
+ breakpoints.add(breakpoint);
+ updateSelfAndAncestorsBreakpointCache(container.getParent(), breakpoints, false);
+ }
+
+ /**
+ * Remove all child elements including the given container itself.
+ *
+ * @param container the breakpoint container
+ * @param delta the parent delta
+ */
+ static public void removeAll(BreakpointContainer container, ModelDelta delta) {
+ BreakpointContainer parent = container.getParent();
+ if (parent != null) {
+ parent.fChildContainers.remove(container);
+ delta = delta.addNode(container, IModelDelta.UNINSTALL|IModelDelta.REMOVED);
+ }
+
+ if (container.fChildContainers.isEmpty()) {
List<IBreakpoint> breakpoints = new ArrayList<>();
Iterator<IBreakpoint> iterator = container.fBreakpoints.iterator();
- while (iterator.hasNext()) {
+ while (iterator.hasNext()) {
IBreakpoint obj = iterator.next();
breakpoints.add(obj);
delta.addNode(obj, IModelDelta.UNINSTALL|IModelDelta.REMOVED);
iterator.remove();
- }
+ }
- // remove the breakpoints from the parent containers.
+ // remove the breakpoints from the parent containers.
updateSelfAndAncestorsBreakpointCache(container.getParent(), breakpoints, false);
- return;
- }
+ return;
+ }
Iterator<BreakpointContainer> iterator = container.fChildContainers.iterator();
- while (iterator.hasNext()) {
- BreakpointContainer childContainer = iterator.next();
- ModelDelta childDelta = delta.addNode(childContainer, IModelDelta.REMOVED|IModelDelta.UNINSTALL);
- iterator.remove();
- removeAll(childContainer, childDelta);
- }
- }
-
- /**
- * Returns whether this is the default container.
- *
- * @return true if it is a default container
- */
- boolean isDefaultContainer() {
- return fDefaultContainer;
- }
-
- /**
- * Returns the breakpoints in this container
- *
- * @return the breakpoints in this container
- */
- @Override
+ while (iterator.hasNext()) {
+ BreakpointContainer childContainer = iterator.next();
+ ModelDelta childDelta = delta.addNode(childContainer, IModelDelta.REMOVED|IModelDelta.UNINSTALL);
+ iterator.remove();
+ removeAll(childContainer, childDelta);
+ }
+ }
+
+ /**
+ * Returns whether this is the default container.
+ *
+ * @return true if it is a default container
+ */
+ boolean isDefaultContainer() {
+ return fDefaultContainer;
+ }
+
+ /**
+ * Returns the breakpoints in this container
+ *
+ * @return the breakpoints in this container
+ */
+ @Override
public IBreakpoint[] getBreakpoints() {
- return fBreakpoints.toArray(new IBreakpoint[fBreakpoints.size()]);
- }
-
- /**
- * Returns this container's category.
- *
- * @return container category
- */
- @Override
+ return fBreakpoints.toArray(new IBreakpoint[fBreakpoints.size()]);
+ }
+
+ /**
+ * Returns this container's category.
+ *
+ * @return container category
+ */
+ @Override
public IAdaptable getCategory() {
- return fCategory;
- }
-
- /**
- * Returns children as breakpoints or nested containers.
- *
- * @return children as breakpoints or nested containers
- */
- public Object[] getChildren() {
- if (fChildContainers.isEmpty()) {
- return getBreakpoints();
- }
- return getContainers();
- }
-
- /**
- * Returns the index of the given child element (breakpoint or container.
- *
- * @param child Child to calculate index of.
- * @return index of child
- */
- public int getChildIndex(Object child) {
- if (fChildContainers.isEmpty()) {
- return fBreakpoints.indexOf(child);
- }
- return fChildContainers.indexOf(child);
- }
-
- /**
- * Returns the containers nested in this container, possibly empty.
- *
- * @return the containers nested in this container, can be empty.
- */
- public BreakpointContainer[] getContainers() {
- return fChildContainers.toArray(new BreakpointContainer[fChildContainers.size()]);
- }
-
- /**
- * Returns this container's organizer.
- *
- * @return this container's organizer
- */
- @Override
+ return fCategory;
+ }
+
+ /**
+ * Returns children as breakpoints or nested containers.
+ *
+ * @return children as breakpoints or nested containers
+ */
+ public Object[] getChildren() {
+ if (fChildContainers.isEmpty()) {
+ return getBreakpoints();
+ }
+ return getContainers();
+ }
+
+ /**
+ * Returns the index of the given child element (breakpoint or container.
+ *
+ * @param child Child to calculate index of.
+ * @return index of child
+ */
+ public int getChildIndex(Object child) {
+ if (fChildContainers.isEmpty()) {
+ return fBreakpoints.indexOf(child);
+ }
+ return fChildContainers.indexOf(child);
+ }
+
+ /**
+ * Returns the containers nested in this container, possibly empty.
+ *
+ * @return the containers nested in this container, can be empty.
+ */
+ public BreakpointContainer[] getContainers() {
+ return fChildContainers.toArray(new BreakpointContainer[fChildContainers.size()]);
+ }
+
+ /**
+ * Returns this container's organizer.
+ *
+ * @return this container's organizer
+ */
+ @Override
public IBreakpointOrganizer getOrganizer() {
- return fOrganizer;
- }
-
- /**
- * Returns whether this container contains the given breakpoint.
- *
- * @param breakpoint the breakpoint to check
- * @return true if this container contains the given breakpoint
- */
- @Override
+ return fOrganizer;
+ }
+
+ /**
+ * Returns whether this container contains the given breakpoint.
+ *
+ * @param breakpoint the breakpoint to check
+ * @return true if this container contains the given breakpoint
+ */
+ @Override
public boolean contains(IBreakpoint breakpoint) {
- return fBreakpoints.contains(breakpoint);
- }
-
- /**
- * Returns the child containers for the given breakpoint.
- *
- * @param breakpoint the breakpoint to get containers for
- * @return child containers
- */
- public BreakpointContainer[] getContainers(IBreakpoint breakpoint) {
- if (contains(breakpoint)) {
- BreakpointContainer[] containers = getContainers();
- if (containers.length == 0) {
- return new BreakpointContainer[]{this};
- }
+ return fBreakpoints.contains(breakpoint);
+ }
+
+ /**
+ * Returns the child containers for the given breakpoint.
+ *
+ * @param breakpoint the breakpoint to get containers for
+ * @return child containers
+ */
+ public BreakpointContainer[] getContainers(IBreakpoint breakpoint) {
+ if (contains(breakpoint)) {
+ BreakpointContainer[] containers = getContainers();
+ if (containers.length == 0) {
+ return new BreakpointContainer[]{this};
+ }
ArrayList<BreakpointContainer> list = new ArrayList<>();
- for (int i = 0; i < containers.length; i++) {
- BreakpointContainer container = containers[i];
- BreakpointContainer[] subcontainers = container.getContainers(breakpoint);
- if (subcontainers != null) {
- for (int j = 0; j < subcontainers.length; j++) {
- list.add(subcontainers[j]);
- }
- }
- }
- return list.toArray(new BreakpointContainer[list.size()]);
- }
- return new BreakpointContainer[0];
- }
+ for (int i = 0; i < containers.length; i++) {
+ BreakpointContainer container = containers[i];
+ BreakpointContainer[] subcontainers = container.getContainers(breakpoint);
+ if (subcontainers != null) {
+ for (int j = 0; j < subcontainers.length; j++) {
+ list.add(subcontainers[j]);
+ }
+ }
+ }
+ return list.toArray(new BreakpointContainer[list.size()]);
+ }
+ return new BreakpointContainer[0];
+ }
@Override
public boolean equals(Object obj) {
- if (obj instanceof BreakpointContainer) {
- BreakpointContainer container = (BreakpointContainer) obj;
- // With Group by "Advanced" the same category can contain a different subset of breakpoints,
- // therefore to have the same category is not enough to be equal.
- if (! (fParent != null && container.fParent != null && fParent.equals(container.fParent) ||
- fParent == null && container.fParent == null) ) {
- return false;
- }
- if (getCategory() != null && container.getCategory() != null) {
- return getCategory().equals(container.getCategory());
- } else {
- return true;
- }
- }
- return super.equals(obj);
+ if (obj instanceof BreakpointContainer) {
+ BreakpointContainer container = (BreakpointContainer) obj;
+ // With Group by "Advanced" the same category can contain a different subset of breakpoints,
+ // therefore to have the same category is not enough to be equal.
+ if (! (fParent != null && container.fParent != null && fParent.equals(container.fParent) ||
+ fParent == null && container.fParent == null) ) {
+ return false;
+ }
+ if (getCategory() != null && container.getCategory() != null) {
+ return getCategory().equals(container.getCategory());
+ } else {
+ return true;
+ }
+ }
+ return super.equals(obj);
}
@Override

Back to the top