| Index: pkg/docgen/lib/src/models/indexable.dart
|
| diff --git a/pkg/docgen/lib/src/models/indexable.dart b/pkg/docgen/lib/src/models/indexable.dart
|
| deleted file mode 100644
|
| index 1c14a794a5545c93d5b989311a8b4116750570d4..0000000000000000000000000000000000000000
|
| --- a/pkg/docgen/lib/src/models/indexable.dart
|
| +++ /dev/null
|
| @@ -1,221 +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.indexable;
|
| -
|
| -import 'dart:collection';
|
| -
|
| -import 'package:markdown/markdown.dart' as markdown;
|
| -
|
| -import '../exports/mirrors_util.dart' as dart2js_util;
|
| -import '../exports/source_mirrors.dart';
|
| -
|
| -import '../library_helpers.dart';
|
| -import 'library.dart';
|
| -import 'mirror_based.dart';
|
| -import 'model_helpers.dart';
|
| -
|
| -/// An item that is categorized in our mirrorToDocgen map, as a distinct,
|
| -/// searchable element.
|
| -///
|
| -/// These are items that refer to concrete entities (a Class, for example,
|
| -/// but not a Type, which is a "pointer" to a class) that we wish to be
|
| -/// globally resolvable. This includes things such as class methods and
|
| -/// variables, but parameters for methods are not "Indexable" as we do not want
|
| -/// the user to be able to search for a method based on its parameter names!
|
| -/// The set of indexable items also includes Typedefs, since the user can refer
|
| -/// to them as concrete entities in a particular scope.
|
| -abstract class Indexable<TMirror extends DeclarationMirror>
|
| - extends MirrorBased<TMirror> {
|
| -
|
| - Library get owningLibrary => owner.owningLibrary;
|
| -
|
| - /// The reference to this element based on where it is printed as a
|
| - /// documentation file and also the unique URL to refer to this item.
|
| - ///
|
| - /// The qualified name (for URL purposes) and the file name are the same,
|
| - /// of the form packageName/ClassName or packageName/ClassName.methodName.
|
| - /// This defines both the URL and the directory structure.
|
| - String get qualifiedName => packagePrefix + ownerPrefix + name;
|
| -
|
| - /// The name of the file we write this object's data into. The same as the
|
| - /// qualified name but with leading colons (i.e. dart:)
|
| - /// replaced by hyphens because of Windows.
|
| - String get fileName => qualifiedName.replaceFirst(":", "-");
|
| -
|
| - final TMirror mirror;
|
| - final bool isPrivate;
|
| - /// The comment text pre-resolution. We keep this around because inherited
|
| - /// methods need to resolve links differently from the superclass.
|
| - String unresolvedComment = '';
|
| -
|
| - Indexable(TMirror mirror)
|
| - : this.mirror = mirror,
|
| - this.isPrivate = isHidden(mirror as DeclarationSourceMirror) {
|
| -
|
| - var mirrorQualifiedName = dart2js_util.qualifiedNameOf(this.mirror);
|
| -
|
| - var map = _mirrorToDocgen.putIfAbsent(mirrorQualifiedName,
|
| - () => new HashMap<String, Indexable>());
|
| -
|
| - var added = false;
|
| - map.putIfAbsent(owner.docName, () {
|
| - added = true;
|
| - return this;
|
| - });
|
| -
|
| - if (!added) {
|
| - throw new StateError('An indexable has already been stored for '
|
| - '${owner.docName}');
|
| - }
|
| - }
|
| -
|
| - /// Returns this object's qualified name, but following the conventions
|
| - /// we're using in Dartdoc, which is that library names with dots in them
|
| - /// have them replaced with hyphens.
|
| - String get docName;
|
| -
|
| - /// Converts all [foo] references in comments to <a>libraryName.foo</a>.
|
| - markdown.Node fixReference(String name) {
|
| - // Attempt the look up the whole name up in the scope.
|
| - String elementName = findElementInScope(name);
|
| - if (elementName != null) {
|
| - return new markdown.Element.text('a', elementName);
|
| - }
|
| - return fixComplexReference(name);
|
| - }
|
| -
|
| - /// Look for the specified name starting with the current member, and
|
| - /// progressively working outward to the current library scope.
|
| - String findElementInScope(String name) =>
|
| - findElementInScopeWithPrefix(name, packagePrefix);
|
| -
|
| - /// The full docName of the owner element, appended with a '.' for this
|
| - /// object's name to be appended.
|
| - String get ownerPrefix => owner.docName != '' ? owner.docName + '.' : '';
|
| -
|
| - /// The prefix String to refer to the package that this item is in, for URLs
|
| - /// and comment resolution.
|
| - ///
|
| - /// The prefix can be prepended to a qualified name to get a fully unique
|
| - /// name among all packages.
|
| - String get packagePrefix;
|
| -
|
| - /// Documentation comment with converted markdown and all links resolved.
|
| - String commentField;
|
| -
|
| - /// Accessor to documentation comment with markdown converted to html and all
|
| - /// links resolved.
|
| - String get comment {
|
| - if (commentField != null) return commentField;
|
| -
|
| - commentField = commentToHtml();
|
| - if (commentField.isEmpty) {
|
| - commentField = getMdnComment();
|
| - }
|
| - return commentField;
|
| - }
|
| -
|
| - void set comment(x) {
|
| - commentField = x;
|
| - }
|
| -
|
| - /// The simple name to refer to this item.
|
| - String get name => dart2js_util.nameOf(mirror);
|
| -
|
| - /// Accessor to the parent item that owns this item.
|
| - ///
|
| - /// "Owning" is defined as the object one scope-level above which this item
|
| - /// is defined. Ex: The owner for a top level class, would be its enclosing
|
| - /// library. The owner of a local variable in a method would be the enclosing
|
| - /// method.
|
| - Indexable get owner;
|
| -
|
| - /// Generates MDN comments from database.json.
|
| - String getMdnComment();
|
| -
|
| - /// The type of this member to be used in index.txt.
|
| - String get typeName;
|
| -
|
| - /// Creates a [Map] with this [Indexable]'s name and a preview comment.
|
| - Map get previewMap {
|
| - var finalMap = { 'name' : name, 'qualifiedName' : qualifiedName };
|
| - var pre = preview;
|
| - if (pre != null) finalMap['preview'] = pre;
|
| - return finalMap;
|
| - }
|
| -
|
| - String get preview {
|
| - if (comment != '') {
|
| - var index = comment.indexOf('</p>');
|
| - return index > 0 ?
|
| - '${comment.substring(0, index)}</p>' :
|
| - '<p><i>Comment preview not available</i></p>';
|
| - }
|
| - return null;
|
| - }
|
| -
|
| - /// Accessor to obtain the raw comment text for a given item, _without_ any
|
| - /// of the links resolved.
|
| - String get _commentText {
|
| - String commentText;
|
| - mirror.metadata.forEach((metadata) {
|
| - if (metadata is CommentInstanceMirror) {
|
| - CommentInstanceMirror comment = metadata;
|
| - if (comment.isDocComment) {
|
| - if (commentText == null) {
|
| - commentText = comment.trimmedText;
|
| - } else {
|
| - commentText = '$commentText\n${comment.trimmedText}';
|
| - }
|
| - }
|
| - }
|
| - });
|
| - return commentText;
|
| - }
|
| -
|
| - /// Returns any documentation comments associated with a mirror with
|
| - /// simple markdown converted to html.
|
| - ///
|
| - /// By default we resolve any comment references within our own scope.
|
| - /// However, if a method is inherited, we want the inherited comments, but
|
| - /// links to the subclasses's version of the methods.
|
| - String commentToHtml([Indexable resolvingScope]) {
|
| - if (resolvingScope == null) resolvingScope = this;
|
| - var commentText = _commentText;
|
| - unresolvedComment = commentText;
|
| -
|
| - commentText = commentText == null ? '' :
|
| - markdown.markdownToHtml(commentText.trim(),
|
| - linkResolver: resolvingScope.fixReference,
|
| - inlineSyntaxes: MARKDOWN_SYNTAXES);
|
| - return commentText;
|
| - }
|
| -
|
| - /// Return a map representation of this type.
|
| - Map toMap();
|
| -
|
| - /// Accessor to determine if this item and all of its owners are visible.
|
| - bool get isVisible => isFullChainVisible(this);
|
| -
|
| - /// Returns true if [mirror] is the correct type of mirror that this Docgen
|
| - /// object wraps. (Workaround for the fact that Types are not first class.)
|
| - bool isValidMirror(DeclarationMirror mirror);
|
| -}
|
| -
|
| -/// Index of all the dart2js mirrors examined to corresponding MirrorBased
|
| -/// docgen objects.
|
| -///
|
| -/// Used for lookup because of the dart2js mirrors exports
|
| -/// issue. The second level map is indexed by owner docName for faster lookup.
|
| -/// Why two levels of lookup? Speed, man. Speed.
|
| -final Map<String, Map<String, Indexable>> _mirrorToDocgen =
|
| - new HashMap<String, Map<String, Indexable>>();
|
| -
|
| -Iterable<Indexable> get allIndexables =>
|
| - _mirrorToDocgen.values.expand((map) => map.values);
|
| -
|
| -Map<String, Indexable> lookupIndexableMap(DeclarationMirror mirror) {
|
| - return _mirrorToDocgen[dart2js_util.qualifiedNameOf(mirror)];
|
| -}
|
|
|