Bug 50000 PostSelectionWithAST causes IllegalArgumentException
I20040113 Opening a class file from a JAR which has no source causes IAE. !ENTRY org.eclipse.core.runtime 4 2 Jan 14, 2004 17:43:55.905 !MESSAGE An internal error occurred during: "Java AST creation". !STACK 0 java.lang.IllegalArgumentException at org.eclipse.jdt.core.dom.AST.parseCompilationUnit(AST.java:528) at org.eclipse.jdt.core.dom.AST.parseCompilationUnit(AST.java:439) at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$PartListenerGroup.computeAST(SelectionListenerWithASTManager.java:122) at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$PartListenerGroup.calculateASTandInform(SelectionListenerWithASTManager.java:133) at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$1.run(SelectionListenerWithASTManager.java:93) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:62)
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/SelectionListenerWithASTManager.java
*/
		public void selectionChanged(IWorkbenchPart part, ISelection selection) {
			if (part instanceof IEditorPart && selection instanceof ITextSelection) { 
				PartListenerGroup listenerGroup= (PartListenerGroup) fPartListeners.get(part);
				if (listenerGroup != null) {
					listenerGroup.fireSelectionChanged((ITextSelection) selection);
				}
			}
		}		
	}
	
	private Map fListenerGroups;
	
	private SelectionListenerWithASTManager() {
		fListenerGroups= new HashMap();
	}
	
	/**
	 * Registers a selection listener for the given editor part. 
	 * @param part The editor part to listen to.
	 * @param listener The listener to register.
	 */
	public void addListener(IEditorPart part, ISelectionListenerWithAST listener) {
		ISelectionService service= part.getSite().getWorkbenchWindow().getSelectionService();
		WorkbenchWindowListener windowListener= (WorkbenchWindowListener) fListenerGroups.get(service);
		if (windowListener == null) {
			windowListener= new WorkbenchWindowListener(service);
			fListenerGroups.put(service, windowListener);
		}
		windowListener.install(part, listener);