Added patch for #1589521 "3 character function names invalid?"
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / actions / IncludesScanner.java
index 839d1e7..bb1c88f 100644 (file)
@@ -21,148 +21,167 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.ui.IFileEditorInput;
 
-
 public class IncludesScanner implements ITerminalSymbols {
-//  private final PHPOpenAllIncludesEditorAction fOpenAllIncludesAction;
-  private IProject fProject;
-  private IFileEditorInput fEditorInput;
-  HashSet fSet;
-  public IncludesScanner(IProject project, IFileEditorInput editorInput) {
-    fProject = project;
-//    fOpenAllIncludesAction = action;
-    fEditorInput = editorInput;
-    fSet = new HashSet();
-  }
-  /**
-   * Add the information for a given IFile resource
-   *  
-   */
-  public void addFile(IFile fileToParse) {
-
-    try {
-      if (fileToParse.exists()) {
-        addInputStream(new BufferedInputStream(fileToParse.getContents()), fileToParse.getFullPath().toString());
-      }
-    } catch (CoreException e1) {
-      e1.printStackTrace();
-    }
-  }
-
-  private void addInputStream(InputStream stream, String filePath) throws CoreException {
-    try {
-      if (fSet.add(filePath)) { // new entry in set
-        parseIdentifiers(Util.getInputStreamAsCharArray(stream, -1, null));
-      }
-    } catch (IOException e) {
-      e.printStackTrace();
-    } finally {
-      try {
-        if (stream != null) {
-          stream.close();
-        }
-      } catch (IOException e) {
-      }
-    }
-  }
-
-  /**
-   * Get the next token from input
-   */
-  private int getNextToken(Scanner scanner) {
-    int token;
-    try {
-      token = scanner.getNextToken();
-      if (Scanner.DEBUG) {
-        int currentEndPosition = scanner.getCurrentTokenEndPosition();
-        int currentStartPosition = scanner.getCurrentTokenStartPosition();
-        System.out.print(currentStartPosition + "," + currentEndPosition + ": ");
-        System.out.println(scanner.toStringAction(token));
-      }
-      return token;
-    } catch (InvalidInputException e) {
-    }
-    return TokenNameERROR;
-  }
-
-  private void parseIdentifiers(char[] charArray) {
-    char[] ident;
-    IFile file;
-    String identifier;
-    int counter = 0;
-
-    Scanner scanner = new Scanner(false, false, false, false, true, null, null);
-    scanner.setSource(charArray);
-    scanner.setPHPMode(false);
-    int token = getNextToken(scanner);
-    try {
-      while (token != TokenNameEOF) { // && fToken != TokenNameERROR) {
-        if (token == TokenNameinclude || token == TokenNameinclude_once || token == TokenNamerequire
-            || token == TokenNamerequire_once) {
-          while (token != TokenNameEOF && token != TokenNameERROR && token != TokenNameSEMICOLON && token != TokenNameRPAREN
-              && token != TokenNameLBRACE && token != TokenNameRBRACE) {
-            token = getNextToken(scanner);
-            if (token == TokenNameStringDoubleQuote || token == TokenNameStringSingleQuote) {
-              char[] includeName = scanner.getCurrentStringLiteralSource();
-              try {
-                file = getIncludeFile(new String(includeName));
-                addFile(file);
-              } catch (Exception e) {
-                // ignore
-              }
-              break;
-            }
-          }
-        }
-        token = getNextToken(scanner);
-      }
-    } catch (SyntaxError e) {
-     // e.printStackTrace();
-    }
-  }
-  
-  private IContainer getWorkingLocation(IFileEditorInput editorInput) {
-    if (editorInput == null || editorInput.getFile() == null) {
-      return null;
-    }
-    return editorInput.getFile().getParent();
-  }
-  public IFile getIncludeFile(String relativeFilename) {
-    IContainer container = getWorkingLocation(fEditorInput);
-    String fullPath = fProject.getLocation().toString();
-    IFile file = null;
-    if (relativeFilename.startsWith("../")) {
-      Path path = new Path(relativeFilename);
-      file = container.getFile(path);
-      return file;
-    }
-    int index = relativeFilename.lastIndexOf('/');
-
-    if (index >= 0) {
-      Path path = new Path(relativeFilename);
-      file = fProject.getFile(path);
-      if (file.exists()) {
-        return file;
-      }
-    }
-    Path path = new Path(relativeFilename);
-    file = container.getFile(path);
-
-    return file;
-  }
-  /**
-   * Returns a list of includes
-   * @return the determined list of includes 
-   */
-  public List getList() {
-    ArrayList list = new ArrayList();
-    list.addAll(fSet);
-    return list;
-  }
-
-  /**
-   * @return Returns the set.
-   */
-  public Set getSet() {
-    return fSet;
-  }
+       // private final PHPOpenAllIncludesEditorAction fOpenAllIncludesAction;
+       private IProject fProject;
+
+       private IFileEditorInput fEditorInput;
+
+       private HashSet fSet;
+
+       public IncludesScanner(IProject project, IFileEditorInput editorInput) {
+               fProject = project;
+               // fOpenAllIncludesAction = action;
+               fEditorInput = editorInput;
+               fSet = new HashSet();
+       }
+
+       /**
+        * Add the information for a given IFile resource
+        * 
+        */
+       public void addFile(IFile fileToParse) {
+
+               try {
+                       if (fileToParse.exists()) {
+                               addInputStream(new BufferedInputStream(fileToParse
+                                               .getContents()), fileToParse.getProjectRelativePath()
+                                               .toString());
+                       }
+               } catch (CoreException e1) {
+                       e1.printStackTrace();
+               }
+       }
+
+       private void addInputStream(InputStream stream, String filePath)
+                       throws CoreException {
+               try {
+                       if (fSet.add(filePath)) { // new entry in set
+                               parseIdentifiers(Util.getInputStreamAsCharArray(stream, -1,
+                                               null));
+                       }
+               } catch (IOException e) {
+                       e.printStackTrace();
+               } finally {
+                       try {
+                               if (stream != null) {
+                                       stream.close();
+                               }
+                       } catch (IOException e) {
+                       }
+               }
+       }
+
+       /**
+        * Get the next token from input
+        */
+       private int getNextToken(Scanner scanner) {
+               int token;
+               try {
+                       token = scanner.getNextToken();
+                       if (Scanner.DEBUG) {
+                               int currentEndPosition = scanner.getCurrentTokenEndPosition();
+                               int currentStartPosition = scanner
+                                               .getCurrentTokenStartPosition();
+                               System.out.print(currentStartPosition + ","
+                                               + currentEndPosition + ": ");
+                               System.out.println(scanner.toStringAction(token));
+                       }
+                       return token;
+               } catch (InvalidInputException e) {
+               }
+               return TokenNameERROR;
+       }
+
+       private void parseIdentifiers(char[] charArray) {
+               char[] ident;
+               IFile file;
+               String identifier;
+               int counter = 0;
+
+               Scanner scanner = new Scanner(false, false, false, false, true, null,
+                               null, true /* taskCaseSensitive */);
+               scanner.setSource(charArray);
+               scanner.setPHPMode(false);
+               int token = getNextToken(scanner);
+               try {
+                       while (token != TokenNameEOF) { // && fToken != TokenNameERROR) {
+                               if (token == TokenNameinclude || token == TokenNameinclude_once
+                                               || token == TokenNamerequire
+                                               || token == TokenNamerequire_once) {
+                                       while (token != TokenNameEOF && token != TokenNameERROR
+                                                       && token != TokenNameSEMICOLON
+                                                       && token != TokenNameRPAREN
+                                                       && token != TokenNameLBRACE
+                                                       && token != TokenNameRBRACE) {
+                                               token = getNextToken(scanner);
+                                               if (token == TokenNameStringDoubleQuote
+                                                               || token == TokenNameStringSingleQuote) {
+                                                       char[] includeName = scanner
+                                                                       .getCurrentStringLiteralSource();
+                                                       try {
+                                                               file = getIncludeFile(new String(includeName));
+                                                               addFile(file);
+                                                       } catch (Exception e) {
+                                                               // ignore
+                                                       }
+                                                       break;
+                                               }
+                                       }
+                               }
+                               token = getNextToken(scanner);
+                       }
+               } catch (SyntaxError e) {
+                       // e.printStackTrace();
+               }
+       }
+
+       private IContainer getWorkingLocation(IFileEditorInput editorInput) {
+               if (editorInput == null || editorInput.getFile() == null) {
+                       return null;
+               }
+               return editorInput.getFile().getParent();
+       }
+
+       public IFile getIncludeFile(String relativeFilename) {
+               IContainer container = getWorkingLocation(fEditorInput);
+               String fullPath = fProject.getLocation().toString();
+               IFile file = null;
+               if (relativeFilename.startsWith("../")) {
+                       Path path = new Path(relativeFilename);
+                       file = container.getFile(path);
+                       return file;
+               }
+               int index = relativeFilename.lastIndexOf('/');
+
+               if (index >= 0) {
+                       Path path = new Path(relativeFilename);
+                       file = fProject.getFile(path);
+                       if (file.exists()) {
+                               return file;
+                       }
+               }
+               Path path = new Path(relativeFilename);
+               file = container.getFile(path);
+
+               return file;
+       }
+
+       /**
+        * Returns a list of includes
+        * 
+        * @return the determined list of includes
+        */
+       public List getList() {
+               ArrayList list = new ArrayList();
+               list.addAll(fSet);
+               return list;
+       }
+
+       /**
+        * @return Returns the set.
+        */
+       public Set getSet() {
+               return fSet;
+       }
 }
\ No newline at end of file