From 2edb4b19bbbc016cc35bf67f7331ce1ad4262c26 Mon Sep 17 00:00:00 2001
From: Andrew Gvozdev <angvoz.dev@gmail.com>
Date: Mon, 23 Aug 2010 16:25:21 +0000
Subject: [PATCH] bug 323402: Open external location in Problems View throws
 exception when file is not there

---
 .../ui/util/OpenExternalProblemAction.java       | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/OpenExternalProblemAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/OpenExternalProblemAction.java
index 21fdad4510e..f69ae0a7560 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/OpenExternalProblemAction.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/OpenExternalProblemAction.java
@@ -12,6 +12,8 @@
 
 package org.eclipse.cdt.internal.ui.util;
 
+import java.io.File;
+
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
@@ -20,7 +22,10 @@ import org.eclipse.core.runtime.Path;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.MessageBox;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IObjectActionDelegate;
 import org.eclipse.ui.IWorkbenchPart;
@@ -54,7 +59,16 @@ public class OpenExternalProblemAction extends ActionDelegate implements IObject
 				if (attributeObject instanceof String)  {
 					String externalLocation = (String) attributeObject;
 					IPath externalPath = new Path(externalLocation);
-
+					
+					File file = externalPath.toFile() ;
+					if (!file.canRead()) {
+						MessageBox errorMsg = new MessageBox(CUIPlugin.getActiveWorkbenchShell(), SWT.ICON_ERROR | SWT.OK);
+						errorMsg.setText(Messages.OpenExternalProblemAction_ErrorOpeningFile);
+						errorMsg.setMessage(NLS.bind(Messages.OpenExternalProblemAction_CannotReadExternalLocation, externalPath));
+						errorMsg.open();
+						return;
+					}
+					
 					IEditorPart editor = EditorUtility.openInEditor(externalPath, getCProject(marker));
 					if (editor != null) {
 						IDE.gotoMarker(editor, marker);