merged from HEAD
diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/actions/SelectionConverter.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/actions/SelectionConverter.java
index ed787f5..efc37f0 100644
--- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/actions/SelectionConverter.java
+++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/actions/SelectionConverter.java
@@ -25,6 +25,7 @@
 import org.eclipse.dltk.ui.ModelElementLabelProvider;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.text.TextSelection;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -78,7 +79,7 @@
 		if (!selection.isEmpty()) {
 			IModelElement[] result = new IModelElement[selection.size()];
 			int i = 0;
-			for (Iterator iter = selection.iterator(); iter.hasNext(); i++) {
+			for (Iterator<?> iter = selection.iterator(); iter.hasNext(); i++) {
 				Object element = iter.next();
 				if (!(element instanceof IModelElement))
 					return EMPTY_RESULT;
@@ -99,8 +100,7 @@
 	public static IModelElement[] codeResolveOrInputForked(IEditorPart editor)
 			throws InvocationTargetException, InterruptedException {
 		IModelElement input = getInput(editor);
-		ITextSelection selection = (ITextSelection) ((ITextEditor) editor)
-				.getSelectionProvider().getSelection();
+		ITextSelection selection = getTextSelection(editor);
 		IModelElement[] result = performForkedCodeResolve(input, selection);
 		if (result.length == 0) {
 			result = new IModelElement[] { input };
@@ -122,8 +122,7 @@
 	public static IModelElement[] codeResolve(IEditorPart editor,
 			boolean primaryOnly) throws ModelException {
 		return codeResolve(getInput(editor, primaryOnly),
-				(ITextSelection) ((ITextEditor) editor).getSelectionProvider()
-						.getSelection());
+				getTextSelection(editor));
 	}
 
 	/**
@@ -140,8 +139,7 @@
 			boolean primaryOnly) throws InvocationTargetException,
 			InterruptedException {
 		return performForkedCodeResolve(getInput(editor, primaryOnly),
-				(ITextSelection) ((ITextEditor) editor).getSelectionProvider()
-						.getSelection());
+				getTextSelection(editor));
 	}
 
 	public static IModelElement getElementAtOffset(IEditorPart editor)
@@ -158,8 +156,16 @@
 	private static IModelElement getElementAtOffset(IEditorPart editor,
 			boolean primaryOnly) throws ModelException {
 		return getElementAtOffset(getInput(editor, primaryOnly),
-				(ITextSelection) ((ITextEditor) editor).getSelectionProvider()
-						.getSelection());
+				getTextSelection(editor));
+	}
+
+	private static ITextSelection getTextSelection(IEditorPart editor) {
+		if (editor instanceof ITextEditor) {
+			return (ITextSelection) ((ITextEditor) editor)
+					.getSelectionProvider().getSelection();
+		} else {
+			return TextSelection.emptySelection();
+		}
 	}
 
 	public static IModelElement getInput(IEditorPart editor) {