blob: 0afbd8e14b633177966a31cae49045eb3579861f [file] [log] [blame]
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library mirrors;
import 'dart:mirrors';
import 'dart:mirrors' as api show SourceLocation;
export 'dart:mirrors';
abstract class DeclarationSourceMirror implements DeclarationMirror {
/// Returns `true` if the name of this declaration is generated by the
/// provider of the mirror system.
bool get isNameSynthetic;
/**
* Looks up [name] in the scope of this declaration.
*
* [name] may be either a single identifier, like 'foo', or of the
* a prefixed identifier, like 'foo.bar', where 'foo' must be a prefix.
* For methods and constructors, the scope includes the parameters. For
* classes and typedefs, the scope includes the type variables.
* For classes and class members, the scope includes inherited members.
*
* See also:
*
* * [Lexical Scope](https://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html#ch02-lexical-scope)
* in Dart Up and Running.
* * [Lexical Scoping](http://www.dartlang.org/docs/spec/latest/dart-language-specification.html#h.jb82efuudrc5)
* in the Dart Specification.
*/
DeclarationMirror lookupInScope(String name);
}
/**
* Specialized [InstanceMirror] used for reflection on constant lists.
*/
abstract class ListInstanceMirror implements InstanceMirror {
/**
* Returns an instance mirror of the value at [index] or throws a [RangeError]
* if the [index] is out of bounds.
*/
InstanceMirror getElement(int index);
/**
* The number of elements in the list.
*/
int get length;
}
/**
* Specialized [InstanceMirror] used for reflection on constant maps.
*/
abstract class MapInstanceMirror implements InstanceMirror {
/**
* Returns a collection containing all the keys in the map.
*/
Iterable<String> get keys;
/**
* Returns an instance mirror of the value for the given key or
* null if key is not in the map.
*/
InstanceMirror getValue(String key);
/**
* The number of {key, value} pairs in the map.
*/
int get length;
}
/**
* Specialized [InstanceMirror] used for reflection on type constants.
*/
abstract class TypeInstanceMirror implements InstanceMirror {
/**
* Returns the type mirror for the type represented by the reflected type
* constant.
*/
TypeMirror get representedType;
}
/**
* Specialized [InstanceMirror] used for reflection on comments as metadata.
*/
abstract class CommentInstanceMirror implements InstanceMirror {
/**
* The comment text as written in the source text.
*/
String get text;
/**
* The comment text without the start, end, and padding text.
*
* For example, if [text] is [: /** Comment text. */ :] then the [trimmedText]
* is [: Comment text. :].
*/
String get trimmedText;
/**
* Is [:true:] if this comment is a documentation comment.
*
* That is, that the comment is either enclosed in [: /** ... */ :] or starts
* with [: /// :].
*/
bool get isDocComment;
}
/**
* A library.
*/
abstract class LibrarySourceMirror
implements DeclarationSourceMirror, LibraryMirror {
/**
* Returns a list of the imports and exports in this library;
*/
List<LibraryDependencyMirror> get libraryDependencies;
}
/// A mirror on an import or export declaration.
abstract class LibraryDependencySourceMirror
extends Mirror implements LibraryDependencyMirror {
/// Is `true` if this dependency is an import.
bool get isImport;
/// Is `true` if this dependency is an export.
bool get isExport;
/// Returns the library mirror of the library that imports or exports the
/// [targetLibrary].
LibraryMirror get sourceLibrary;
/// Returns the library mirror of the library that is imported or exported.
LibraryMirror get targetLibrary;
/// Returns the prefix if this is a prefixed import and `null` otherwise.
/*String*/ get prefix;
/// Returns the list of show/hide combinators on the import/export
/// declaration.
List<CombinatorMirror> get combinators;
/// Returns the source location for this import/export declaration.
SourceLocation get location;
}
/// A mirror on a show/hide combinator declared on a library dependency.
abstract class CombinatorSourceMirror
extends Mirror implements CombinatorMirror {
/// The list of identifiers on the combinator.
List/*<String>*/ get identifiers;
/// Is `true` if this is a 'show' combinator.
bool get isShow;
/// Is `true` if this is a 'hide' combinator.
bool get isHide;
}
/**
* Common interface for classes, interfaces, typedefs and type variables.
*/
abstract class TypeSourceMirror implements DeclarationSourceMirror, TypeMirror {
/// Returns `true` is this is a mirror on the void type.
bool get isVoid;
/// Returns `true` is this is a mirror on the dynamic type.
bool get isDynamic;
/// Create a type mirror on the instantiation of the declaration of this type
/// with [typeArguments] as type arguments.
TypeMirror createInstantiation(List<TypeMirror> typeArguments);
}
/**
* A class or interface type.
*/
abstract class ClassSourceMirror implements TypeSourceMirror, ClassMirror {
/**
* Is [:true:] if this class is declared abstract.
*/
bool get isAbstract;
}
/**
* A formal parameter.
*/
abstract class ParameterSourceMirror implements ParameterMirror {
/**
* Returns [:true:] iff this parameter is an initializing formal of a
* constructor. That is, if it is of the form [:this.x:] where [:x:] is a
* field.
*/
bool get isInitializingFormal;
/**
* Returns the initialized field, if this parameter is an initializing formal.
*/
VariableMirror get initializedField;
}
/**
* A [SourceLocation] describes the span of an entity in Dart source code.
* A [SourceLocation] with a non-zero [length] should be the minimum span that
* encloses the declaration of the mirrored entity.
*/
abstract class SourceLocation implements api.SourceLocation {
/**
* The 1-based line number for this source location.
*
* A value of 0 means that the line number is unknown.
*/
int get line;
/**
* The 1-based column number for this source location.
*
* A value of 0 means that the column number is unknown.
*/
int get column;
/**
* The 0-based character offset into the [sourceText] where this source
* location begins.
*
* A value of -1 means that the offset is unknown.
*/
int get offset;
/**
* The number of characters in this source location.
*
* A value of 0 means that the [offset] is approximate.
*/
int get length;
/**
* The text of the location span.
*/
String get text;
/**
* Returns the URI where the source originated.
*/
Uri get sourceUri;
/**
* Returns the text of this source.
*/
String get sourceText;
}