Committing more fixes for bug #1839622 RSE Path error. This will clean up php files...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / ui / util / PHPFileUtil.java
index 172078e..5f9facc 100644 (file)
@@ -10,6 +10,7 @@ import java.util.List;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 import net.sourceforge.phpeclipse.ui.overlaypages.ProjectPrefUtil;
 
+import org.eclipse.core.filebuffers.FileBuffers;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
@@ -26,9 +27,8 @@ public class PHPFileUtil {
        public final static String[] SMARTY_EXTENSIONS = { "tpl" };
 
        public static boolean isPHPFile(IFile file) {
-               // String extension = file.getFileExtension();
-               return isPHPFileName(file.getLocation().toString());
-       }
+                return isPHPFileName(file.getFullPath().toString());
+        }
 
        // public final static String getFileExtension(String name) {
        // int index = name.lastIndexOf('.');
@@ -45,7 +45,8 @@ public class PHPFileUtil {
         */
        public final static boolean isPHPFileName(String name) {
 
-               // avoid handling a file without base name, e.g. ".php", which is a valid
+               // avoid handling a file without base name, e.g. ".php", which is a
+               // valid
                // Eclipse resource name
                File file = new File(name);
                if (file.getName().startsWith(".")) {
@@ -78,8 +79,8 @@ public class PHPFileUtil {
        }
 
        /**
-        * Returns true iff the file extension is a valid PHP Unit name implementation
-        * is not creating extra strings.
+        * Returns true iff the file extension is a valid PHP Unit name
+        * implementation is not creating extra strings.
         */
        public final static boolean isValidPHPUnitName(String filename) {
                return PHPFileUtil.isPHPFileName(filename);
@@ -93,7 +94,8 @@ public class PHPFileUtil {
        // ArrayList list = new ArrayList();
        // final IPreferenceStore store =
        // PHPeclipsePlugin.getDefault().getPreferenceStore();
-       // String extensions = store.getString(PHPeclipsePlugin.PHP_EXTENSION_PREFS);
+       // String extensions =
+       // store.getString(PHPeclipsePlugin.PHP_EXTENSION_PREFS);
        // extensions = extensions.trim();
        // if (extensions.length() != 0) {
        // StringTokenizer tokenizer = new StringTokenizer(extensions, " ,;:/-|");
@@ -116,18 +118,18 @@ public class PHPFileUtil {
        // }
        /**
         * @param php_extensions
-        *          The PHP extensions to set.
+        *            The PHP extensions to set.
         */
        // public static void setExtensions(String[] php_extensions) {
        // PHP_EXTENSIONS = php_extensions;
        // }
        /**
         * Creata the file for the given absolute file path
-        *
+        * 
         * @param absoluteFilePath
         * @param project
-        * @return the file for the given absolute file path or <code>null</code> if
-        *         no existing file can be found
+        * @return the file for the given absolute file path or <code>null</code>
+        *         if no existing file can be found
         */
        public static IFile createFile(IPath absoluteFilePath, IProject project) {
                if (absoluteFilePath == null || project == null) {
@@ -135,56 +137,54 @@ public class PHPFileUtil {
                }
 
                String projectPath = project.getLocation().toString();
-               String filePath = absoluteFilePath.toString().substring(projectPath.length() + 1);
+               String filePath = absoluteFilePath.toString().substring(
+                               projectPath.length() + 1);
                return project.getFile(filePath);
 
        }
 
        /**
         * Determine the path of an include name string
-        *
+        * 
         * @param includeNameString
         * @param resource
         * @param project
         * @return the path for the given include filename or <code>null</code> if
         *         no existing file can be found
         */
-       public static IPath determineFilePath(String includeNameString, IResource resource, IProject project) {
+       public static IPath determineFilePath(String includeNameString,
+                       IResource resource, IProject project) {
                IPath documentRootPath = ProjectPrefUtil.getDocumentRoot(project);
                IPath resourcePath = resource.getProjectRelativePath();
 
-               File file = null;
                IPath path = null;
-               path = documentRootPath.append(includeNameString);
-               file = path.toFile();
-               if (file.exists()) {
+               
+               // script location based
+               path = project.getFullPath().append(resourcePath.removeLastSegments(1))
+                               .append(includeNameString);
+               //path = 
+               if (fileExists(path, false)) {
                        return path;
                }
-
-               if (includeNameString.startsWith("../")) {
-                       path = project.getLocation().append(resourcePath.removeLastSegments(1));
-                       path = path.append(includeNameString);
-                       file = path.toFile();
-                       if (file.exists()) {
-                               return path;
-                       }
+               // project root based
+               path = project.getFullPath().append(includeNameString);
+               if (fileExists(path, false)) {
+                       return path;
                }
-
-               // includeNameString contains no path separator
-               path = project.getLocation().append(resourcePath.removeLastSegments(1));
-               path = path.append(includeNameString);
-               file = path.toFile();
-               if (file.exists()) {
+               
+               // DocumentRoot (absolute path) based
+               path = documentRootPath.append(includeNameString);
+               if (fileExists(path, true)) {
                        return path;
                }
-               // }
 
+               // IncludePaths settings (absolute path) based
                List includePaths = ProjectPrefUtil.getIncludePaths(project);
                if (includePaths.size() > 0) {
                        for (int i = 0; i < includePaths.size(); i++) {
-                               path = new Path(includePaths.get(i).toString()).append(includeNameString);
-                               file = path.toFile();
-                               if (file.exists()) {
+                               path = new Path(includePaths.get(i).toString())
+                                               .append(includeNameString);
+                               if (fileExists(path, true)) {
                                        return path;
                                }
                        }
@@ -192,4 +192,20 @@ public class PHPFileUtil {
                return null;
        }
 
+       private static boolean fileExists(IPath path, boolean absolute) {
+               File file = path.toFile();
+               if (file.exists()) {
+                       return true;
+               }
+               if (!absolute) {
+                       IFile ifile = FileBuffers.getWorkspaceFileAtLocation(path);
+                       if (ifile != null) {
+                               file = ifile.getFullPath().toFile();
+                               if (file.exists()) {
+                                       return true;
+                               }
+                       }
+               }
+               return false;
+       }
 }
\ No newline at end of file