declarations property
Returns an immutable map of the declarations actually given in the class declaration.
This map includes all regular methods, getters, setters, fields, constructors and type variables actually declared in the class. Both static and instance members are included, but no inherited members are included. The map is keyed by the simple names of the declarations.
This does not include inherited members.
Required capabilities: declarations requires a DeclarationsCapability. Note that the available invocation capabilities determine which declarations are included. E.g., in order to obtain a declaration mirror for a given instance method as part of the value returned from declarations there must be a matching InstanceInvokeCapability or InstanceInvokeMetaCapability, and similarly for static methods and top-level functions.
Implementation
@override
Map<String, DeclarationMirror> get declarations {
Map<String, DeclarationMirror>? declarations = _declarations;
if (declarations == null) {
var result = <String, DeclarationMirror>{};
for (int declarationIndex in _declarationIndices) {
// We encode a missing `declarations` capability as an index with
// the value noCapabilityIndex. Note that `_declarations` will not be
// initialized and hence we will come here repeatedly if that is the
// case; however, performing operations for which there is no capability
// need not have stellar performance, it is almost always a bug to do
// that.
if (declarationIndex == noCapabilityIndex) {
throw NoSuchCapabilityError(
'Requesting declarations of "$qualifiedName" without capability',
);
}
DeclarationMirror declarationMirror =
_data.memberMirrors![declarationIndex];
result[declarationMirror.simpleName] = declarationMirror;
}
_declarations = declarations =
UnmodifiableMapView<String, DeclarationMirror>(result);
}
return declarations;
}