Fixed bug with unterminated strings at end of file
authoraxelcl <axelcl>
Thu, 5 May 2005 14:06:38 +0000 (14:06 +0000)
committeraxelcl <axelcl>
Thu, 5 May 2005 14:06:38 +0000 (14:06 +0000)
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/builder/IdentifierIndexManager.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartitionScanner.java

index 8e859cf..c36e53d 100644 (file)
@@ -111,21 +111,21 @@ public class IdentifierIndexManager {
     /**
      * Get the next token from input
      */
-    private void getNextToken() {
-      try {
-        fToken = fScanner.getNextToken();
-        if (Scanner.DEBUG) {
-          int currentEndPosition = fScanner.getCurrentTokenEndPosition();
-          int currentStartPosition = fScanner.getCurrentTokenStartPosition();
-          System.out.print(currentStartPosition + "," + currentEndPosition + ": ");
-          System.out.println(fScanner.toStringAction(fToken));
-        }
-        return;
-      } catch (InvalidInputException e) {
-        // ignore errors
-        //        e.printStackTrace();
+    private void getNextToken() throws InvalidInputException {
+      //      try {
+      fToken = fScanner.getNextToken();
+      if (Scanner.DEBUG) {
+        int currentEndPosition = fScanner.getCurrentTokenEndPosition();
+        int currentStartPosition = fScanner.getCurrentTokenStartPosition();
+        System.out.print(currentStartPosition + "," + currentEndPosition + ": ");
+        System.out.println(fScanner.toStringAction(fToken));
       }
-      fToken = TokenNameERROR;
+      return;
+      //      } catch (InvalidInputException e) {
+      //        // ignore errors
+      //        // e.printStackTrace();
+      //      }
+      //      fToken = TokenNameERROR;
     }
 
     private void parseDeclarations(char[] parent, StringBuffer buf, boolean goBack) {
@@ -268,6 +268,8 @@ public class IdentifierIndexManager {
             getNextToken();
           }
         }
+      } catch (InvalidInputException e) {
+        // ignore errors
       } catch (SyntaxError e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
@@ -284,8 +286,8 @@ public class IdentifierIndexManager {
       fScanner.setSource(charArray);
       fScanner.setPHPMode(false);
       fToken = TokenNameEOF;
-      getNextToken();
       try {
+        getNextToken();
         while (fToken != TokenNameEOF) { // && fToken != TokenNameERROR) {
           phpdocOffset = -1;
           hasModifiers = false;
@@ -377,6 +379,8 @@ public class IdentifierIndexManager {
             getNextToken();
           }
         }
+      } catch (InvalidInputException e) {
+        // ignore errors
       } catch (SyntaxError e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
@@ -490,20 +494,21 @@ public class IdentifierIndexManager {
     addIdentifiers(treeMap, file);
     return treeMap;
   }
+
   public TreeMap getIdentifiers(String startClazz) {
     TreeMap treeMap = new TreeMap(new StringComparator());
     addIdentifiers(treeMap, startClazz);
     return treeMap;
   }
-  
+
   public void addIdentifiers(TreeMap treeMap, IFile file) {
     String line = (String) fFileMap.get(file.getProjectRelativePath().toString());
     if (line != null) {
       PHPIdentifierLocation ident;
       ArrayList allClassNames = new ArrayList();
       addLine(treeMap, null, line, allClassNames);
-      int i=0;
-      while (i<allClassNames.size()) {
+      int i = 0;
+      while (i < allClassNames.size()) {
         String clazz = (String) allClassNames.get(i++);
         addClassName(treeMap, clazz, allClassNames);
       }
@@ -514,8 +519,8 @@ public class IdentifierIndexManager {
     PHPIdentifierLocation ident;
     ArrayList allClassNames = new ArrayList();
     addClassName(treeMap, startClazz, allClassNames);
-    int i=0;
-    while (i<allClassNames.size()) {
+    int i = 0;
+    while (i < allClassNames.size()) {
       String clazz = (String) allClassNames.get(i++);
       addClassName(treeMap, clazz, allClassNames);
     }
@@ -530,7 +535,7 @@ public class IdentifierIndexManager {
     String line;
     PHPIdentifierLocation ident;
     List list = getLocations(clazz);
-    if (list==null) {
+    if (list == null) {
       return false;
     }
     boolean result = false;
index 8d0de49..69bc1d5 100644 (file)
@@ -8,7 +8,7 @@
  Contributors:
  Igor Malinin - initial contribution
 
- $Id: PHPPartitionScanner.java,v 1.25 2004-09-02 18:32:34 jsurfer Exp $
+ $Id: PHPPartitionScanner.java,v 1.26 2005-05-05 14:06:38 axelcl Exp $
  **********************************************************************/
 package net.sourceforge.phpeclipse.phpeditor.php;
 
@@ -151,11 +151,17 @@ public class PHPPartitionScanner implements IPartitionTokenScanner {
         return getToken(token);
       case '"': // double quoted string
         // read until end of double quoted string
-        readUntilEscaped('"');
+        if (!readUntilEscapedDQ()) {
+          state = STATE_DEFAULT;
+          return getToken(token);
+        }
         break;
       case '\'': // single quoted string
         // read until end of single quoted string
-        readUntilEscaped('\'');
+        if (!readUntilEscapedSQ()) {
+          state = STATE_DEFAULT;
+          return getToken(token);
+        }
         break;
       case '/': // comment start?
         ch = read();
@@ -273,22 +279,46 @@ public class PHPPartitionScanner implements IPartitionTokenScanner {
     }
   }
 
-  private void readUntilEscaped(char ch) {
+  private boolean readUntilEscapedDQ() {
+    // search last double quoted character
     if (position >= end) {
-      return;
+      return false;
     }
     try {
+      char ch;
       while (true) {
-        if (document.getChar(position++) == ch) {
-          if (position < 2 || document.getChar(position - 2) != '\\') {
-            break;
-          }
+        ch = document.getChar(position++);
+        if (ch == '\\') {
+          ch = document.getChar(position++); // ignore escaped character
+        } else if (ch == '"') {
+          return true;
+        }
+      }
+    } catch (BadLocationException e) {
+      --position;
+    }
+    return false;
+  }
+  
+  private boolean readUntilEscapedSQ() {
+    // search last single quoted character
+    if (position >= end) {
+      return false;
+    }
+    try {  
+      char ch;
+      while (true) {
+        ch = document.getChar(position++); 
+        if (ch == '\\') {
+          ch = document.getChar(position++); // ignore escaped character
+        } else if (ch == '\'') {
+          return true;
         }
       }
     } catch (BadLocationException e) {
       --position;
-      return;
     }
+    return false;
   }
 
   private void readSingleLine() {