| Index: tools/json_schema_compiler/js_externs_generator.py
|
| diff --git a/tools/json_schema_compiler/js_externs_generator.py b/tools/json_schema_compiler/js_externs_generator.py
|
| index 52a1d255d32c60f99e85c17ec9fcb44a904e1b57..e0a09ff7f270bb4b836f248e33bb605bb91b95bb 100644
|
| --- a/tools/json_schema_compiler/js_externs_generator.py
|
| +++ b/tools/json_schema_compiler/js_externs_generator.py
|
| @@ -38,11 +38,11 @@ class _Generator(object):
|
| self._namespace.name)
|
| .Append())
|
|
|
| + c.Cblock(self._GenerateNamespaceObject())
|
| +
|
| for js_type in self._namespace.types.values():
|
| c.Cblock(self._GenerateType(js_type))
|
|
|
| - c.Cblock(self._GenerateNamespaceObject())
|
| -
|
| for function in self._namespace.functions.values():
|
| c.Cblock(self._GenerateFunction(function))
|
|
|
| @@ -53,22 +53,24 @@ class _Generator(object):
|
|
|
| def _GenerateType(self, js_type):
|
| """Given a Type object, returns the Code for this type's definition.
|
| -
|
| """
|
| c = Code()
|
| -
|
| - # Since enums are just treated as strings for now, don't generate their
|
| - # type.
|
| if js_type.property_type is PropertyType.ENUM:
|
| - return c
|
| -
|
| - c.Concat(self._GenerateTypeJsDoc(js_type))
|
| + c.Concat(self._GenerateEnumJsDoc(js_type))
|
| + else:
|
| + c.Concat(self._GenerateTypeJsDoc(js_type))
|
|
|
| - var = 'var ' + js_type.simple_name
|
| - if self._IsTypeConstructor(js_type): var += ' = function()'
|
| - var += ';'
|
| - c.Append(var)
|
| + return c
|
|
|
| + def _GenerateEnumJsDoc(self, js_type):
|
| + """ Given an Enum Type object, returns the Code for the enum's definition.
|
| + """
|
| + c = Code()
|
| + c.Append('/**').Append(' * @enum {string}').Append(' */')
|
| + c.Append('chrome.%s.%s = {' % (self._namespace.name, js_type.name))
|
| + c.Append('\n'.join(
|
| + [" %s: '%s'," % (v.name, v.name) for v in js_type.enum_values]))
|
| + c.Append('};')
|
| return c
|
|
|
| def _IsTypeConstructor(self, js_type):
|
| @@ -90,12 +92,19 @@ class _Generator(object):
|
| for line in js_type.description.splitlines():
|
| c.Comment(line, comment_prefix = ' * ')
|
|
|
| - if self._IsTypeConstructor(js_type):
|
| + is_constructor = self._IsTypeConstructor(js_type)
|
| + if is_constructor:
|
| c.Comment('@constructor', comment_prefix = ' * ')
|
| else:
|
| c.Concat(self._GenerateTypedef(js_type.properties))
|
|
|
| c.Append(' */')
|
| +
|
| + var = 'var ' + js_type.simple_name
|
| + if is_constructor: var += ' = function() {}'
|
| + var += ';'
|
| + c.Append(var)
|
| +
|
| return c
|
|
|
| def _GenerateTypedef(self, properties):
|
| @@ -173,7 +182,12 @@ class _Generator(object):
|
| elif js_type.property_type is PropertyType.ARRAY:
|
| return 'Array'
|
| elif js_type.property_type is PropertyType.REF:
|
| - return js_type.ref_type
|
| + ref_type = js_type.ref_type
|
| + # Enums are defined as chrome.fooAPI.MyEnum, but types are defined simply
|
| + # as MyType.
|
| + if self._namespace.types[ref_type].property_type is PropertyType.ENUM:
|
| + ref_type = 'chrome.%s.%s' % (self._namespace.name, ref_type)
|
| + return ref_type
|
| elif js_type.property_type.is_fundamental:
|
| return js_type.property_type.name
|
| else:
|
|
|