if (DEBUG) System.err.println("synch cache: " + fgSizeHint); }
	public static TypeInfo[] getAllTypes(IProgressMonitor monitor) throws JavaModelException {				synchronized(fgLock) {						if (fgTypeCache == null) {				// cache is empty								if (fgTypeCacherThread == null) {					// cache synchroneously					fgTypeCache= doSynchSearchTypes(monitor, fgSizeHint);					if (fgTypeCache != null) {						fgSizeHint= fgTypeCache.length;						if (DEBUG) System.err.println("synch cache: " + fgSizeHint); //$NON-NLS-1$					}				} else {					// wait for the thread to finished					if (fgTypeCacherThread != null) {						try {							while (fgTypeCache == null)								fgLock.wait();						} catch (InterruptedException e) {							JavaPlugin.log(e);						}					}				}				Assert.isNotNull(fgTypeCache);			}						if (monitor != null)				monitor.done();						return fgTypeCache;		}	}