*fix
diff --git a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/hierarchy/TypeHierarchy.java b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/hierarchy/TypeHierarchy.java
index 0fd377c..05e7f87 100644
--- a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/hierarchy/TypeHierarchy.java
+++ b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/hierarchy/TypeHierarchy.java
@@ -14,9 +14,11 @@
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
+import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
@@ -452,7 +454,7 @@
*/
private IType[] getAllSubtypesForType(IType type) {
ArrayList subTypes = new ArrayList();
- getAllSubtypesForType0(type, subTypes);
+ getAllSubtypesForType0(type, subTypes, new HashSet());
IType[] subClasses = new IType[subTypes.size()];
subTypes.toArray(subClasses);
return subClasses;
@@ -460,13 +462,17 @@
/**
*/
- private void getAllSubtypesForType0(IType type, ArrayList subs) {
+ private void getAllSubtypesForType0(IType type, ArrayList subs,
+ Set alreadyProcessed) {
IType[] subTypes = getSubtypesForType(type);
if (subTypes.length != 0) {
for (int i = 0; i < subTypes.length; i++) {
IType subType = subTypes[i];
- subs.add(subType);
- getAllSubtypesForType0(subType, subs);
+ if (!alreadyProcessed.contains(subType)) {
+ alreadyProcessed.add(subType);
+ subs.add(subType);
+ getAllSubtypesForType0(subType, subs, alreadyProcessed);
+ }
}
}
}
@@ -1399,11 +1405,10 @@
StringBuffer buffer = new StringBuffer();
buffer.append("Focus: "); //$NON-NLS-1$
buffer.append(this.focusType == null ? "<NONE>" //$NON-NLS-1$
- : ((ModelElement) this.focusType).toStringWithAncestors(false/*
- * don't
- * show
- * key
- */));
+ : ((ModelElement) this.focusType)
+ .toStringWithAncestors(false/*
+ * don't show key
+ */));
buffer.append("\n"); //$NON-NLS-1$
if (exists()) {
if (this.focusType != null) {