Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(121)

Unified Diff: third_party/WebKit/Source/bindings/scripts/code_generator_web_module.py

Issue 2688933003: [Web Agents API]: Start fleshing out generated code. (Closed)
Patch Set: Rebased. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/bindings/scripts/code_generator_web_module.py
diff --git a/third_party/WebKit/Source/bindings/scripts/code_generator_web_module.py b/third_party/WebKit/Source/bindings/scripts/code_generator_web_module.py
index d9c49be4f58f3c7663ccc4abb962fe7e3c503568..11c52e39ff264d7c8652e60a115d51a0524becad 100644
--- a/third_party/WebKit/Source/bindings/scripts/code_generator_web_module.py
+++ b/third_party/WebKit/Source/bindings/scripts/code_generator_web_module.py
@@ -29,11 +29,12 @@ from name_style_converter import NameStyleConverter
MODULE_PYNAME = os.path.splitext(os.path.basename(__file__))[0] + '.py'
-WEB_MODULE_IDL_ATTRIBUTE = 'WebModuleAPI'
STRING_INCLUDE_PATH = 'wtf/text/WTFString.h'
+WEB_MODULE_IDL_ATTRIBUTE = 'WebModuleAPI'
-def interface_context(idl_interface):
- builder = InterfaceContextBuilder(MODULE_PYNAME, TypeResolver())
+
+def interface_context(idl_interface, type_resolver):
+ builder = InterfaceContextBuilder(MODULE_PYNAME, type_resolver)
builder.set_class_name(idl_interface.name)
builder.set_inheritance(idl_interface.parent)
@@ -50,9 +51,14 @@ class TypeResolver(object):
"""Resolves Web IDL types into corresponding C++ types and include paths
to the generated and existing files."""
- def includes_from_interface(self, base_type):
- # TODO(dglazkov): Are there any exceptional conditions here?
- return set([base_type])
+ def __init__(self, interfaces_info):
+ self.interfaces_info = interfaces_info
+
+ def includes_from_interface(self, interface_name):
+ interface_info = self.interfaces_info.get(interface_name)
+ if interface_info is None:
+ raise KeyError('Unknown interface "%s".' % interface_name)
+ return set([interface_info['include_path']])
def _includes_from_type(self, idl_type):
if idl_type.is_void:
@@ -63,9 +69,7 @@ class TypeResolver(object):
return set([STRING_INCLUDE_PATH])
# TODO(dglazkov): Handle complex/weird types.
- # TODO(dglazkov): Make these proper paths to generated and non-generated
- # files.
- return set([idl_type.base_type])
+ return self.includes_from_interface(idl_type.base_type)
def includes_from_definition(self, idl_definition):
return self._includes_from_type(idl_definition.idl_type)
@@ -75,6 +79,9 @@ class TypeResolver(object):
# type that can be used directly in the jinja2 template.
return idl_definition.idl_type.base_type
+ def base_class_includes(self):
+ return set(['platform/heap/Handle.h'])
+
class InterfaceContextBuilder(object):
def __init__(self, code_generator, type_resolver):
@@ -84,12 +91,16 @@ class InterfaceContextBuilder(object):
def set_class_name(self, class_name):
converter = NameStyleConverter(class_name)
self.result['class_name'] = converter.to_all_cases()
+ self._ensure_set('cpp_includes').update(
+ self.type_resolver.includes_from_interface(class_name))
def set_inheritance(self, base_interface):
if base_interface is None:
+ self._ensure_set('header_includes').update(
+ self.type_resolver.base_class_includes())
return
- self.result['inherits_expression'] = ' : public %s' % base_interface
- self._ensure_set('cpp_includes').update(
+ self.result['base_class'] = base_interface
+ self._ensure_set('header_includes').update(
self.type_resolver.includes_from_interface(base_interface))
def _ensure_set(self, name):
@@ -136,6 +147,7 @@ class CodeGeneratorWebModule(CodeGeneratorBase):
def __init__(self, info_provider, cache_dir, output_dir):
CodeGeneratorBase.__init__(self, MODULE_PYNAME, info_provider,
cache_dir, output_dir)
+ self.type_resolver = TypeResolver(info_provider.interfaces_info)
self.typedef_resolver = TypedefResolver(info_provider)
def get_template(self, file_extension):
@@ -157,7 +169,7 @@ class CodeGeneratorWebModule(CodeGeneratorBase):
if interface.is_callback or interface.is_partial:
raise ValueError('Partial or callback interfaces are not supported')
- template_context = interface_context(interface)
+ template_context = interface_context(interface, self.type_resolver)
return (
self.generate_file(template_context, 'h'),
« no previous file with comments | « third_party/WebKit/Source/bindings/DEPS ('k') | third_party/WebKit/Source/bindings/scripts/code_generator_web_module_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698