platform/packages/reflection/lib/src/mirrors.dart

299 lines
8.4 KiB
Dart

/// Basic reflection in Dart, with support for introspection and dynamic invocation.
library mirrors;
import 'dart:core';
import 'metadata.dart';
/// A [Mirror] reflects some Dart language entity.
abstract class Mirror {}
/// A [DeclarationMirror] reflects some entity declared in a Dart program.
abstract class DeclarationMirror implements Mirror {
/// The simple name for this Dart language entity.
Symbol get simpleName;
/// The fully-qualified name for this Dart language entity.
Symbol get qualifiedName;
/// A mirror on the owner of this Dart language entity.
DeclarationMirror? get owner;
/// Whether this declaration is library private.
bool get isPrivate;
/// Whether this declaration is top-level.
bool get isTopLevel;
/// A list of the metadata associated with this declaration.
List<InstanceMirror> get metadata;
/// The name of this declaration.
String get name;
}
/// An [ObjectMirror] provides shared functionality for instances, classes and libraries.
abstract class ObjectMirror implements Mirror {
/// Invokes the named function and returns a mirror on the result.
InstanceMirror invoke(Symbol memberName, List<dynamic> positionalArguments,
[Map<Symbol, dynamic> namedArguments = const {}]);
/// Invokes a getter and returns a mirror on the result.
InstanceMirror getField(Symbol fieldName);
/// Invokes a setter and returns a mirror on the result.
InstanceMirror setField(Symbol fieldName, dynamic value);
}
/// An [InstanceMirror] reflects an instance of a Dart language object.
abstract class InstanceMirror implements ObjectMirror {
/// A mirror on the type of the reflectee.
ClassMirror get type;
/// Whether this mirror's reflectee is accessible.
bool get hasReflectee;
/// The reflectee of this mirror.
dynamic get reflectee;
}
/// An [IsolateMirror] reflects an isolate.
abstract class IsolateMirror implements Mirror {
/// A unique name used to refer to the isolate in debugging messages.
String get debugName;
/// Whether this mirror reflects the currently running isolate.
bool get isCurrent;
/// The root library for the reflected isolate.
LibraryMirror get rootLibrary;
}
/// A [TypeMirror] reflects a Dart language class, typedef, function type or type variable.
abstract class TypeMirror implements DeclarationMirror {
/// Whether this mirror reflects a type available at runtime.
bool get hasReflectedType;
/// The [Type] reflected by this mirror.
Type get reflectedType;
/// Type variables declared on this type.
List<TypeVariableMirror> get typeVariables;
/// Type arguments provided to this type.
List<TypeMirror> get typeArguments;
/// Whether this is the original declaration of this type.
bool get isOriginalDeclaration;
/// A mirror on the original declaration of this type.
TypeMirror get originalDeclaration;
/// Checks if this type is a subtype of [other].
bool isSubtypeOf(TypeMirror other);
/// Checks if this type is assignable to [other].
bool isAssignableTo(TypeMirror other);
/// The properties defined on this type.
Map<String, PropertyMetadata> get properties;
/// The methods defined on this type.
Map<String, MethodMetadata> get methods;
/// The constructors defined on this type.
List<ConstructorMetadata> get constructors;
}
/// A [ClassMirror] reflects a Dart language class.
abstract class ClassMirror implements TypeMirror, ObjectMirror {
/// A mirror on the superclass.
ClassMirror? get superclass;
/// Mirrors on the superinterfaces.
List<ClassMirror> get superinterfaces;
/// Whether this class is abstract.
bool get isAbstract;
/// Whether this class is an enum.
bool get isEnum;
/// The declarations in this class.
Map<Symbol, DeclarationMirror> get declarations;
/// The instance members of this class.
Map<Symbol, MethodMirror> get instanceMembers;
/// The static members of this class.
Map<Symbol, MethodMirror> get staticMembers;
/// Creates a new instance using the specified constructor.
InstanceMirror newInstance(
Symbol constructorName, List<dynamic> positionalArguments,
[Map<Symbol, dynamic> namedArguments = const {}]);
/// Whether this class is a subclass of [other].
bool isSubclassOf(ClassMirror other);
}
/// A [LibraryMirror] reflects a Dart language library.
abstract class LibraryMirror implements DeclarationMirror, ObjectMirror {
/// The absolute URI of the library.
Uri get uri;
/// The declarations in this library.
Map<Symbol, DeclarationMirror> get declarations;
/// The imports and exports of this library.
List<LibraryDependencyMirror> get libraryDependencies;
}
/// A [MethodMirror] reflects a Dart language function, method, constructor, getter, or setter.
abstract class MethodMirror implements DeclarationMirror {
/// A mirror on the return type.
TypeMirror get returnType;
/// The source code if available.
String? get source;
/// Mirrors on the parameters.
List<ParameterMirror> get parameters;
/// Whether this is a static method.
bool get isStatic;
/// Whether this is an abstract method.
bool get isAbstract;
/// Whether this is a synthetic method.
bool get isSynthetic;
/// Whether this is a regular method.
bool get isRegularMethod;
/// Whether this is an operator.
bool get isOperator;
/// Whether this is a getter.
bool get isGetter;
/// Whether this is a setter.
bool get isSetter;
/// Whether this is a constructor.
bool get isConstructor;
/// The constructor name for named constructors.
Symbol get constructorName;
/// Whether this is a const constructor.
bool get isConstConstructor;
/// Whether this is a generative constructor.
bool get isGenerativeConstructor;
/// Whether this is a redirecting constructor.
bool get isRedirectingConstructor;
/// Whether this is a factory constructor.
bool get isFactoryConstructor;
}
/// A [VariableMirror] reflects a Dart language variable declaration.
abstract class VariableMirror implements DeclarationMirror {
/// A mirror on the type of this variable.
TypeMirror get type;
/// Whether this is a static variable.
bool get isStatic;
/// Whether this is a final variable.
bool get isFinal;
/// Whether this is a const variable.
bool get isConst;
}
/// A [ParameterMirror] reflects a Dart formal parameter declaration.
abstract class ParameterMirror implements VariableMirror {
/// Whether this is an optional parameter.
bool get isOptional;
/// Whether this is a named parameter.
bool get isNamed;
/// Whether this parameter has a default value.
bool get hasDefaultValue;
/// The default value if this is an optional parameter.
InstanceMirror? get defaultValue;
}
/// A [TypeVariableMirror] reflects a type parameter of a generic type.
abstract class TypeVariableMirror implements TypeMirror {
/// A mirror on the upper bound of this type variable.
TypeMirror get upperBound;
}
/// A mirror on an import or export declaration.
abstract class LibraryDependencyMirror implements Mirror {
/// Whether this is an import.
bool get isImport;
/// Whether this is an export.
bool get isExport;
/// Whether this is a deferred import.
bool get isDeferred;
/// The library containing this dependency.
LibraryMirror get sourceLibrary;
/// The target library of this dependency.
LibraryMirror? get targetLibrary;
/// The prefix if this is a prefixed import.
Symbol? get prefix;
/// The show/hide combinators on this dependency.
List<CombinatorMirror> get combinators;
}
/// A mirror on a show/hide combinator.
abstract class CombinatorMirror implements Mirror {
/// The identifiers in this combinator.
List<Symbol> get identifiers;
/// Whether this is a show combinator.
bool get isShow;
/// Whether this is a hide combinator.
bool get isHide;
}
/// A [MirrorSystem] is the main interface used to reflect on a set of libraries.
abstract class MirrorSystem {
/// All libraries known to the mirror system.
Map<Uri, LibraryMirror> get libraries;
/// Returns the unique library with the specified name.
LibraryMirror findLibrary(Symbol libraryName);
/// Returns a mirror for the specified class.
ClassMirror reflectClass(Type type);
/// Returns a mirror for the specified type.
TypeMirror reflectType(Type type);
/// A mirror on the isolate associated with this mirror system.
IsolateMirror get isolate;
/// A mirror on the dynamic type.
TypeMirror get dynamicType;
/// A mirror on the void type.
TypeMirror get voidType;
/// A mirror on the Never type.
TypeMirror get neverType;
}