Bug 95335 - Source Lookup Halts With Missing Archive
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/AbstractSourceLookupParticipant.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/AbstractSourceLookupParticipant.java
index 3c90619..9f28888 100644
--- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/AbstractSourceLookupParticipant.java
+++ b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/AbstractSourceLookupParticipant.java
@@ -14,6 +14,10 @@
import java.util.List;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages;
/**
@@ -48,6 +52,8 @@
*/
public Object[] findSourceElements(Object object) throws CoreException {
List results = null;
+ CoreException single = null;
+ MultiStatus multiStatus = null;
if (isFindDuplicates()) {
results = new ArrayList();
}
@@ -55,25 +61,41 @@
if (name != null) {
ISourceContainer[] containers = getSourceContainers();
for (int i = 0; i < containers.length; i++) {
- ISourceContainer container = getDelegateContainer(containers[i]);
- if (container != null) {
- Object[] objects = container.findSourceElements(name);
- if (objects.length > 0) {
- if (isFindDuplicates()) {
- for (int j = 0; j < objects.length; j++) {
- results.add(objects[j]);
+ try {
+ ISourceContainer container = getDelegateContainer(containers[i]);
+ if (container != null) {
+ Object[] objects = container.findSourceElements(name);
+ if (objects.length > 0) {
+ if (isFindDuplicates()) {
+ for (int j = 0; j < objects.length; j++) {
+ results.add(objects[j]);
+ }
+ } else {
+ if (objects.length == 1) {
+ return objects;
+ }
+ return new Object[]{objects[0]};
}
- } else {
- if (objects.length == 1) {
- return objects;
- }
- return new Object[]{objects[0]};
}
}
+ } catch (CoreException e) {
+ if (single == null) {
+ single = e;
+ } else if (multiStatus == null) {
+ multiStatus = new MultiStatus(DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, new IStatus[]{single.getStatus()}, SourceLookupMessages.CompositeSourceContainer_0, null); //$NON-NLS-1$
+ multiStatus.add(e.getStatus());
+ } else {
+ multiStatus.add(e.getStatus());
+ }
}
}
}
if (results == null) {
+ if (multiStatus != null) {
+ throw new CoreException(multiStatus);
+ } else if (single != null) {
+ throw single;
+ }
return EMPTY;
}
return results.toArray();