public CompilationUnit getAST(IJavaElement je, boolean wait, IProgressMonitor progressMonitor) {
public CompilationUnit getAST(IJavaElement je, WAIT_FLAG waitFlag, IProgressMonitor progressMonitor) {
	public CompilationUnit getAST(IJavaElement je, boolean wait, IProgressMonitor progressMonitor) {		Assert.isTrue(je != null && (je.getElementType() == IJavaElement.CLASS_FILE || je.getElementType() == IJavaElement.COMPILATION_UNIT));				if (progressMonitor != null && progressMonitor.isCanceled())			return null;				synchronized (this) {			if (je.equals(fActiveJavaElement)) {				if (fAST != null || !wait)					return fAST;			}		}		if (isReconciling(je)) {			try {				final IJavaElement activeElement= fReconcilingJavaElement;								// Wait for AST				synchronized (fWaitLock) {					if (DEBUG)						System.out.println(DEBUG_PREFIX + "waiting for AST for: " + je.getElementName()); //$NON-NLS-1$										fWaitLock.wait();				}								// Check whether active element is still valid				synchronized (this) {					if (activeElement == fActiveJavaElement) {						if (DEBUG)							System.out.println(DEBUG_PREFIX + "...got AST for: " + je.getElementName()); //$NON-NLS-1$												return fAST;					}				}				return getAST(je, wait, progressMonitor);			} catch (InterruptedException e) {			}		} else if (!wait)			return null;				CompilationUnit ast= createAST(je, progressMonitor);		if (progressMonitor != null && progressMonitor.isCanceled())			return null;				if (DEBUG)			System.out.println(DEBUG_PREFIX + "created AST for: " + je.getElementName()); //$NON-NLS-1$		if (ast != null && je.equals(fActiveJavaElement))			cache(ast, je);				return ast;	}