Fix the Java parser's handling of backslashes. (Leanid Nazdrynau)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Mon, 30 May 2005 18:52:46 +0000 (18:52 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Mon, 30 May 2005 18:52:46 +0000 (18:52 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@1301 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/CHANGES.txt
src/engine/SCons/Tool/JavaCommon.py
src/engine/SCons/Tool/JavaCommonTests.py

index 51fdbc3d795eefdc9ae79ecdd248823e76248640..9a202a31bbfd1786453b1e7fea1732db5e8dbf44 100644 (file)
@@ -326,6 +326,10 @@ RELEASE 0.97 - XXX
 
   - Supply the help text when -h is used with the -u, -U or -D options.
 
+  From Leanid Nazdrynau:
+
+  - Fix the Java parser's handling of backslashes in strings.
+
   From Christian Neeb:
 
   - Fix the Java parser's handling of string definitions to avoid ignoring
index 5c46288161a6ace6f476fd117ce8fb3aa12c0477..96d6486f90d374fb75c17ce5b5b45ebf7979e026 100644 (file)
@@ -48,7 +48,7 @@ if java_parsing:
     # begin and end tokens /* and */; single or double quotes;
     # single or double quotes preceeded by a backslash; array
     # declarations "[]".
-    _reToken = re.compile(r'(\n|//|\\[\'"]|[\'"\{\}]|[A-Za-z_][\w\.]*|' +
+    _reToken = re.compile(r'(\n|\\\\|//|\\[\'"]|[\'"\{\}]|[A-Za-z_][\w\.]*|' +
                           r'/\*|\*/|\[\])')
 
     class OuterState:
index 05d0fad345faaefaec9773b382fa1c8f2eab71f3..352b7eed1f44910c7ef46436598d39f7ccd26750 100644 (file)
@@ -187,6 +187,21 @@ public class Test {
         assert pkg_dir == None, pkg_dir
         assert classes == ['Test'], classes
 
+    def test_backslash(self):
+        """Test backslash handling"""
+
+        pkg_dir, classes = SCons.Tool.JavaCommon.parse_java("""\
+public class MyTabs
+{
+       private class MyInternal
+       {
+       }
+       private final static String PATH = "images\\\\";
+}
+""")
+        assert pkg_dir == None, pkg_dir
+        assert classes == ['MyTabs$MyInternal', 'MyTabs'], classes
+
 if __name__ == "__main__":
     suite = unittest.TestSuite()
     tclasses = [ parse_javaTestCase ]