SourceParserManager: don't force source parsers to extend AbstractSourceParser
diff --git a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/parser/SourceParserManager.java b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/parser/SourceParserManager.java
index 18e9b3f..5148361 100644
--- a/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/parser/SourceParserManager.java
+++ b/core/plugins/org.eclipse.dltk.core/ast/org/eclipse/dltk/ast/parser/SourceParserManager.java
@@ -11,7 +11,9 @@
 package org.eclipse.dltk.ast.parser;
 
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
 import org.eclipse.dltk.core.DLTKContributedExtension;
 import org.eclipse.dltk.core.DLTKContributionExtensionManager;
 import org.eclipse.dltk.core.DLTKCore;
@@ -87,8 +89,8 @@
 	
 	static class SourceParserContribution extends DLTKContributedExtension {		
 
-		private ISourceParserFactory factory;
-		private IConfigurationElement config;
+		private final ISourceParserFactory factory;
+		private final IConfigurationElement config;
 		
 		SourceParserContribution(ISourceParserFactory factory, IConfigurationElement config) {
 			this.factory = factory;
@@ -103,7 +105,7 @@
 		}
 
 		ISourceParser getSourceParser() {
-			ISourceParser parser = factory.createSourceParser();
+			final ISourceParser parser = factory.createSourceParser();
 			/*
 			 * another cheat - not all source parsers are thread safe, so
 			 * we need to create a new instance each time one is requested (hence
@@ -112,7 +114,14 @@
 			 * the parser instance should be initialized with all it's attribute
 			 * data
 			 */
-			((AbstractSourceParser) parser).setInitializationData(config, null, null);
+			if (parser instanceof IExecutableExtension) {
+				try {
+					((IExecutableExtension) parser).setInitializationData(
+							config, null, null);
+				} catch (CoreException e) {
+					DLTKCore.error(e);
+				}
+			}
 			
 			return parser;
 		}