Index: build/android/gyp/java_cpp_enum.py |
diff --git a/build/android/gyp/java_cpp_enum.py b/build/android/gyp/java_cpp_enum.py |
index 6a1d5c1e4c39fa54a1c1b2550356a162c2dcb173..00bb6f35d7b08f678698cf94a199f91de795220c 100755 |
--- a/build/android/gyp/java_cpp_enum.py |
+++ b/build/android/gyp/java_cpp_enum.py |
@@ -14,17 +14,23 @@ import sys |
from util import build_utils |
class EnumDefinition(object): |
- def __init__(self, class_name=None, class_package=None, entries=None): |
- self.class_name = class_name |
+ def __init__(self, original_enum_name=None, override_class_name=None, |
+ class_package=None, entries=None): |
+ self.original_enum_name = original_enum_name |
+ self.override_class_name = override_class_name |
self.class_package = class_package |
self.entries = collections.OrderedDict(entries or []) |
- self.prefix_to_strip = '' |
+ self.prefix_to_strip = None |
def AppendEntry(self, key, value): |
if key in self.entries: |
raise Exception('Multiple definitions of key %s found.' % key) |
self.entries[key] = value |
+ @property |
+ def class_name(self): |
+ return self.override_class_name or self.original_enum_name |
+ |
def Finalize(self): |
self._Validate() |
self._AssignEntryIndices() |
@@ -54,23 +60,31 @@ class EnumDefinition(object): |
def _StripPrefix(self): |
- if not self.prefix_to_strip: |
- prefix_to_strip = re.sub('(?!^)([A-Z]+)', r'_\1', self.class_name).upper() |
+ prefix_to_strip = self.prefix_to_strip |
+ if not prefix_to_strip: |
+ prefix_to_strip = self.original_enum_name |
+ prefix_to_strip = re.sub('(?!^)([A-Z]+)', r'_\1', prefix_to_strip).upper() |
prefix_to_strip += '_' |
if not all([w.startswith(prefix_to_strip) for w in self.entries.keys()]): |
prefix_to_strip = '' |
- else: |
- prefix_to_strip = self.prefix_to_strip |
- entries = ((k.replace(prefix_to_strip, '', 1), v) for (k, v) in |
- self.entries.iteritems()) |
- self.entries = collections.OrderedDict(entries) |
+ |
+ entries = collections.OrderedDict() |
+ for (k, v) in self.entries.iteritems(): |
+ stripped_key = k.replace(prefix_to_strip, '', 1) |
+ if isinstance(v, basestring): |
+ stripped_value = v.replace(prefix_to_strip, '', 1) |
+ else: |
+ stripped_value = v |
+ entries[stripped_key] = stripped_value |
+ |
+ self.entries = entries |
class HeaderParser(object): |
single_line_comment_re = re.compile(r'\s*//') |
multi_line_comment_start_re = re.compile(r'\s*/\*') |
enum_start_re = re.compile(r'^\s*enum\s+(\w+)\s+{\s*$') |
enum_line_re = re.compile(r'^\s*(\w+)(\s*\=\s*([^,\n]+))?,?') |
- enum_end_re = re.compile(r'^\s*}\s*;\s*$') |
+ enum_end_re = re.compile(r'^\s*}\s*;\.*$') |
generator_directive_re = re.compile( |
r'^\s*//\s+GENERATED_JAVA_(\w+)\s*:\s*([\.\w]+)$') |
@@ -109,6 +123,9 @@ class HeaderParser(object): |
enum_value = enum_entry.groups()[2] |
self._current_definition.AppendEntry(enum_key, enum_value) |
+ def _GetCurrentEnumClassNameOverride(self): |
+ return self._generator_directives.get('CLASS_NAME_OVERRIDE') |
+ |
def _GetCurrentEnumPackageName(self): |
return self._generator_directives.get('ENUM_PACKAGE') |
@@ -127,8 +144,9 @@ class HeaderParser(object): |
if enum_start: |
if not self._GetCurrentEnumPackageName(): |
return |
- self._current_definition = EnumDefinition() |
- self._current_definition.class_name = enum_start.groups()[0] |
+ self._current_definition = EnumDefinition( |
+ original_enum_name=enum_start.groups()[0], |
+ override_class_name=self._GetCurrentEnumClassNameOverride()) |
self._in_enum = True |
elif generator_directive: |
directive_name = generator_directive.groups()[0] |