| Index: lib/dartdoc/mirrors/dart2js_mirror.dart
|
| diff --git a/lib/dartdoc/mirrors/dart2js_mirror.dart b/lib/dartdoc/mirrors/dart2js_mirror.dart
|
| index 5bc3a9cf79e07d2e69251c96f838ce69cfe6ad57..44fff66e54af41d548f7d984a3e71bacf30fdd57 100644
|
| --- a/lib/dartdoc/mirrors/dart2js_mirror.dart
|
| +++ b/lib/dartdoc/mirrors/dart2js_mirror.dart
|
| @@ -30,65 +30,65 @@ bool _isPrivate(String name) {
|
| }
|
|
|
| List<ParameterMirror> _parametersFromFunctionSignature(
|
| - Dart2jsMirrorSystem system,
|
| - Dart2jsMethodMirror method,
|
| + Dart2JsMirrorSystem system,
|
| + Dart2JsMethodMirror method,
|
| FunctionSignature signature) {
|
| var parameters = <ParameterMirror>[];
|
| Link<Element> link = signature.requiredParameters;
|
| while (!link.isEmpty()) {
|
| - parameters.add(new Dart2jsParameterMirror(system, method,
|
| + parameters.add(new Dart2JsParameterMirror(system, method,
|
| link.head, false));
|
| link = link.tail;
|
| }
|
| link = signature.optionalParameters;
|
| while (!link.isEmpty()) {
|
| - parameters.add(new Dart2jsParameterMirror(system, method,
|
| + parameters.add(new Dart2JsParameterMirror(system, method,
|
| link.head, true));
|
| link = link.tail;
|
| }
|
| return parameters;
|
| }
|
|
|
| -Dart2jsTypeMirror _convertTypeToTypeMirror(
|
| - Dart2jsMirrorSystem system,
|
| +Dart2JsTypeMirror _convertTypeToTypeMirror(
|
| + Dart2JsMirrorSystem system,
|
| Type type,
|
| InterfaceType defaultType,
|
| [FunctionSignature functionSignature]) {
|
| if (type === null) {
|
| - return new Dart2jsInterfaceTypeMirror(system, defaultType);
|
| + return new Dart2JsInterfaceTypeMirror(system, defaultType);
|
| } else if (type is InterfaceType) {
|
| - return new Dart2jsInterfaceTypeMirror(system, type);
|
| + return new Dart2JsInterfaceTypeMirror(system, type);
|
| } else if (type is TypeVariableType) {
|
| - return new Dart2jsTypeVariableMirror(system, type);
|
| + return new Dart2JsTypeVariableMirror(system, type);
|
| } else if (type is FunctionType) {
|
| if (type.element is TypedefElement) {
|
| - return new Dart2jsTypedefMirror(system, type.element);
|
| + return new Dart2JsTypedefMirror(system, type.element);
|
| } else {
|
| - return new Dart2jsFunctionTypeMirror(system, type, functionSignature);
|
| + return new Dart2JsFunctionTypeMirror(system, type, functionSignature);
|
| }
|
| } else if (type is VoidType) {
|
| - return new Dart2jsVoidMirror(system, type);
|
| + return new Dart2JsVoidMirror(system, type);
|
| }
|
| throw new IllegalArgumentException("Unexpected interface type $type");
|
| }
|
|
|
| -Collection<Dart2jsMemberMirror> _convertElementMemberToMemberMirrors(
|
| - Dart2jsObjectMirror library, Element element) {
|
| +Collection<Dart2JsMemberMirror> _convertElementMemberToMemberMirrors(
|
| + Dart2JsObjectMirror library, Element element) {
|
| if (element is SynthesizedConstructorElement) {
|
| - return const <Dart2jsMemberMirror>[];
|
| + return const <Dart2JsMemberMirror>[];
|
| } else if (element is VariableElement) {
|
| - return <Dart2jsMemberMirror>[new Dart2jsFieldMirror(library, element)];
|
| + return <Dart2JsMemberMirror>[new Dart2JsFieldMirror(library, element)];
|
| } else if (element is FunctionElement) {
|
| - return <Dart2jsMemberMirror>[new Dart2jsMethodMirror(library, element)];
|
| + return <Dart2JsMemberMirror>[new Dart2JsMethodMirror(library, element)];
|
| } else if (element is AbstractFieldElement) {
|
| - var members = <Dart2jsMemberMirror>[];
|
| + var members = <Dart2JsMemberMirror>[];
|
| if (element.getter !== null) {
|
| - members.add(new Dart2jsMethodMirror(library, element.getter,
|
| - Dart2jsMethodKind.GETTER));
|
| + members.add(new Dart2JsMethodMirror(library, element.getter,
|
| + Dart2JsMethodKind.GETTER));
|
| }
|
| if (element.setter !== null) {
|
| - members.add(new Dart2jsMethodMirror(library, element.setter,
|
| - Dart2jsMethodKind.SETTER));
|
| + members.add(new Dart2JsMethodMirror(library, element.setter,
|
| + Dart2JsMethodKind.SETTER));
|
| }
|
| return members;
|
| }
|
| @@ -96,28 +96,28 @@ Collection<Dart2jsMemberMirror> _convertElementMemberToMemberMirrors(
|
| "Unexpected member type $element ${element.kind}");
|
| }
|
|
|
| -MethodMirror _convertElementMethodToMethodMirror(Dart2jsObjectMirror library,
|
| +MethodMirror _convertElementMethodToMethodMirror(Dart2JsObjectMirror library,
|
| Element element) {
|
| if (element is FunctionElement) {
|
| - return new Dart2jsMethodMirror(library, element);
|
| + return new Dart2JsMethodMirror(library, element);
|
| } else {
|
| return null;
|
| }
|
| }
|
|
|
| -class Dart2jsMethodKind {
|
| - static final Dart2jsMethodKind NORMAL = const Dart2jsMethodKind("normal");
|
| - static final Dart2jsMethodKind CONSTRUCTOR
|
| - = const Dart2jsMethodKind("constructor");
|
| - static final Dart2jsMethodKind CONST = const Dart2jsMethodKind("const");
|
| - static final Dart2jsMethodKind FACTORY = const Dart2jsMethodKind("factory");
|
| - static final Dart2jsMethodKind GETTER = const Dart2jsMethodKind("getter");
|
| - static final Dart2jsMethodKind SETTER = const Dart2jsMethodKind("setter");
|
| - static final Dart2jsMethodKind OPERATOR = const Dart2jsMethodKind("operator");
|
| +class Dart2JsMethodKind {
|
| + static final Dart2JsMethodKind NORMAL = const Dart2JsMethodKind("normal");
|
| + static final Dart2JsMethodKind CONSTRUCTOR
|
| + = const Dart2JsMethodKind("constructor");
|
| + static final Dart2JsMethodKind CONST = const Dart2JsMethodKind("const");
|
| + static final Dart2JsMethodKind FACTORY = const Dart2JsMethodKind("factory");
|
| + static final Dart2JsMethodKind GETTER = const Dart2JsMethodKind("getter");
|
| + static final Dart2JsMethodKind SETTER = const Dart2JsMethodKind("setter");
|
| + static final Dart2JsMethodKind OPERATOR = const Dart2JsMethodKind("operator");
|
|
|
| final String text;
|
|
|
| - const Dart2jsMethodKind(this.text);
|
| + const Dart2JsMethodKind(this.text);
|
|
|
| String toString() => text;
|
| }
|
| @@ -154,11 +154,11 @@ String _getOperatorFromOperatorName(String name) {
|
| }
|
|
|
| DiagnosticListener get _diagnosticListener() {
|
| - return const Dart2jsDiagnosticListener();
|
| + return const Dart2JsDiagnosticListener();
|
| }
|
|
|
| -class Dart2jsDiagnosticListener implements DiagnosticListener {
|
| - const Dart2jsDiagnosticListener();
|
| +class Dart2JsDiagnosticListener implements DiagnosticListener {
|
| + const Dart2JsDiagnosticListener();
|
|
|
| void cancel([String reason, node, token, instruction, element]) {
|
| print(reason);
|
| @@ -170,10 +170,113 @@ class Dart2jsDiagnosticListener implements DiagnosticListener {
|
| }
|
|
|
| //------------------------------------------------------------------------------
|
| +// Compiler extension for apidoc.
|
| +//------------------------------------------------------------------------------
|
| +
|
| +/**
|
| + * Extension of the compiler that enables the analysis of several libraries with
|
| + * no particular entry point.
|
| + */
|
| +class LibraryCompiler extends api.Compiler {
|
| + LibraryCompiler(diagnostics.ReadStringFromUri provider,
|
| + diagnostics.DiagnosticHandler handler,
|
| + Uri libraryRoot, Uri packageRoot,
|
| + List<String> options)
|
| + : super(provider, handler, libraryRoot, packageRoot, options) {
|
| + checker = new LibraryTypeCheckerTask(this);
|
| + resolver = new LibraryResolverTask(this);
|
| + }
|
| +
|
| + // TODO(johnniwinther): The following methods are added to enable the analysis
|
| + // of a collection of libraries to be used for apidoc. Most of the methods
|
| + // are based on copies of existing methods and could probably be implemented
|
| + // such that the duplicate code is avoided. Not to affect the correctness and
|
| + // speed of dart2js as is, the redundancy is accepted temporarily.
|
| +
|
| + /**
|
| + * Run the compiler on a list of libraries. No entry point is used.
|
| + */
|
| + bool runList(List<Uri> uriList) {
|
| + bool success = _runList(uriList);
|
| + for (final task in tasks) {
|
| + log('${task.name} took ${task.timing}msec');
|
| + }
|
| + return success;
|
| + }
|
| +
|
| + bool _runList(List<Uri> uriList) {
|
| + try {
|
| + runCompilerList(uriList);
|
| + } catch (CompilerCancelledException exception) {
|
| + log(exception.toString());
|
| + log('compilation failed');
|
| + return false;
|
| + }
|
| + tracer.close();
|
| + log('compilation succeeded');
|
| + return true;
|
| + }
|
| +
|
| + void runCompilerList(List<Uri> uriList) {
|
| + scanBuiltinLibraries();
|
| + var elementList = <LibraryElement>[];
|
| + for (var uri in uriList) {
|
| + elementList.add(scanner.loadLibrary(uri, null));
|
| + }
|
| +
|
| + world.populate(this, libraries.getValues());
|
| +
|
| + log('Resolving...');
|
| + phase = Compiler.PHASE_RESOLVING;
|
| + backend.enqueueHelpers(enqueuer.resolution);
|
| + processQueueList(enqueuer.resolution, elementList);
|
| + log('Resolved ${enqueuer.resolution.resolvedElements.length} elements.');
|
| + }
|
| +
|
| + void processQueueList(Enqueuer world, List<LibraryElement> elements) {
|
| + backend.processNativeClasses(world, libraries.getValues());
|
| + for (var library in elements) {
|
| + library.elements.forEach((_, element) {
|
| + world.addToWorkList(element);
|
| + });
|
| + }
|
| + progress.reset();
|
| + world.forEach((WorkItem work) {
|
| + withCurrentElement(work.element, () => work.run(this, world));
|
| + });
|
| + //world.queueIsClosed = true;
|
| + assert(world.checkNoEnqueuedInvokedInstanceMethods());
|
| + world.registerFieldClosureInvocations();
|
| + }
|
| +
|
| + String codegen(WorkItem work, Enqueuer world) {
|
| + return null;
|
| + }
|
| +}
|
| +
|
| +// TODO(johnniwinther): The source for the apidoc includes calls to methods on
|
| +// for instance [MathPrimitives] which are not resolved by dart2js. Since we
|
| +// do not need to analyse the body of functions to produce the documenation
|
| +// we use a specialized resolver which bypasses method bodies.
|
| +class LibraryResolverTask extends ResolverTask {
|
| + LibraryResolverTask(api.Compiler compiler) : super(compiler);
|
| +
|
| + void visitBody(ResolverVisitor visitor, Statement body) {}
|
| +}
|
| +
|
| +// TODO(johnniwinther): As a side-effect of bypassing method bodies in
|
| +// [LibraryResolveTask] we can not perform the typecheck.
|
| +class LibraryTypeCheckerTask extends TypeCheckerTask {
|
| + LibraryTypeCheckerTask(api.Compiler compiler) : super(compiler);
|
| +
|
| + void check(Node tree, TreeElements elements) {}
|
| +}
|
| +
|
| +//------------------------------------------------------------------------------
|
| // Compilation implementation
|
| //------------------------------------------------------------------------------
|
|
|
| -class Dart2jsCompilation implements Compilation {
|
| +class Dart2JsCompilation implements Compilation {
|
| api.Compiler _compiler;
|
| Uri cwd;
|
| bool isAborting = false;
|
| @@ -213,7 +316,7 @@ class Dart2jsCompilation implements Compilation {
|
| }
|
| }
|
|
|
| - Dart2jsCompilation(String script, String libraryRoot,
|
| + Dart2JsCompilation(String script, String libraryRoot,
|
| [String packageRoot, List<String> opts = const <String>[]])
|
| : cwd = getCurrentDirectory(), sourceFiles = <SourceFile>{} {
|
| var libraryUri = cwd.resolve(nativeToUriPath(libraryRoot));
|
| @@ -230,76 +333,100 @@ class Dart2jsCompilation implements Compilation {
|
| _compiler.run(scriptUri);
|
| }
|
|
|
| + Dart2JsCompilation.library(List<String> libraries, String libraryRoot,
|
| + [String packageRoot, List<String> opts = const []])
|
| + : cwd = getCurrentDirectory(), sourceFiles = <SourceFile>{} {
|
| + var libraryUri = cwd.resolve(nativeToUriPath(libraryRoot));
|
| + var packageUri;
|
| + if (packageRoot !== null) {
|
| + packageUri = cwd.resolve(nativeToUriPath(packageRoot));
|
| + } else {
|
| + packageUri = libraryUri;
|
| + }
|
| + _compiler = new LibraryCompiler(provider, handler,
|
| + libraryUri, packageUri, <String>[]);
|
| + var librariesUri = <Uri>[];
|
| + for (var library in libraries) {
|
| + librariesUri.add(cwd.resolve(nativeToUriPath(library)));
|
| + // TODO(johnniwinther): Detect file not found
|
| + }
|
| + _compiler.runList(librariesUri);
|
| + }
|
| +
|
| void addLibrary(String path) {
|
| var uri = cwd.resolve(nativeToUriPath(path));
|
| _compiler.scanner.loadLibrary(uri, null);
|
| }
|
|
|
| - MirrorSystem mirrors() => new Dart2jsMirrorSystem(_compiler);
|
| + MirrorSystem mirrors() => new Dart2JsMirrorSystem(_compiler);
|
| }
|
|
|
|
|
| //------------------------------------------------------------------------------
|
| -// Dart2js specific extensions of mirror interfaces
|
| +// Dart2Js specific extensions of mirror interfaces
|
| //------------------------------------------------------------------------------
|
|
|
| -interface Dart2jsMirror extends Mirror {
|
| +interface Dart2JsMirror extends Mirror {
|
| /**
|
| * A unique name used as the key in maps.
|
| */
|
| final String canonicalName;
|
| - final Dart2jsMirrorSystem system;
|
| + final Dart2JsMirrorSystem system;
|
| }
|
|
|
| -interface Dart2jsMemberMirror extends Dart2jsMirror, MemberMirror {
|
| +interface Dart2JsMemberMirror extends Dart2JsMirror, MemberMirror {
|
|
|
| }
|
|
|
| -interface Dart2jsTypeMirror extends Dart2jsMirror, TypeMirror {
|
| +interface Dart2JsTypeMirror extends Dart2JsMirror, TypeMirror {
|
|
|
| }
|
|
|
| -abstract class Dart2jsElementMirror implements Dart2jsMirror {
|
| - final Dart2jsMirrorSystem system;
|
| +abstract class Dart2JsElementMirror implements Dart2JsMirror {
|
| + final Dart2JsMirrorSystem system;
|
| final Element _element;
|
|
|
| - Dart2jsElementMirror(this.system, this._element) {
|
| + Dart2JsElementMirror(this.system, this._element) {
|
| assert (system !== null);
|
| assert (_element !== null);
|
| }
|
|
|
| String simpleName() => _element.name.slowToString();
|
|
|
| - Location location() => new Dart2jsLocation(
|
| + Location location() => new Dart2JsLocation(
|
| _element.getCompilationUnit().script,
|
| system.compiler.spanFromElement(_element));
|
|
|
| String toString() => _element.toString();
|
| +
|
| + int hashCode() => qualifiedName().hashCode();
|
| }
|
|
|
| -abstract class Dart2jsProxyMirror implements Dart2jsMirror {
|
| - final Dart2jsMirrorSystem system;
|
| +abstract class Dart2JsProxyMirror implements Dart2JsMirror {
|
| + final Dart2JsMirrorSystem system;
|
| +
|
| + Dart2JsProxyMirror(this.system);
|
|
|
| - Dart2jsProxyMirror(this.system);
|
| + int hashCode() => qualifiedName().hashCode();
|
| }
|
|
|
| -///////////////////////////////////////////////////////
|
| -// implementation
|
| -///////////////////////////////////////////////////////
|
| +//------------------------------------------------------------------------------
|
| +// Mirror system implementation.
|
| +//------------------------------------------------------------------------------
|
|
|
| -class Dart2jsMirrorSystem implements MirrorSystem, Dart2jsMirror {
|
| +class Dart2JsMirrorSystem implements MirrorSystem, Dart2JsMirror {
|
| final api.Compiler compiler;
|
| - Map<String, Dart2jsLibraryMirror> _libraries;
|
| - Map<LibraryElement, Dart2jsLibraryMirror> _libraryMap;
|
| + Map<String, Dart2JsLibraryMirror> _libraries;
|
| + Map<LibraryElement, Dart2JsLibraryMirror> _libraryMap;
|
|
|
| - Dart2jsMirrorSystem(this.compiler)
|
| - : _libraryMap = new Map<LibraryElement, Dart2jsLibraryMirror>();
|
| + Dart2JsMirrorSystem(this.compiler)
|
| + : _libraryMap = new Map<LibraryElement, Dart2JsLibraryMirror>();
|
|
|
| void _ensureLibraries() {
|
| if (_libraries == null) {
|
| - _libraries = <Dart2jsLibraryMirror>{};
|
| + _libraries = <Dart2JsLibraryMirror>{};
|
| compiler.libraries.forEach((_, LibraryElement v) {
|
| - var mirror = new Dart2jsLibraryMirror(system, v);
|
| + var mirror = new Dart2JsLibraryMirror(system, v);
|
| _libraries[mirror.canonicalName] = mirror;
|
| _libraryMap[v] = mirror;
|
| });
|
| @@ -311,34 +438,39 @@ class Dart2jsMirrorSystem implements MirrorSystem, Dart2jsMirror {
|
| return new ImmutableMapWrapper<Object, LibraryMirror>(_libraries);
|
| }
|
|
|
| - Dart2jsLibraryMirror getLibrary(LibraryElement element) {
|
| + Dart2JsLibraryMirror getLibrary(LibraryElement element) {
|
| return _libraryMap[element];
|
| }
|
|
|
| - Dart2jsMirrorSystem get system() => this;
|
| + Dart2JsMirrorSystem get system() => this;
|
|
|
| String simpleName() => "mirror";
|
| String qualifiedName() => simpleName();
|
|
|
| String get canonicalName() => simpleName();
|
| +
|
| + // TODO(johnniwinther): Hack! Dart2JsMirrorSystem need not be a Mirror.
|
| + int hashCode() => qualifiedName().hashCode();
|
| }
|
|
|
| -abstract class Dart2jsObjectMirror extends Dart2jsElementMirror
|
| +abstract class Dart2JsObjectMirror extends Dart2JsElementMirror
|
| implements ObjectMirror {
|
| - Dart2jsObjectMirror(Dart2jsMirrorSystem system, Element element)
|
| + Dart2JsObjectMirror(Dart2JsMirrorSystem system, Element element)
|
| : super(system, element);
|
| }
|
|
|
| -class Dart2jsLibraryMirror extends Dart2jsObjectMirror
|
| +class Dart2JsLibraryMirror extends Dart2JsObjectMirror
|
| implements LibraryMirror {
|
| Map<String, InterfaceMirror> _types;
|
| Map<String, MemberMirror> _members;
|
|
|
| - Dart2jsLibraryMirror(Dart2jsMirrorSystem system, LibraryElement library)
|
| + Dart2JsLibraryMirror(Dart2JsMirrorSystem system, LibraryElement library)
|
| : super(system, library);
|
|
|
| LibraryElement get _library() => _element;
|
|
|
| + LibraryMirror library() => this;
|
| +
|
| String get canonicalName() => simpleName();
|
|
|
| /**
|
| @@ -364,10 +496,10 @@ class Dart2jsLibraryMirror extends Dart2jsObjectMirror
|
| _library.forEachExport((Element e) {
|
| if (e.getLibrary() == _library) {
|
| if (e.isClass()) {
|
| - var type = new Dart2jsInterfaceMirror.fromLibrary(this, e);
|
| + var type = new Dart2JsInterfaceMirror.fromLibrary(this, e);
|
| _types[type.canonicalName] = type;
|
| } else if (e.isTypedef()) {
|
| - var type = new Dart2jsTypedefMirror.fromLibrary(this, e);
|
| + var type = new Dart2JsTypedefMirror.fromLibrary(this, e);
|
| _types[type.canonicalName] = type;
|
| }
|
| }
|
| @@ -400,40 +532,40 @@ class Dart2jsLibraryMirror extends Dart2jsObjectMirror
|
|
|
| Location location() {
|
| var script = _library.getCompilationUnit().script;
|
| - return new Dart2jsLocation(
|
| + return new Dart2JsLocation(
|
| script,
|
| new SourceSpan(script.uri, 0, script.text.length));
|
| }
|
| }
|
|
|
| -class Dart2jsLocation implements Location {
|
| +class Dart2JsLocation implements Location {
|
| Script _script;
|
| SourceSpan _span;
|
|
|
| - Dart2jsLocation(this._script, this._span);
|
| + Dart2JsLocation(this._script, this._span);
|
|
|
| int start() => _span.begin;
|
| int end() => _span.end;
|
| - Source source() => new Dart2jsSource(_script);
|
| + Source source() => new Dart2JsSource(_script);
|
|
|
| String text() => _script.text.substring(start(), end());
|
| }
|
|
|
| -class Dart2jsSource implements Source {
|
| +class Dart2JsSource implements Source {
|
| Script _script;
|
|
|
| - Dart2jsSource(this._script);
|
| + Dart2JsSource(this._script);
|
|
|
| Uri uri() => _script.uri;
|
| String text() => _script.text;
|
| }
|
|
|
| -class Dart2jsParameterMirror extends Dart2jsElementMirror
|
| +class Dart2JsParameterMirror extends Dart2JsElementMirror
|
| implements ParameterMirror {
|
| final MethodMirror _method;
|
| final bool _isOptional;
|
|
|
| - Dart2jsParameterMirror(Dart2jsMirrorSystem system,
|
| + Dart2JsParameterMirror(Dart2JsMirrorSystem system,
|
| this._method,
|
| VariableElement element,
|
| this._isOptional)
|
| @@ -462,20 +594,20 @@ class Dart2jsParameterMirror extends Dart2jsElementMirror
|
| //------------------------------------------------------------------------------
|
| // Declarations
|
| //------------------------------------------------------------------------------
|
| -class Dart2jsInterfaceMirror extends Dart2jsObjectMirror
|
| - implements Dart2jsTypeMirror, InterfaceMirror {
|
| - final Dart2jsLibraryMirror _library;
|
| - Map<String, Dart2jsMemberMirror> _members;
|
| +class Dart2JsInterfaceMirror extends Dart2JsObjectMirror
|
| + implements Dart2JsTypeMirror, InterfaceMirror {
|
| + final Dart2JsLibraryMirror _library;
|
| + Map<String, Dart2JsMemberMirror> _members;
|
| List<TypeVariableMirror> _typeVariables;
|
|
|
| - Dart2jsInterfaceMirror(Dart2jsMirrorSystem system, ClassElement _class)
|
| + Dart2JsInterfaceMirror(Dart2JsMirrorSystem system, ClassElement _class)
|
| : this._library = system.getLibrary(_class.getLibrary()),
|
| super(system, _class);
|
|
|
| ClassElement get _class() => _element;
|
|
|
|
|
| - Dart2jsInterfaceMirror.fromLibrary(Dart2jsLibraryMirror library,
|
| + Dart2JsInterfaceMirror.fromLibrary(Dart2JsLibraryMirror library,
|
| ClassElement _class)
|
| : this._library = library,
|
| super(library.system, _class);
|
| @@ -490,7 +622,7 @@ class Dart2jsInterfaceMirror extends Dart2jsObjectMirror
|
| if (node !== null) {
|
| var script = _class.getCompilationUnit().script;
|
| var span = system.compiler.spanFromNode(node, script.uri);
|
| - return new Dart2jsLocation(script, span);
|
| + return new Dart2JsLocation(script, span);
|
| }
|
| }
|
| return super.location();
|
| @@ -498,7 +630,7 @@ class Dart2jsInterfaceMirror extends Dart2jsObjectMirror
|
|
|
| void _ensureMembers() {
|
| if (_members == null) {
|
| - _members = <Dart2jsMemberMirror>{};
|
| + _members = <Dart2JsMemberMirror>{};
|
| _class.constructors.forEach((_, e) {
|
| for (var member in _convertElementMemberToMemberMirrors(this, e)) {
|
| _members[member.canonicalName] = member;
|
| @@ -537,7 +669,7 @@ class Dart2jsInterfaceMirror extends Dart2jsObjectMirror
|
|
|
| InterfaceMirror superclass() {
|
| if (_class.supertype != null) {
|
| - return new Dart2jsInterfaceTypeMirror(system, _class.supertype);
|
| + return new Dart2JsInterfaceTypeMirror(system, _class.supertype);
|
| }
|
| return null;
|
| }
|
| @@ -572,7 +704,7 @@ class Dart2jsInterfaceMirror extends Dart2jsObjectMirror
|
| _typeVariables = <TypeVariableMirror>[];
|
| _class.typeParameters.forEach((_,parameter) {
|
| _typeVariables.add(
|
| - new Dart2jsTypeVariableMirror(system,
|
| + new Dart2JsTypeVariableMirror(system,
|
| parameter.computeType(system.compiler)));
|
| });
|
| }
|
| @@ -590,7 +722,7 @@ class Dart2jsInterfaceMirror extends Dart2jsObjectMirror
|
| */
|
| InterfaceMirror defaultType() {
|
| if (_class.defaultClass != null) {
|
| - return new Dart2jsInterfaceTypeMirror(system, _class.defaultClass);
|
| + return new Dart2JsInterfaceTypeMirror(system, _class.defaultClass);
|
| }
|
| return null;
|
| }
|
| @@ -612,17 +744,17 @@ class Dart2jsInterfaceMirror extends Dart2jsObjectMirror
|
| }
|
| }
|
|
|
| -class Dart2jsTypedefMirror extends Dart2jsElementMirror
|
| - implements Dart2jsTypeMirror, TypedefMirror {
|
| - final Dart2jsLibraryMirror _library;
|
| +class Dart2JsTypedefMirror extends Dart2JsElementMirror
|
| + implements Dart2JsTypeMirror, TypedefMirror {
|
| + final Dart2JsLibraryMirror _library;
|
| List<TypeVariableMirror> _typeVariables;
|
| TypeMirror _definition;
|
|
|
| - Dart2jsTypedefMirror(Dart2jsMirrorSystem system, TypedefElement _typedef)
|
| + Dart2JsTypedefMirror(Dart2JsMirrorSystem system, TypedefElement _typedef)
|
| : this._library = system.getLibrary(_typedef.getLibrary()),
|
| super(system, _typedef);
|
|
|
| - Dart2jsTypedefMirror.fromLibrary(Dart2jsLibraryMirror library,
|
| + Dart2JsTypedefMirror.fromLibrary(Dart2JsLibraryMirror library,
|
| TypedefElement _typedef)
|
| : this._library = library,
|
| super(library.system, _typedef);
|
| @@ -638,7 +770,7 @@ class Dart2jsTypedefMirror extends Dart2jsElementMirror
|
| if (node !== null) {
|
| var script = _typedef.getCompilationUnit().script;
|
| var span = system.compiler.spanFromNode(node, script.uri);
|
| - return new Dart2jsLocation(script, span);
|
| + return new Dart2JsLocation(script, span);
|
| }
|
| return super.location();
|
| }
|
| @@ -701,12 +833,12 @@ class Dart2jsTypedefMirror extends Dart2jsElementMirror
|
| InterfaceMirror defaultType() => null;
|
| }
|
|
|
| -class Dart2jsTypeVariableMirror extends Dart2jsTypeElementMirror
|
| +class Dart2JsTypeVariableMirror extends Dart2JsTypeElementMirror
|
| implements TypeVariableMirror {
|
| final TypeVariableType _typeVariableType;
|
| InterfaceMirror _declarer;
|
|
|
| - Dart2jsTypeVariableMirror(Dart2jsMirrorSystem system,
|
| + Dart2JsTypeVariableMirror(Dart2JsMirrorSystem system,
|
| TypeVariableType typeVariableType)
|
| : this._typeVariableType = typeVariableType,
|
| super(system, typeVariableType) {
|
| @@ -719,10 +851,10 @@ class Dart2jsTypeVariableMirror extends Dart2jsTypeElementMirror
|
| InterfaceMirror declarer() {
|
| if (_declarer === null) {
|
| if (_typeVariableType.element.enclosingElement.isClass()) {
|
| - _declarer = new Dart2jsInterfaceMirror(system,
|
| + _declarer = new Dart2JsInterfaceMirror(system,
|
| _typeVariableType.element.enclosingElement);
|
| } else if (_typeVariableType.element.enclosingElement.isTypedef()) {
|
| - _declarer = new Dart2jsTypedefMirror(system,
|
| + _declarer = new Dart2JsTypedefMirror(system,
|
| _typeVariableType.element.enclosingElement);
|
| }
|
| }
|
| @@ -767,11 +899,11 @@ class Dart2jsTypeVariableMirror extends Dart2jsTypeElementMirror
|
| // Types
|
| //------------------------------------------------------------------------------
|
|
|
| -abstract class Dart2jsTypeElementMirror extends Dart2jsProxyMirror
|
| - implements Dart2jsTypeMirror {
|
| +abstract class Dart2JsTypeElementMirror extends Dart2JsProxyMirror
|
| + implements Dart2JsTypeMirror {
|
| final Type _type;
|
|
|
| - Dart2jsTypeElementMirror(Dart2jsMirrorSystem system, this._type)
|
| + Dart2JsTypeElementMirror(Dart2JsMirrorSystem system, this._type)
|
| : super(system);
|
|
|
| String simpleName() => _type.name.slowToString();
|
| @@ -780,7 +912,7 @@ abstract class Dart2jsTypeElementMirror extends Dart2jsProxyMirror
|
|
|
| Location location() {
|
| var script = _type.element.getCompilationUnit().script;
|
| - return new Dart2jsLocation(script,
|
| + return new Dart2JsLocation(script,
|
| system.compiler.spanFromElement(_type.element));
|
| }
|
|
|
| @@ -791,11 +923,11 @@ abstract class Dart2jsTypeElementMirror extends Dart2jsProxyMirror
|
| String toString() => _type.element.toString();
|
| }
|
|
|
| -class Dart2jsInterfaceTypeMirror extends Dart2jsTypeElementMirror
|
| +class Dart2JsInterfaceTypeMirror extends Dart2JsTypeElementMirror
|
| implements InterfaceMirror {
|
| List<TypeMirror> _typeArguments;
|
|
|
| - Dart2jsInterfaceTypeMirror(Dart2jsMirrorSystem system,
|
| + Dart2JsInterfaceTypeMirror(Dart2JsMirrorSystem system,
|
| InterfaceType interfaceType)
|
| : super(system, interfaceType);
|
|
|
| @@ -819,7 +951,7 @@ class Dart2jsInterfaceTypeMirror extends Dart2jsTypeElementMirror
|
| bool get isFunction() => false;
|
|
|
| InterfaceMirror get declaration()
|
| - => new Dart2jsInterfaceMirror(system, _type.element);
|
| + => new Dart2JsInterfaceMirror(system, _type.element);
|
|
|
| // TODO(johnniwinther): Substitute type arguments for type variables.
|
| InterfaceMirror superclass() => declaration.superclass();
|
| @@ -881,12 +1013,12 @@ class Dart2jsInterfaceTypeMirror extends Dart2jsTypeElementMirror
|
| }
|
|
|
|
|
| -class Dart2jsFunctionTypeMirror extends Dart2jsTypeElementMirror
|
| +class Dart2JsFunctionTypeMirror extends Dart2JsTypeElementMirror
|
| implements FunctionTypeMirror {
|
| final FunctionSignature _functionSignature;
|
| List<ParameterMirror> _parameters;
|
|
|
| - Dart2jsFunctionTypeMirror(Dart2jsMirrorSystem system,
|
| + Dart2JsFunctionTypeMirror(Dart2JsMirrorSystem system,
|
| FunctionType functionType, this._functionSignature)
|
| : super(system, functionType) {
|
| assert (_functionSignature !== null);
|
| @@ -928,7 +1060,7 @@ class Dart2jsFunctionTypeMirror extends Dart2jsTypeElementMirror
|
| _functionType.element);
|
|
|
| InterfaceMirror get declaration()
|
| - => new Dart2jsInterfaceMirror(system, system.compiler.functionClass);
|
| + => new Dart2JsInterfaceMirror(system, system.compiler.functionClass);
|
|
|
| // TODO(johnniwinther): Substitute type arguments for type variables.
|
| InterfaceMirror superclass() => declaration.superclass();
|
| @@ -966,9 +1098,9 @@ class Dart2jsFunctionTypeMirror extends Dart2jsTypeElementMirror
|
| }
|
| }
|
|
|
| -class Dart2jsVoidMirror extends Dart2jsTypeElementMirror {
|
| +class Dart2JsVoidMirror extends Dart2JsTypeElementMirror {
|
|
|
| - Dart2jsVoidMirror(Dart2jsMirrorSystem system, VoidType voidType)
|
| + Dart2JsVoidMirror(Dart2JsMirrorSystem system, VoidType voidType)
|
| : super(system, voidType);
|
|
|
| VoidType get _voidType() => _type;
|
| @@ -1008,22 +1140,22 @@ class Dart2jsVoidMirror extends Dart2jsTypeElementMirror {
|
| }
|
| }
|
|
|
| -///////////////////////////////////////////////////////
|
| -// members
|
| -///////////////////////////////////////////////////////
|
| +//------------------------------------------------------------------------------
|
| +// Member mirrors implementation.
|
| +//------------------------------------------------------------------------------
|
|
|
| -class Dart2jsMethodMirror extends Dart2jsElementMirror
|
| - implements Dart2jsMemberMirror, MethodMirror {
|
| - final Dart2jsObjectMirror _objectMirror;
|
| +class Dart2JsMethodMirror extends Dart2JsElementMirror
|
| + implements Dart2JsMemberMirror, MethodMirror {
|
| + final Dart2JsObjectMirror _objectMirror;
|
| String _name;
|
| String _constructorName;
|
| String _operatorName;
|
| - Dart2jsMethodKind _kind;
|
| + Dart2JsMethodKind _kind;
|
| String _canonicalName;
|
|
|
| - Dart2jsMethodMirror(Dart2jsObjectMirror objectMirror,
|
| + Dart2JsMethodMirror(Dart2JsObjectMirror objectMirror,
|
| FunctionElement function,
|
| - [Dart2jsMethodKind kind = null])
|
| + [Dart2JsMethodKind kind = null])
|
| : this._objectMirror = objectMirror,
|
| this._kind = kind,
|
| super(objectMirror.system, function) {
|
| @@ -1042,9 +1174,9 @@ class Dart2jsMethodMirror extends Dart2jsElementMirror
|
| _canonicalName = _name;
|
| }
|
| if (_function.modifiers !== null && _function.modifiers.isConst()) {
|
| - _kind = Dart2jsMethodKind.CONST;
|
| + _kind = Dart2JsMethodKind.CONST;
|
| } else {
|
| - _kind = Dart2jsMethodKind.CONSTRUCTOR;
|
| + _kind = Dart2JsMethodKind.CONSTRUCTOR;
|
| }
|
| } else if (_function.modifiers !== null
|
| && _function.modifiers.isFactory()) {
|
| @@ -1054,23 +1186,23 @@ class Dart2jsMethodMirror extends Dart2jsElementMirror
|
| _constructorName = _name.substring(dollarPos+1);
|
| _name = _name.substring(0, dollarPos);
|
| }
|
| - _kind = Dart2jsMethodKind.FACTORY;
|
| + _kind = Dart2JsMethodKind.FACTORY;
|
| // canonical name is TypeName.constructorName
|
| _canonicalName = '$_name.$_constructorName';
|
| } else if (_name.startsWith('operator\$')) {
|
| String str = _name.substring(9);
|
| _name = 'operator';
|
| - _kind = Dart2jsMethodKind.OPERATOR;
|
| + _kind = Dart2JsMethodKind.OPERATOR;
|
| _operatorName = _getOperatorFromOperatorName(str);
|
| // canonical name is 'operator operatorName'
|
| _canonicalName = 'operator $_operatorName';
|
| } else {
|
| - _kind = Dart2jsMethodKind.NORMAL;
|
| + _kind = Dart2JsMethodKind.NORMAL;
|
| _canonicalName = _name;
|
| }
|
| - } else if (kind == Dart2jsMethodKind.GETTER) {
|
| + } else if (kind == Dart2JsMethodKind.GETTER) {
|
| _canonicalName = _name;
|
| - } else if (kind == Dart2jsMethodKind.SETTER) {
|
| + } else if (kind == Dart2JsMethodKind.SETTER) {
|
| _canonicalName = '$_name=';
|
| } else {
|
| assert(false);
|
| @@ -1091,7 +1223,7 @@ class Dart2jsMethodMirror extends Dart2jsElementMirror
|
| bool get isTopLevel() => _objectMirror is LibraryMirror;
|
|
|
| bool get isConstructor()
|
| - => _kind == Dart2jsMethodKind.CONSTRUCTOR || isConst || isFactory;
|
| + => _kind == Dart2JsMethodKind.CONSTRUCTOR || isConst || isFactory;
|
|
|
| bool get isField() => false;
|
|
|
| @@ -1111,17 +1243,17 @@ class Dart2jsMethodMirror extends Dart2jsElementMirror
|
| system, _function.computeSignature(system.compiler).returnType,
|
| system.compiler.dynamicClass.computeType(system.compiler));
|
|
|
| - bool get isConst() => _kind == Dart2jsMethodKind.CONST;
|
| + bool get isConst() => _kind == Dart2JsMethodKind.CONST;
|
|
|
| - bool get isFactory() => _kind == Dart2jsMethodKind.FACTORY;
|
| + bool get isFactory() => _kind == Dart2JsMethodKind.FACTORY;
|
|
|
| String get constructorName() => _constructorName;
|
|
|
| - bool get isGetter() => _kind == Dart2jsMethodKind.GETTER;
|
| + bool get isGetter() => _kind == Dart2JsMethodKind.GETTER;
|
|
|
| - bool get isSetter() => _kind == Dart2jsMethodKind.SETTER;
|
| + bool get isSetter() => _kind == Dart2JsMethodKind.SETTER;
|
|
|
| - bool get isOperator() => _kind == Dart2jsMethodKind.OPERATOR;
|
| + bool get isOperator() => _kind == Dart2JsMethodKind.OPERATOR;
|
|
|
| String get operatorName() => _operatorName;
|
|
|
| @@ -1130,19 +1262,19 @@ class Dart2jsMethodMirror extends Dart2jsElementMirror
|
| if (node !== null) {
|
| var script = _function.getCompilationUnit().script;
|
| var span = system.compiler.spanFromNode(node, script.uri);
|
| - return new Dart2jsLocation(script, span);
|
| + return new Dart2JsLocation(script, span);
|
| }
|
| return super.location();
|
| }
|
|
|
| }
|
|
|
| -class Dart2jsFieldMirror extends Dart2jsElementMirror
|
| - implements Dart2jsMemberMirror, FieldMirror {
|
| - Dart2jsObjectMirror _objectMirror;
|
| +class Dart2JsFieldMirror extends Dart2JsElementMirror
|
| + implements Dart2JsMemberMirror, FieldMirror {
|
| + Dart2JsObjectMirror _objectMirror;
|
| VariableElement _variable;
|
|
|
| - Dart2jsFieldMirror(Dart2jsObjectMirror objectMirror,
|
| + Dart2JsFieldMirror(Dart2JsObjectMirror objectMirror,
|
| VariableElement variable)
|
| : this._objectMirror = objectMirror,
|
| this._variable = variable,
|
| @@ -1178,10 +1310,10 @@ class Dart2jsFieldMirror extends Dart2jsElementMirror
|
| var node = _variable.variables.parseNode(_diagnosticListener);
|
| if (node !== null) {
|
| var span = system.compiler.spanFromNode(node, script.uri);
|
| - return new Dart2jsLocation(script, span);
|
| + return new Dart2JsLocation(script, span);
|
| } else {
|
| var span = system.compiler.spanFromElement(_variable);
|
| - return new Dart2jsLocation(script, span);
|
| + return new Dart2JsLocation(script, span);
|
| }
|
| }
|
| }
|
|
|