| 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]
|
|
|