public void build(boolean computeSubtypes) { JavaModelManager manager = JavaModelManager.getJavaModelManager(); try { // optimize access to zip files while building hierarchy manager.cacheZipFiles(); if (this.hierarchy.focusType == null || computeSubtypes) { IProgressMonitor typeInRegionMonitor = this.hierarchy.progressMonitor == null ? null : new SubProgressMonitor(this.hierarchy.progressMonitor, 30); HashMap allOpenablesInRegion = determineOpenablesInRegion(typeInRegionMonitor); this.hierarchy.initialize(allOpenablesInRegion.size()); IProgressMonitor buildMonitor = this.hierarchy.progressMonitor == null ? null : new SubProgressMonitor(this.hierarchy.progressMonitor, 70); createTypeHierarchyBasedOnRegion(allOpenablesInRegion, buildMonitor); ((RegionBasedTypeHierarchy) this.hierarchy).pruneDeadBranches(); } else { this.hierarchy.initialize(1); this.buildSupertypes(); } } finally { manager.flushZipFiles(); } }