Skip to content

Commit

Permalink
Add module reference in struct, interface and enums.
Browse files Browse the repository at this point in the history
 In java, to get the fully qualified name of an object, we will need to
have access to the module that declare this object. This CL ensure that
object keeps a reference to their module.

R=viettrungluu@chromium.org

Review URL: https://codereview.chromium.org/253273003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@267485 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
qsr@chromium.org committed May 1, 2014
1 parent 2d32fe0 commit 2b48b5b
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 28 deletions.
6 changes: 3 additions & 3 deletions mojo/public/tools/bindings/pylib/mojom/generate/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ def StructToData(struct):
}

def StructFromData(module, data):
struct = mojom.Struct()
struct = mojom.Struct(module=module)
struct.name = data['name']
struct.spec = 'x:' + module.namespace + '.' + struct.name
module.kinds[struct.spec] = struct
Expand Down Expand Up @@ -227,7 +227,7 @@ def InterfaceToData(interface):
}

def InterfaceFromData(module, data):
interface = mojom.Interface()
interface = mojom.Interface(module=module)
interface.name = data['name']
interface.spec = 'x:' + module.namespace + '.' + interface.name
interface.peer = data['peer'] if data.has_key('peer') else None
Expand All @@ -252,7 +252,7 @@ def EnumFieldFromData(module, enum, data, parent_kind):
return field

def EnumFromData(module, data, parent_kind):
enum = mojom.Enum()
enum = mojom.Enum(module=module)
enum.name = data['name']
name = enum.name
if parent_kind:
Expand Down
4 changes: 2 additions & 2 deletions mojo/public/tools/bindings/pylib/mojom/generate/generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
def GetStructFromMethod(interface, method):
"""Converts a method's parameters into the fields of a struct."""
params_class = "%s_%s_Params" % (interface.name, method.name)
struct = mojom.Struct(params_class)
struct = mojom.Struct(params_class, module=interface.module)
for param in method.parameters:
struct.AddField(param.name, param.kind, param.ordinal)
struct.packed = pack.PackedStruct(struct)
Expand All @@ -22,7 +22,7 @@ def GetStructFromMethod(interface, method):
def GetResponseStructFromMethod(interface, method):
"""Converts a method's response_parameters into the fields of a struct."""
params_class = "%s_%s_ResponseParams" % (interface.name, method.name)
struct = mojom.Struct(params_class)
struct = mojom.Struct(params_class, module=interface.module)
for param in method.response_parameters:
struct.AddField(param.name, param.kind, param.ordinal)
struct.packed = pack.PackedStruct(struct)
Expand Down
36 changes: 20 additions & 16 deletions mojo/public/tools/bindings/pylib/mojom/generate/module.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
#

class Kind(object):
def __init__(self, spec = None):
def __init__(self, spec=None):
self.spec = spec
self.parent_kind = None

Expand Down Expand Up @@ -62,6 +62,7 @@ def __init__(self, spec = None):

class Constant(object):
def __init__(self, module, enum, field):
self.module = module
self.namespace = module.namespace
self.parent_kind = enum.parent_kind
self.name = [enum.name, field.name]
Expand All @@ -74,16 +75,17 @@ def GetSpec(self):


class Field(object):
def __init__(self, name = None, kind = None, ordinal = None, default = None):
def __init__(self, name=None, kind=None, ordinal=None, default=None):
self.name = name
self.kind = kind
self.ordinal = ordinal
self.default = default


class Struct(Kind):
def __init__(self, name = None):
def __init__(self, name=None, module=None):
self.name = name
self.module = module
self.imported_from = None
if name != None:
spec = 'x:' + name
Expand All @@ -92,14 +94,14 @@ def __init__(self, name = None):
Kind.__init__(self, spec)
self.fields = []

def AddField(self, name, kind, ordinal = None, default = None):
def AddField(self, name, kind, ordinal=None, default=None):
field = Field(name, kind, ordinal, default)
self.fields.append(field)
return field


class Array(Kind):
def __init__(self, kind = None):
def __init__(self, kind=None):
self.kind = kind
if kind != None:
Kind.__init__(self, 'a:' + kind.spec)
Expand All @@ -108,26 +110,26 @@ def __init__(self, kind = None):


class Parameter(object):
def __init__(self, name = None, kind = None, ordinal = None, default = None):
def __init__(self, name=None, kind=None, ordinal=None, default=None):
self.name = name
self.ordinal = ordinal
self.kind = kind
self.default = default


class Method(object):
def __init__(self, name = None, ordinal = None):
def __init__(self, name=None, ordinal=None):
self.name = name
self.ordinal = ordinal
self.parameters = []
self.response_parameters = None

def AddParameter(self, name, kind, ordinal = None, default = None):
def AddParameter(self, name, kind, ordinal=None, default=None):
parameter = Parameter(name, kind, ordinal, default)
self.parameters.append(parameter)
return parameter

def AddResponseParameter(self, name, kind, ordinal = None, default = None):
def AddResponseParameter(self, name, kind, ordinal=None, default=None):
if self.response_parameters == None:
self.response_parameters = []
parameter = Parameter(name, kind, ordinal, default)
Expand All @@ -136,7 +138,8 @@ def AddResponseParameter(self, name, kind, ordinal = None, default = None):


class Interface(Kind):
def __init__(self, name = None, peer = None):
def __init__(self, name=None, peer=None, module=None):
self.module = module
self.name = name
if name != None:
spec = 'x:' + name
Expand All @@ -146,20 +149,21 @@ def __init__(self, name = None, peer = None):
self.peer = peer
self.methods = []

def AddMethod(self, name, ordinal = None):
def AddMethod(self, name, ordinal=None):
method = Method(name, ordinal)
self.methods.append(method)
return method


class EnumField(object):
def __init__(self, name = None, value = None):
def __init__(self, name=None, value=None):
self.name = name
self.value = value


class Enum(Kind):
def __init__(self, name = None):
def __init__(self, name=None, module=None):
self.module = module
self.name = name
self.imported_from = None
if name != None:
Expand All @@ -171,19 +175,19 @@ def __init__(self, name = None):


class Module(object):
def __init__(self, name = None, namespace = None):
def __init__(self, name=None, namespace=None):
self.name = name
self.path = name
self.namespace = namespace
self.structs = []
self.interfaces = []

def AddInterface(self, name):
interface = Interface(name)
interface=Interface(name, module=self);
self.interfaces.append(interface)
return interface

def AddStruct(self, name):
struct = Struct(name)
struct=Struct(name, module=self)
self.structs.append(struct)
return struct
Original file line number Diff line number Diff line change
Expand Up @@ -30,25 +30,25 @@ def _GetDirAbove(dirname):
import jinja2


def ApplyTemplate(base_dir, path_to_template, params, filters=None):
def ApplyTemplate(base_dir, path_to_template, params, filters=None, **kwargs):
template_directory, template_name = os.path.split(path_to_template)
path_to_templates = os.path.join(base_dir, template_directory)
loader = jinja2.FileSystemLoader([path_to_templates])
jinja_env = jinja2.Environment(loader=loader, keep_trailing_newline=True)
jinja_env = jinja2.Environment(loader=loader, keep_trailing_newline=True,
**kwargs)
if filters:
jinja_env.filters.update(filters)
template = jinja_env.get_template(template_name)
return template.render(params)


def UseJinja(path_to_template, filters=None):
def UseJinja(path_to_template, **kwargs):
# Get the directory of our caller's file.
base_dir = os.path.dirname(inspect.getfile(sys._getframe(1)))
def RealDecorator(generator):
def GeneratorInternal(*args, **kwargs):
parameters = generator(*args, **kwargs)
return ApplyTemplate(base_dir, path_to_template, parameters,
filters=filters)
def GeneratorInternal(*args, **kwargs2):
parameters = generator(*args, **kwargs2)
return ApplyTemplate(base_dir, path_to_template, parameters, **kwargs)
GeneratorInternal.func_name = generator.func_name
return GeneratorInternal
return RealDecorator

0 comments on commit 2b48b5b

Please sign in to comment.