[298475] ClassCastException occurs when try to open a session bean from the DD tree
diff --git a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/OpenJEEResourceAction.java b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/OpenJEEResourceAction.java
index f1d0274..4761f96 100644
--- a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/OpenJEEResourceAction.java
+++ b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/OpenJEEResourceAction.java
@@ -27,6 +27,7 @@
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jst.j2ee.commonarchivecore.internal.ModuleFile;
import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions;
@@ -109,21 +110,32 @@
protected void openAppropriateEditor(String c) {
if(getStructuredSelection() instanceof TreeSelection){
- IProject project = (IProject) (((TreeSelection)getStructuredSelection()).getPaths()[0]).getSegment(0);
- IType findType;
- try {
- findType = JavaCore.create(project).findType(c);
- if(findType == null){
- return;
+ TreePath path = ((TreeSelection) getStructuredSelection()).getPaths()[0];
+ IProject project = null;
+
+ while (path != null) {
+ Object segment = path.getLastSegment();
+ if (segment instanceof IProject) {
+ project = (IProject) segment;
+ break;
}
- openAppropriateEditor(findType.getResource());
- } catch (JavaModelException e) {
- JEEUIPlugin.logError("Error during open editor", e); //$NON-NLS-1$
+ path = path.getParentPath();
}
+ if (project != null) {
+ try {
+ IType findType = JavaCore.create(project).findType(c);
+ if(findType == null){
+ return;
+ }
+ openAppropriateEditor(findType.getResource());
+ } catch (JavaModelException e) {
+ JEEUIPlugin.logError("Error during open editor", e); //$NON-NLS-1$
+ }
+ }
}
-
}
+
protected void openAppropriateEditor(IVirtualComponent c) {
if (c == null) {
return;
@@ -231,6 +243,8 @@
}
IResource resource = WorkbenchResourceHelper.getFile((EObject)srcObject);
+ if (resource == null)
+ return;
IProject project = resource.getProject();
IJavaProject javaProject = JavaCore.create(project);
if(javaProject.exists()){