summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2004-12-03 19:30:28 (GMT)
committerSteven Knight <knight@baldmt.com>2004-12-03 19:30:28 (GMT)
commit52aaecf21cacdd3d1589d184ca5c26942bd6d2b1 (patch)
tree01f95c39526696363fcaddefebbebc8e18d57a16
parentf0c3476fdae7032e6232d112864518934ba8a13e (diff)
downloadSCons-52aaecf21cacdd3d1589d184ca5c26942bd6d2b1.zip
SCons-52aaecf21cacdd3d1589d184ca5c26942bd6d2b1.tar.gz
SCons-52aaecf21cacdd3d1589d184ca5c26942bd6d2b1.tar.bz2
Fix Java parsing when creating an array of class instances.
-rw-r--r--src/CHANGES.txt5
-rw-r--r--src/engine/SCons/Tool/JavaCommon.py7
-rw-r--r--src/engine/SCons/Tool/JavaCommonTests.py16
3 files changed, 25 insertions, 3 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index 021d1d4..507245a 100644
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -10,6 +10,11 @@
RELEASE 0.97 - XXX
+ From Anonymous:
+
+ - Fix Java parsing to avoid erroneously identifying a new array
+ of class instances as an anonymous inner class.
+
From Chad Austin:
- Allow Help() to be called multiple times, appending to the help
diff --git a/src/engine/SCons/Tool/JavaCommon.py b/src/engine/SCons/Tool/JavaCommon.py
index 72196e3..5c46288 100644
--- a/src/engine/SCons/Tool/JavaCommon.py
+++ b/src/engine/SCons/Tool/JavaCommon.py
@@ -45,10 +45,11 @@ if java_parsing:
# A regular expression that will find, in a java file: newlines;
# any alphanumeric token (keyword, class name, specifier); open or
# close brackets; a single-line comment "//"; the multi-line comment
- # begin and end tokens /* and */; single or double quotes; and
- # single or double quotes preceeded by a backslash.
+ # 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\.]*|' +
- r'/\*|\*/)')
+ r'/\*|\*/|\[\])')
class OuterState:
"""The initial state for parsing a Java file for classes,
diff --git a/src/engine/SCons/Tool/JavaCommonTests.py b/src/engine/SCons/Tool/JavaCommonTests.py
index 46d1955..05d0fad 100644
--- a/src/engine/SCons/Tool/JavaCommonTests.py
+++ b/src/engine/SCons/Tool/JavaCommonTests.py
@@ -171,6 +171,22 @@ public class Example1 extends UnicastRemoteObject implements Hello {
assert pkg_dir == os.path.join('com', 'sub', 'foo'), pkg_dir
assert classes == ['Example1'], classes
+ def test_arrays(self):
+ """Test arrays of class instances"""
+
+ pkg_dir, classes = SCons.Tool.JavaCommon.parse_java("""\
+public class Test {
+ MyClass abc = new MyClass();
+ MyClass xyz = new MyClass();
+ MyClass _array[] = new MyClass[] {
+ abc,
+ xyz
+ }
+}
+""")
+ assert pkg_dir == None, pkg_dir
+ assert classes == ['Test'], classes
+
if __name__ == "__main__":
suite = unittest.TestSuite()
tclasses = [ parse_javaTestCase ]