Index: third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_go_generator.py |
diff --git a/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_go_generator.py b/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_go_generator.py |
index cb5a16e7f2a847be87d0cea2d6fd34dc6ccc54df..927318682aaddd67646d852287f1dfbef453a9e1 100644 |
--- a/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_go_generator.py |
+++ b/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_go_generator.py |
@@ -124,9 +124,9 @@ def FormatName(name, exported=True): |
def GetFullName(element, exported=True): |
if not hasattr(element, 'imported_from') or not element.imported_from: |
return FormatName(element.name, exported) |
- path = 'gen/mojom' |
- if element.imported_from['namespace']: |
- path = '/'.join([path] + element.imported_from['namespace'].split('.')) |
+ path = '' |
+ if element.imported_from['module'].path: |
+ path += GetPackagePath(element.imported_from['module']) |
if path in _imports: |
return '%s.%s' % (_imports[path], FormatName(element.name, exported)) |
return FormatName(element.name, exported) |
@@ -177,16 +177,12 @@ def EncodeSuffix(kind): |
return EncodeSuffix(mojom.MSGPIPE) |
return _kind_infos[kind].encode_suffix |
-def GetPackage(namespace): |
- if namespace: |
- return namespace.split('.')[-1] |
- return 'mojom' |
+def GetPackageName(module): |
+ return module.name.split('.')[0] |
-def GetPackagePath(namespace): |
- path = 'mojom' |
- for i in namespace.split('.'): |
- path = os.path.join(path, i) |
- return path |
+def GetPackagePath(module): |
+ name = module.name.split('.')[0] |
+ return '/'.join(module.path.split('/')[:-1] + [name]) |
def GetStructFromMethod(method): |
params_class = "%s_%s_Params" % (GetNameForElement(method.interface), |
@@ -225,24 +221,30 @@ def GetAllEnums(module): |
# Adds an import required to use the provided |element|. |
# The required import is stored at '_imports'. |
def AddImport(module, element): |
- if (isinstance(element, mojom.Kind) and |
- mojom.IsNonInterfaceHandleKind(element)): |
- _imports['mojo/public/go/system'] = 'system' |
+ if not isinstance(element, mojom.Kind): |
return |
- if isinstance(element, mojom.Kind) and mojom.IsInterfaceRequestKind(element): |
+ |
+ if mojom.IsArrayKind(element) or mojom.IsInterfaceRequestKind(element): |
AddImport(module, element.kind) |
return |
+ if mojom.IsMapKind(element): |
+ AddImport(module, element.key_kind) |
+ AddImport(module, element.value_kind) |
+ return |
+ if mojom.IsNonInterfaceHandleKind(element): |
+ _imports['mojo/public/go/system'] = 'system' |
+ return |
+ |
if not hasattr(element, 'imported_from') or not element.imported_from: |
return |
imported = element.imported_from |
- if imported['namespace'] == module.namespace: |
+ if GetPackagePath(imported['module']) == GetPackagePath(module): |
+ return |
+ path = GetPackagePath(imported['module']) |
+ if path in _imports: |
return |
- path = 'gen/mojom' |
- name = 'mojom' |
- if imported['namespace']: |
- path = '/'.join([path] + imported['namespace'].split('.')) |
- name = '_'.join([name] + imported['namespace'].split('.')) |
- while (name in _imports.values() and _imports[path] != path): |
+ name = GetPackageName(imported['module']) |
+ while name in _imports.values(): |
name += '_' |
_imports[path] = name |
@@ -259,7 +261,11 @@ def GetImports(module): |
all_structs.append(GetResponseStructFromMethod(method)) |
if len(all_structs) > 0 or len(module.interfaces) > 0: |
+ _imports['fmt'] = 'fmt' |
_imports['mojo/public/go/bindings'] = 'bindings' |
+ if len(all_structs) > 0: |
+ _imports['sort'] = 'sort' |
+ |
for struct in all_structs: |
for field in struct.fields: |
AddImport(module, field.kind) |
@@ -313,7 +319,7 @@ class Generator(generator.Generator): |
'enums': GetAllEnums(self.module), |
'imports': GetImports(self.module), |
'interfaces': self.module.interfaces, |
- 'package': GetPackage(self.module.namespace), |
+ 'package': GetPackageName(self.module), |
'structs': self.GetStructs(), |
} |
@@ -322,8 +328,8 @@ class Generator(generator.Generator): |
return self.GetParameters() |
def GenerateFiles(self, args): |
- self.Write(self.GenerateSource(), os.path.join("go", "src", "gen", |
- GetPackagePath(self.module.namespace), '%s.go' % self.module.name)) |
+ self.Write(self.GenerateSource(), os.path.join("go", "src", |
+ GetPackagePath(self.module), "%s.go" % self.module.name)) |
def GetJinjaParameters(self): |
return { |