delegate type hierarchy creation for SourceTypes, introduce type hierarchy mode
diff --git a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/core/ITypeHierarchy.java b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/core/ITypeHierarchy.java
index 8482ed8..06aeea9 100644
--- a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/core/ITypeHierarchy.java
+++ b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/core/ITypeHierarchy.java
@@ -43,6 +43,10 @@
* </p>
*/
public interface ITypeHierarchy {
+ public static enum Mode {
+ HIERARCHY, SUPERTYPE
+ }
+
/**
* Adds the given listener for changes to this type hierarchy. Listeners are
* notified when this type hierarchy changes and needs to be refreshed. Has
diff --git a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/core/ITypeHierarchyBuilder.java b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/core/ITypeHierarchyBuilder.java
index b8dce55..8ecb2fc 100644
--- a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/core/ITypeHierarchyBuilder.java
+++ b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/core/ITypeHierarchyBuilder.java
@@ -15,6 +15,7 @@
public interface ITypeHierarchyBuilder {
- ITypeHierarchy build(IType type, IProgressMonitor monitor);
+ ITypeHierarchy build(IType type, ITypeHierarchy.Mode mode,
+ IProgressMonitor monitor);
}
diff --git a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/SourceType.java b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/SourceType.java
index 68f8719..44cb5f1 100644
--- a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/SourceType.java
+++ b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/SourceType.java
@@ -33,6 +33,7 @@
import org.eclipse.dltk.core.search.IDLTKSearchScope;
import org.eclipse.dltk.core.search.SearchEngine;
import org.eclipse.dltk.internal.core.hierarchy.TypeHierarchy;
+import org.eclipse.dltk.internal.core.hierarchy.TypeHierarchyBuilders;
import org.eclipse.dltk.internal.core.util.MementoTokenizer;
import org.eclipse.dltk.internal.core.util.Messages;
import org.eclipse.dltk.utils.CorePrinter;
@@ -388,6 +389,11 @@
*/
public ITypeHierarchy newSupertypeHierarchy(WorkingCopyOwner owner,
IProgressMonitor monitor) throws ModelException {
+ final ITypeHierarchy hierarchy = TypeHierarchyBuilders
+ .getTypeHierarchy(this, ITypeHierarchy.Mode.SUPERTYPE, monitor);
+ if (hierarchy != null) {
+ return hierarchy;
+ }
ISourceModule[] workingCopies = ModelManager.getModelManager()
.getWorkingCopies(owner, true/* add primary working copies */);
@@ -468,6 +474,11 @@
*/
public ITypeHierarchy newTypeHierarchy(IProgressMonitor monitor)
throws ModelException {
+ final ITypeHierarchy hierarchy = TypeHierarchyBuilders
+ .getTypeHierarchy(this, ITypeHierarchy.Mode.HIERARCHY, monitor);
+ if (hierarchy != null) {
+ return hierarchy;
+ }
CreateTypeHierarchyOperation op;
op = new CreateTypeHierarchyOperation(this, null,
createReferencingProjectsScope(), true);
diff --git a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/hierarchy/TypeHierarchyBuilders.java b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/hierarchy/TypeHierarchyBuilders.java
index bb14a45..43abb65 100644
--- a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/hierarchy/TypeHierarchyBuilders.java
+++ b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/hierarchy/TypeHierarchyBuilders.java
@@ -38,7 +38,7 @@
}
public static ITypeHierarchy getTypeHierarchy(IType type,
- IProgressMonitor monitor) {
+ ITypeHierarchy.Mode mode, IProgressMonitor monitor) {
final IDLTKLanguageToolkit toolkit = DLTKLanguageManager
.getLanguageToolkit(type);
if (toolkit != null) {
@@ -46,7 +46,7 @@
toolkit.getNatureId());
if (builders != null) {
for (ITypeHierarchyBuilder builder : builders) {
- final ITypeHierarchy hierarchy = builder.build(type,
+ final ITypeHierarchy hierarchy = builder.build(type, mode,
monitor);
if (hierarchy != null) {
return hierarchy;