From a973dae537453b16d7046c86cf111d8bff102515 Mon Sep 17 00:00:00 2001
From: toshihiro <toshihiro>
Date: Mon, 11 Jun 2007 08:06:04 +0000
Subject: [PATCH] Fixed: could not access linked resources

---
 .../phpdt/internal/corext/phpdoc/PHPDocUtil.java   |   38 +++++++++++++++----
 1 files changed, 30 insertions(+), 8 deletions(-)

diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/phpdoc/PHPDocUtil.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/phpdoc/PHPDocUtil.java
index 9b30f8b..5bf73a7 100644
--- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/phpdoc/PHPDocUtil.java
+++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/phpdoc/PHPDocUtil.java
@@ -1,8 +1,10 @@
 package net.sourceforge.phpdt.internal.corext.phpdoc;
 
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
 
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 import net.sourceforge.phpeclipse.builder.PHPIdentifierLocation;
@@ -33,9 +35,9 @@ public class PHPDocUtil {
 
 			// read the phpdoc for the function
 			if (location.getPHPDocOffset() >= 0) {
-				String encoding = getEncoding(filename);
-				InputStreamReader phpFileReader = new InputStreamReader(
-						new FileInputStream(filename), encoding);
+				InputStreamReader phpFileReader = createReader(filename);
+				if (phpFileReader == null)
+					return;
 				char[] phpDocDeclarationCharArray = new char[location
 						.getPHPDocLength()];
 				phpFileReader.skip(location.getPHPDocOffset());
@@ -76,9 +78,9 @@ public class PHPDocUtil {
 		usage = "";
 		try {
 
-			String encoding = getEncoding(filename);
-			InputStreamReader phpFileReader = new InputStreamReader(
-					new FileInputStream(filename), encoding);
+			InputStreamReader phpFileReader = createReader(filename);
+			if (phpFileReader == null)
+				return "";
 			// read the function declaration
 			if (location.getOffset() >= 0
 					&& (location.isMethod() || location.isConstructor()
@@ -103,13 +105,33 @@ public class PHPDocUtil {
 					}
 				}
 				usage = new String(functionDeclarationCharArray, 0, length);
+				// cache the usage string:
+				location.setUsage(usage);
 			}
 			phpFileReader.close();
+
 		} catch (IOException e) {
 			// do nothing
 		}
-		// cache the usage string:
-		location.setUsage(usage);
 		return usage;
 	}
+
+	private static InputStreamReader createReader(String filename) {
+		IFile file = PHPeclipsePlugin.getWorkspace().getRoot()
+				.getFileForLocation(new Path(filename));
+		if (file != null) {
+			try {
+				return new InputStreamReader(new FileInputStream(file
+						.getLocation().toString()), file.getCharset());
+			} catch (UnsupportedEncodingException e) {
+				// do nothing
+			} catch (FileNotFoundException e) {
+				// do nothing
+			} catch (CoreException e) {
+				// do nothing
+			}
+		}
+		return null;
+	}
+
 }
-- 
1.7.1