| Index: mojo/public/tools/bindings/pylib/mojom/generate/module.py
|
| diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/module.py b/mojo/public/tools/bindings/pylib/mojom/generate/module.py
|
| index 3a5f188e75e46490b172759ad264a8e24beef749..ef49f0dfb2dde4ba98747bc59a9d54534953d94b 100644
|
| --- a/mojo/public/tools/bindings/pylib/mojom/generate/module.py
|
| +++ b/mojo/public/tools/bindings/pylib/mojom/generate/module.py
|
| @@ -847,6 +847,37 @@ def PassesAssociatedKinds(interface):
|
| return True
|
| return False
|
|
|
| +# Finds out whether a method passes associated interfaces and associated
|
| +# interface requests.
|
| +def MethodPassesAssociatedKinds(method):
|
| + def _ContainsAssociatedKinds(kind, visited_kinds):
|
| + if kind in visited_kinds:
|
| + # No need to examine the kind again.
|
| + return False
|
| + visited_kinds.add(kind)
|
| + if IsAssociatedKind(kind):
|
| + return True
|
| + if IsArrayKind(kind):
|
| + return _ContainsAssociatedKinds(kind.kind, visited_kinds)
|
| + if IsStructKind(kind) or IsUnionKind(kind):
|
| + for field in kind.fields:
|
| + if _ContainsAssociatedKinds(field.kind, visited_kinds):
|
| + return True
|
| + if IsMapKind(kind):
|
| + # No need to examine the key kind, only primitive kinds and non-nullable
|
| + # string are allowed to be key kinds.
|
| + return _ContainsAssociatedKinds(kind.value_kind, visited_kinds)
|
| + return False
|
| +
|
| + visited_kinds = set()
|
| + for param in method.parameters:
|
| + if _ContainsAssociatedKinds(param.kind, visited_kinds):
|
| + return True
|
| + if method.response_parameters != None:
|
| + for param in method.response_parameters:
|
| + if _ContainsAssociatedKinds(param.kind, visited_kinds):
|
| + return True
|
| + return False
|
|
|
| def HasSyncMethods(interface):
|
| for method in interface.methods:
|
|
|