Index: tools/json_schema_compiler/model.py |
diff --git a/tools/json_schema_compiler/model.py b/tools/json_schema_compiler/model.py |
index 3f7b2fe693439fedcbed56f249294d7f126afc56..642e818492b6fe63a6f1ca51375157364770f41c 100644 |
--- a/tools/json_schema_compiler/model.py |
+++ b/tools/json_schema_compiler/model.py |
@@ -24,7 +24,8 @@ class Model(object): |
Properties: |
- |namespaces| a map of a namespace name to its model.Namespace |
""" |
- def __init__(self): |
+ def __init__(self, allow_inline_enums=True): |
+ self._allow_inline_enums = allow_inline_enums |
self.namespaces = {} |
def AddNamespace(self, |
@@ -37,7 +38,8 @@ class Model(object): |
namespace = Namespace(json, |
source_file, |
include_compiler_options=include_compiler_options, |
- environment=environment) |
+ environment=environment, |
+ allow_inline_enums=self._allow_inline_enums) |
self.namespaces[namespace.name] = namespace |
return namespace |
@@ -104,7 +106,8 @@ class Namespace(object): |
json, |
source_file, |
include_compiler_options=False, |
- environment=None): |
+ environment=None, |
+ allow_inline_enums=True): |
self.name = json['namespace'] |
if 'description' not in json: |
# TODO(kalman): Go back to throwing an error here. |
@@ -118,6 +121,7 @@ class Namespace(object): |
self.source_file_dir, self.source_file_filename = os.path.split(source_file) |
self.short_filename = os.path.basename(source_file).split('.')[0] |
self.parent = None |
+ self.allow_inline_enums = allow_inline_enums |
self.platforms = _GetPlatforms(json) |
toplevel_origin = Origin(from_client=True, from_json=True) |
self.types = _GetTypes(self, json, self, toplevel_origin) |
@@ -198,6 +202,11 @@ class Type(object): |
self.property_type = PropertyType.REF |
self.ref_type = json['$ref'] |
elif 'enum' in json and json_type == 'string': |
+ if not namespace.allow_inline_enums and not isinstance(parent, Namespace): |
not at google - send to devlin
2015/04/03 17:04:38
Is there a reason to make this a parameter rather
Devlin
2015/04/03 19:38:51
The docserver inlines types, and then feeds them b
|
+ raise ParseException( |
+ self, |
+ 'Inline enum "%s" found in namespace "%s". These are not allowed. ' |
+ 'See crbug.com/472279' % (name, namespace.name)) |
self.property_type = PropertyType.ENUM |
self.enum_values = [EnumValue(value) for value in json['enum']] |
self.cpp_enum_prefix_override = json.get('cpp_enum_prefix_override', None) |