Bug 97214 [misc] Opening a generated *.class file throws IllegalStateException
3.1 RC1 Opening a generated *.class file throws IllegalStateException !ENTRY org.eclipse.jdt.ui 4 2 2005-05-30 12:38:04.976 !MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jdt.ui". !STACK 0 java.lang.IllegalStateException at org.eclipse.jdt.core.dom.ASTParser.internalCreateAST(ASTParser.java:752) at org.eclipse.jdt.core.dom.ASTParser.createAST(ASTParser.java:576) at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider$1.run(ASTProvider.java:577) at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1038) at org.eclipse.core.runtime.Platform.run(Platform.java:775) at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.createAST(ASTProvider.java:574) at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.getAST(ASTProvider.java:495) at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor$7.run(JavaEditor.java:3092) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:67)
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ASTProvider.java
public CompilationUnit getAST(IJavaElement je, WAIT_FLAG waitFlag, IProgressMonitor progressMonitor) {
		Assert.isTrue(je != null && (je.getElementType() == IJavaElement.CLASS_FILE || je.getElementType() == IJavaElement.COMPILATION_UNIT));
		if (progressMonitor != null && progressMonitor.isCanceled())
			return null;
		boolean isActiveElement;
		synchronized (this) {
			isActiveElement= je.equals(fActiveJavaElement);
			if (isActiveElement) {
				if (fAST != null) {
					if (DEBUG)
						System.out.println(getThreadName() + " - " + DEBUG_PREFIX + "returning cached AST:" + toString(fAST) + " for: " + je.getElementName()); 
					return fAST;
				}
				if (waitFlag == WAIT_NO) {
					if (DEBUG)
						System.out.println(getThreadName() + " - " + DEBUG_PREFIX + "returning null (WAIT_NO) for: " + je.getElementName()); 
					return null;
				}
			}
		}
		if (isActiveElement && isReconciling(je)) {
			try {
				final IJavaElement activeElement= fReconcilingJavaElement;
				
				synchronized (fWaitLock) {
					if (DEBUG)
						System.out.println(getThreadName() + " - " + DEBUG_PREFIX + "waiting for AST for: " + je.getElementName()); 
					fWaitLock.wait();
				}