| 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 37c76a2b8d0d5cd345418290218bc7e5959f2586..8af874fa71ed335be679939450a7535e22a72ee4 100644
|
| --- a/mojo/public/tools/bindings/pylib/mojom/generate/module.py
|
| +++ b/mojo/public/tools/bindings/pylib/mojom/generate/module.py
|
| @@ -618,3 +618,37 @@ def HasCallbacks(interface):
|
| if method.response_parameters != None:
|
| return True
|
| return False
|
| +
|
| +
|
| +# Finds out whether an interface passes associated interfaces and associated
|
| +# interface requests.
|
| +def PassesAssociatedKinds(interface):
|
| + 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 method in interface.methods:
|
| + 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
|
|
|