diff options
author | Ludwig Hähne <pankrat@tigris.org> | 2008-10-31 19:27:08 (GMT) |
---|---|---|
committer | Ludwig Hähne <pankrat@tigris.org> | 2008-10-31 19:27:08 (GMT) |
commit | 3942f66a6ef2669458eac382f7d2afc19e4c10b8 (patch) | |
tree | d7f73f5738cc89b0a3182edf75bcad3bd1b35c05 /src/engine/SCons/Tool/JavaCommon.py | |
parent | 327e5ac5784bf7a2fa8edc80b626f51443f56e9e (diff) | |
download | SCons-3942f66a6ef2669458eac382f7d2afc19e4c10b8.zip SCons-3942f66a6ef2669458eac382f7d2afc19e4c10b8.tar.gz SCons-3942f66a6ef2669458eac382f7d2afc19e4c10b8.tar.bz2 |
Issue 2087: Handle Java classes declared in methods
Diffstat (limited to 'src/engine/SCons/Tool/JavaCommon.py')
-rw-r--r-- | src/engine/SCons/Tool/JavaCommon.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/engine/SCons/Tool/JavaCommon.py b/src/engine/SCons/Tool/JavaCommon.py index d028a39..58489db 100644 --- a/src/engine/SCons/Tool/JavaCommon.py +++ b/src/engine/SCons/Tool/JavaCommon.py @@ -75,6 +75,7 @@ if java_parsing: self.stackBrackets = [] self.brackets = 0 self.nextAnon = 1 + self.localClasses = [] self.stackAnonClassBrackets = [] self.anonStacksStack = [[0]] self.package = None @@ -126,6 +127,7 @@ if java_parsing: if len(self.stackBrackets) and \ self.brackets == self.stackBrackets[-1]: self.listOutputs.append(string.join(self.listClasses, '$')) + self.localClasses.pop() self.listClasses.pop() self.anonStacksStack.pop() self.stackBrackets.pop() @@ -240,6 +242,20 @@ if java_parsing: # the next non-whitespace token should be the name of the class if token == '\n': return self + # If that's an inner class which is declared in a method, it + # requires an index prepended to the class-name, e.g. + # 'Foo$1Inner' (Tigris Issue 2087) + if self.outer_state.localClasses and \ + self.outer_state.stackBrackets[-1] > \ + self.outer_state.stackBrackets[-2]+1: + locals = self.outer_state.localClasses[-1] + try: + idx = locals[token] + locals[token] = locals[token]+1 + except KeyError: + locals[token] = 1 + token = str(locals[token]) + token + self.outer_state.localClasses.append({}) self.outer_state.listClasses.append(token) self.outer_state.anonStacksStack.append([0]) return self.outer_state |