Startup_R32x - bug 179699
diff --git a/org.eclipse.jdt.core/buildnotes_jdt-core.html b/org.eclipse.jdt.core/buildnotes_jdt-core.html
index 9df369b..1c52890 100644
--- a/org.eclipse.jdt.core/buildnotes_jdt-core.html
+++ b/org.eclipse.jdt.core/buildnotes_jdt-core.html
@@ -45,7 +45,9 @@
 <br>Project org.eclipse.jdt.core v_688_Startup_R32x
 (<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_688_Startup_R32x">cvs</a>).
 <h2>What's new in this drop</h2>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171653">171653</a>
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=179699">179699</a>
+type.newTypeHierarchy doesn't cancel
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171653">171653</a>
 [index] Java Tooling initialization performance issue after startup
 
 <h3>Problem Reports Fixed</h3>
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/IndexBasedHierarchyBuilder.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/IndexBasedHierarchyBuilder.java
index 4550707..0009fc2 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/IndexBasedHierarchyBuilder.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/IndexBasedHierarchyBuilder.java
@@ -16,6 +16,7 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.jdt.core.*;
 import org.eclipse.jdt.core.compiler.CharOperation;
@@ -423,7 +424,7 @@
 	final Map binariesFromIndexMatches,
 	final IPathRequestor pathRequestor,
 	int waitingPolicy,	// WaitUntilReadyToSearch | ForceImmediateSearch | CancelIfNotReadyToSearch
-	IProgressMonitor progressMonitor) {
+	final IProgressMonitor progressMonitor) {
 
 	/* embed constructs inside arrays so as to pass them to (inner) collector */
 	final Queue queue = new Queue();
@@ -498,7 +499,16 @@
 
 			// search all index references to a given supertype
 			pattern.superSimpleName = currentTypeName;
-			indexManager.performConcurrentJob(job, waitingPolicy, null); // no sub progress monitor since its too costly for deep hierarchies
+			indexManager.performConcurrentJob(job, waitingPolicy, progressMonitor == null ? null : new NullProgressMonitor() { 
+				// don't report progress since this is too costly for deep hierarchies
+				// just handle isCanceled() (seehttps://bugs.eclipse.org/bugs/show_bug.cgi?id=179511)
+				public void setCanceled(boolean value) {
+					progressMonitor.setCanceled(value);
+				}
+				public boolean isCanceled() {
+					return progressMonitor.isCanceled();
+				}
+			});
 			if (progressMonitor != null && ++ticks <= MAXTICKS)
 				progressMonitor.worked(1);