pkg/vm/dynamic_interface.md
This file describes the format of dynamic_interface.yaml file. Dynamic interface specifies classes and members of the host application which can be used, extended, implemented and overridden by a dynamically loaded module.
TODO(alexmarkov) Add a link to dynamic module API.
The dynamic interface yaml file can contain the following sections:
callable:
- item 1
...
- item N
dynamically-callable:
- item 1
...
- item N
extendable:
- item 1
...
- item N
can-be-overridden:
- item 1
...
- item N
can-be-used-as-type:
- item 1
...
- item N
callable section specifies members which can be
called from dynamic module and classes which can be
referenced in types of dynamic module.
dynamically-callable section specifies methods and properties
which can be called from a dynamic module using dynamic calls. A
dynamic call to a members exposed as callable but not
dynamically-callable will fail at runtime.
extendable section specifies classes which dynamic module can be
extend, mix-in or implement.
can-be-overridden section specifies instance members which
dynamic module can override.
can-be-used-as-type section specifies classes and extension types
which can be used in dynamic module in is checks, as casts,
type parameters, or type literals.
- library: '<library-uri>'
Library item specifies all public classes and members in the given library. Public members of private classes are not included.
- library: '<library-uri>'
class: '<class-name>'
Class item specifies given class and all public members of this class.
- library: '<library-uri>'
extension_type: '<extension-type-name>'
Extension Type item specifies given extension type and all public members of such extension type.
This item is only allowed in the callable section of the dynamic interface.
- library: '<library-uri>'
class: ['<class-name-1>', ..., 'class-name-N']
Class list item specifies given classes and all public members of these classes.
- library: '<library-uri>'
extension_type: ['<extension-type-name-1>', ..., 'extension-type-name-N']
Extension type list item specifies given extension types and all public members of these.
- library: '<library-uri>'
member: '<member-name>'
Library member item specifies given top-level member in the given library.
- library: '<library-uri>'
class: '<class-name>'
member: '<member-name>'
Class member item specifies given member of the given class.
- library: '<library-uri>'
extension_type: '<extension-type-name>'
member: '<member-name>'
Extension type member item specifies given member of the given extension type.
--
- library: '<library-uri>'
extension: '<extension-name>'
Extension item specifies given extension and all public members of such extension.
This item is only allowed in the callable section of the dynamic interface.
--
- library: '<library-uri>'
extension: ['<extension-name-1>', ..., 'extension-name-N']
Extension list item specifies given extensions and all public members of these.
--
- library: '<library-uri>'
extension: '<extension-name>'
member: '<member-name>'
Extension member item specifies given member of the given extension.
--
callable:
# All public classes and members in `dart:core`.
- library: 'dart:core'
# Only `foo` in `package:my_app/dyn_interface.dart`.
- library: 'package:my_app/dyn_interface.dart'
member: foo
# Only `DynInterface.bar` in `package:my_app/dyn_interface.dart`.
- library: 'package:my_app/dyn_interface.dart'
class: DynInterface
member: 'bar'
# Only `EType.baz` in `package:my_app/dyn_interface.dart`.
- library: 'package:my_app/dyn_interface.dart'
extension_type: Etype
member: 'baz'
extendable:
# All public classes in `dart:core`.
- library: 'dart:core'
# `StatefulWidget` and `StatelessWidget` classes in `package:flutter/src/widgets/framework.dart`.
- library: 'package:flutter/src/widgets/framework.dart'
class: ['StatefulWidget', 'StatelessWidget']
can-be-overridden:
# All public classes and members in `dart:core`.
- library: 'dart:core'
# Only `StatelessWidget.build` in `package:flutter/src/widgets/framework.dart`.
- library: 'package:flutter/src/widgets/framework.dart'
class: 'StatelessWidget'
member: 'build'
can-be-used-as-type:
# All public classes in `dart:core`.
- library: 'dart:core'
# `MyClass` in `package:my_app/lib/my_app.dart`.
- library: 'package:my_app/lib/my_app.dart'
class: 'MyClass'