| Index: pkg/docgen/lib/src/models/class.dart
|
| diff --git a/pkg/docgen/lib/src/models/class.dart b/pkg/docgen/lib/src/models/class.dart
|
| deleted file mode 100644
|
| index f323eb57a34baad9e9b07e5a429b90e5a3f95a76..0000000000000000000000000000000000000000
|
| --- a/pkg/docgen/lib/src/models/class.dart
|
| +++ /dev/null
|
| @@ -1,245 +0,0 @@
|
| -// Copyright (c) 2014, 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 docgen.models.clazz;
|
| -
|
| -import '../exports/dart2js_mirrors.dart' as dart2js_mirrors;
|
| -import '../exports/mirrors_util.dart' as dart2js_util;
|
| -import '../exports/source_mirrors.dart';
|
| -
|
| -import '../library_helpers.dart';
|
| -
|
| -import 'dummy_mirror.dart';
|
| -import 'generic.dart';
|
| -import 'library.dart';
|
| -import 'method.dart';
|
| -import 'model_helpers.dart';
|
| -import 'owned_indexable.dart';
|
| -import 'variable.dart';
|
| -
|
| -/// A class containing contents of a Dart class.
|
| -class Class extends OwnedIndexable<dart2js_mirrors.Dart2JsInterfaceTypeMirror>
|
| - implements Comparable<Class> {
|
| -
|
| - /// List of the names of interfaces that this class implements.
|
| - List<Class> interfaces = [];
|
| -
|
| - /// Names of classes that extends or implements this class.
|
| - Set<Class> subclasses = new Set<Class>();
|
| -
|
| - /// Top-level variables in the class.
|
| - Map<String, Variable> variables;
|
| -
|
| - /// Inherited variables in the class.
|
| - final Map<String, Variable> inheritedVariables = {};
|
| -
|
| - /// Methods in the class.
|
| - Map<String, Method> methods;
|
| -
|
| - final Map<String, Method> inheritedMethods = new Map<String, Method>();
|
| -
|
| - /// Generic infomation about the class.
|
| - final Map<String, Generic> generics;
|
| -
|
| - Class _superclass;
|
| - bool get isAbstract => mirror.isAbstract;
|
| -
|
| - /// Make sure that we don't check for inherited comments more than once.
|
| - bool _commentsEnsured = false;
|
| -
|
| - /// Returns the [Class] for the given [mirror] if it has already been created,
|
| - /// else creates it.
|
| - factory Class(ClassMirror mirror, Library owner) {
|
| - var clazz = getDocgenObject(mirror, owner);
|
| - if (clazz is DummyMirror) {
|
| - clazz = new Class._(mirror, owner);
|
| - }
|
| - return clazz;
|
| - }
|
| -
|
| - /// Called when we are constructing a superclass or interface class, but it
|
| - /// is not known if it belongs to the same owner as the original class. In
|
| - /// this case, we create an object whose owner is what the original mirror
|
| - /// says it is.
|
| - factory Class._possiblyDifferentOwner(ClassMirror mirror,
|
| - Library originalOwner) {
|
| - var realOwner = getDocgenObject(mirror.owner);
|
| - if (realOwner is Library) {
|
| - return new Class(mirror, realOwner);
|
| - } else {
|
| - return new Class(mirror, originalOwner);
|
| - }
|
| - }
|
| -
|
| - Class._(ClassSourceMirror classMirror, Library owner)
|
| - : generics = createGenerics(classMirror),
|
| - super(classMirror, owner) {
|
| -
|
| - // The reason we do this madness is the superclass and interface owners may
|
| - // not be this class's owner!! Example: BaseClient in http pkg.
|
| - var superinterfaces = classMirror.superinterfaces.map(
|
| - (interface) => new Class._possiblyDifferentOwner(interface, owner));
|
| - this._superclass = classMirror.superclass == null? null :
|
| - new Class._possiblyDifferentOwner(classMirror.superclass, owner);
|
| -
|
| - interfaces = superinterfaces.toList();
|
| - variables = createVariables(
|
| - dart2js_util.variablesOf(classMirror.declarations), this);
|
| - methods = createMethods(dart2js_util.anyMethodOf(classMirror.declarations),
|
| - this);
|
| -
|
| - // Tell superclass that you are a subclass, unless you are not
|
| - // visible or an intermediary mixin class.
|
| - if (!classMirror.isNameSynthetic && isVisible && _superclass != null) {
|
| - _superclass.addSubclass(this);
|
| - }
|
| -
|
| - if (this._superclass != null) addInherited(_superclass);
|
| - interfaces.forEach((interface) => addInherited(interface));
|
| - }
|
| -
|
| - String _lookupInClassAndSuperclasses(String name) {
|
| - var lookupFunc = determineLookupFunc(name);
|
| - var classScope = this;
|
| - while (classScope != null) {
|
| - var classFunc = lookupFunc(classScope.mirror, name);
|
| - if (classFunc != null) {
|
| - return packagePrefix + getDocgenObject(classFunc, owner).docName;
|
| - }
|
| - classScope = classScope._superclass;
|
| - }
|
| - return null;
|
| - }
|
| -
|
| - /// Look for the specified name starting with the current member, and
|
| - /// progressively working outward to the current library scope.
|
| - String findElementInScope(String name) {
|
| - var lookupFunc = determineLookupFunc(name);
|
| - var result = _lookupInClassAndSuperclasses(name);
|
| - if (result != null) {
|
| - return result;
|
| - }
|
| - result = owner.findElementInScope(name);
|
| - return result == null ? super.findElementInScope(name) : result;
|
| - }
|
| -
|
| - String get typeName => 'class';
|
| -
|
| - /// Add all inherited variables and methods from the provided superclass.
|
| - /// If [_includePrivate] is true, it also adds the variables and methods from
|
| - /// the superclass.
|
| - void addInherited(Class superclass) {
|
| - inheritedVariables.addAll(superclass.inheritedVariables);
|
| - inheritedVariables.addAll(_allButStatics(superclass.variables));
|
| - addInheritedMethod(superclass, this);
|
| - }
|
| -
|
| - /** [newParent] refers to the actual class is currently using these methods.
|
| - * which may be different because with the mirror system, we only point to the
|
| - * original canonical superclasse's method.
|
| - */
|
| - void addInheritedMethod(Class parent, Class newParent) {
|
| - parent.inheritedMethods.forEach((name, method) {
|
| - if (!method.mirror.isConstructor) {
|
| - inheritedMethods[name] = new Method(method.mirror, newParent, method);
|
| - }
|
| - });
|
| - _allButStatics(parent.methods).forEach((name, method) {
|
| - if (!method.mirror.isConstructor) {
|
| - inheritedMethods[name] = new Method(method.mirror, newParent, method);
|
| - }
|
| - });
|
| - }
|
| -
|
| - /// Remove statics from the map of inherited items before adding them.
|
| - Map _allButStatics(Map items) {
|
| - var result = {};
|
| - items.forEach((name, item) {
|
| - if (!item.isStatic) {
|
| - result[name] = item;
|
| - }
|
| - });
|
| - return result;
|
| - }
|
| -
|
| - /// Add the subclass to the class.
|
| - ///
|
| - /// If [this] is private (or an intermediary mixin class), it will add the
|
| - /// subclass to the list of subclasses in the superclasses.
|
| - void addSubclass(Class subclass) {
|
| - if (docName == 'dart:core.Object') return;
|
| -
|
| - if (!includePrivateMembers && isPrivate || mirror.isNameSynthetic) {
|
| - if (_superclass != null) _superclass.addSubclass(subclass);
|
| - interfaces.forEach((interface) {
|
| - interface.addSubclass(subclass);
|
| - });
|
| - } else {
|
| - subclasses.add(subclass);
|
| - }
|
| - }
|
| -
|
| - /// Check if this [Class] is an error or exception.
|
| - bool isError() {
|
| - if (qualifiedName == 'dart:core.Error' ||
|
| - qualifiedName == 'dart:core.Exception')
|
| - return true;
|
| - for (var interface in interfaces) {
|
| - if (interface.isError()) return true;
|
| - }
|
| - if (_superclass == null) return false;
|
| - return _superclass.isError();
|
| - }
|
| -
|
| - /// Makes sure that all methods with inherited equivalents have comments.
|
| - void ensureComments() {
|
| - if (_commentsEnsured) return;
|
| - _commentsEnsured = true;
|
| - if (_superclass != null) _superclass.ensureComments();
|
| - inheritedMethods.forEach((qualifiedName, inheritedMethod) {
|
| - var method = methods[qualifiedName];
|
| - if (method != null) {
|
| - // if we have overwritten this method in this class, we still provide
|
| - // the opportunity to inherit the comments.
|
| - method.ensureCommentFor(inheritedMethod);
|
| - }
|
| - });
|
| - // we need to populate the comments for all methods. so that the subclasses
|
| - // can get for their inherited versions the comments.
|
| - methods.forEach((qualifiedName, method) {
|
| - if (!method.mirror.isConstructor) method.ensureCommentFor(method);
|
| - });
|
| - }
|
| -
|
| - /// If a class extends a private superclass, find the closest public
|
| - /// superclass of the private superclass.
|
| - String validSuperclass() {
|
| - if (_superclass == null) return 'dart:core.Object';
|
| - if (_superclass.isVisible) return _superclass.qualifiedName;
|
| - return _superclass.validSuperclass();
|
| - }
|
| -
|
| - /// Generates a map describing the [Class] object.
|
| - Map toMap() => {
|
| - 'name': name,
|
| - 'qualifiedName': qualifiedName,
|
| - 'comment': comment,
|
| - 'isAbstract' : isAbstract,
|
| - 'superclass': validSuperclass(),
|
| - 'implements': interfaces.where((i) => i.isVisible)
|
| - .map((e) => e.qualifiedName).toList(),
|
| - 'subclass': (subclasses.toList()..sort())
|
| - .map((x) => x.qualifiedName).toList(),
|
| - 'variables': recurseMap(variables),
|
| - 'inheritedVariables': recurseMap(inheritedVariables),
|
| - 'methods': expandMethodMap(methods),
|
| - 'inheritedMethods': expandMethodMap(inheritedMethods),
|
| - 'annotations': annotations.map((a) => a.toMap()).toList(),
|
| - 'generics': recurseMap(generics)
|
| - };
|
| -
|
| - int compareTo(Class other) => name.compareTo(other.name);
|
| -
|
| - bool isValidMirror(DeclarationMirror mirror) => mirror is ClassMirror;
|
| -}
|
|
|