Index: pkg/docgen/lib/src/models/model_helpers.dart |
diff --git a/pkg/docgen/lib/src/models/model_helpers.dart b/pkg/docgen/lib/src/models/model_helpers.dart |
deleted file mode 100644 |
index 0aa8c9f56681f09075658502c23df3496f04552f..0000000000000000000000000000000000000000 |
--- a/pkg/docgen/lib/src/models/model_helpers.dart |
+++ /dev/null |
@@ -1,443 +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.model_helpers; |
- |
-import 'dart:collection'; |
- |
-import 'package:compiler/src/constants/expressions.dart'; |
- |
-import '../exports/dart2js_mirrors.dart' as dart2js_mirrors; |
-import '../exports/mirrors_util.dart' as dart2js_util; |
-import '../exports/source_mirrors.dart'; |
-import '../exports/libraries.dart'; |
- |
-import '../library_helpers.dart' show includePrivateMembers; |
-import '../package_helpers.dart'; |
- |
-import 'annotation.dart'; |
-import 'generic.dart'; |
-import 'indexable.dart'; |
-import 'library.dart'; |
-import 'method.dart'; |
-import 'parameter.dart'; |
-import 'variable.dart'; |
- |
-String getLibraryDocName(LibraryMirror mirror) { |
- var dotsFixed = dart2js_util.qualifiedNameOf(mirror).replaceAll('.', '-'); |
- if (dotsFixed.startsWith('dart-dom-')) { |
- return dotsFixed.replaceFirst("dart-dom-", "dart:"); |
- } else if (dotsFixed.startsWith("dart-")) { |
- return dotsFixed.replaceFirst("dart-", "dart:"); |
- } else { |
- return dotsFixed; |
- } |
-} |
- |
-/// Expand the method map [mapToExpand] into a more detailed map that |
-/// separates out setters, getters, constructors, operators, and methods. |
-Map expandMethodMap(Map<String, Method> mapToExpand) => { |
- 'setters': recurseMap(_filterMap(mapToExpand, |
- (key, val) => val.mirror.isSetter)), |
- 'getters': recurseMap(_filterMap(mapToExpand, |
- (key, val) => val.mirror.isGetter)), |
- 'constructors': recurseMap(_filterMap(mapToExpand, |
- (key, val) => val.mirror.isConstructor)), |
- 'operators': recurseMap(_filterMap(mapToExpand, |
- (key, val) => val.mirror.isOperator)), |
- 'methods': recurseMap(_filterMap(mapToExpand, |
- (key, val) => val.mirror.isRegularMethod && !val.mirror.isOperator)) |
-}; |
- |
-String getDefaultValue(ParameterMirror mirror) { |
- if (!mirror.hasDefaultValue) return null; |
- return '${mirror.defaultValue}'; |
-} |
- |
-/// Returns a list of meta annotations assocated with a mirror. |
-List<Annotation> createAnnotations(DeclarationMirror mirror, |
- Library owningLibrary) { |
- var annotations = []; |
- var info = new AnnotationInfo(mirror, owningLibrary); |
- for (var expr in dart2js_mirrors.BackDoor.metadataSyntaxOf(mirror)) { |
- var docgenAnnotation = expr.accept(const AnnotationCreator(), info); |
- if (docgenAnnotation != null && |
- !_SKIPPED_ANNOTATIONS.contains( |
- dart2js_util.qualifiedNameOf(docgenAnnotation.mirror))) { |
- annotations.add(docgenAnnotation); |
- } |
- } |
- return annotations; |
-} |
- |
-class AnnotationInfo { |
- final Mirror mirror; |
- final Library owningLibrary; |
- |
- AnnotationInfo(this.mirror, this.owningLibrary); |
-} |
- |
-class AnnotationCreator |
- extends ConstantExpressionVisitor<Annotation, AnnotationInfo> { |
- |
- const AnnotationCreator(); |
- |
- Annotation createAnnotation(var element, |
- AnnotationInfo context, |
- [List<String> parameters = const <String>[]]) { |
- var mirror = |
- dart2js_mirrors.BackDoor.getMirrorFromElement(context.mirror, element); |
- if (mirror != null) { |
- return new Annotation(context.owningLibrary, mirror, parameters); |
- } |
- return null; |
- } |
- |
- @override |
- Annotation visitBinary(BinaryConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitIdentical(IdenticalConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitConcatenate(ConcatenateConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitConditional(ConditionalConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitConstructed(ConstructedConstantExpression exp, |
- AnnotationInfo context) { |
- return createAnnotation(exp.target, context, |
- exp.arguments.map((a) => a.getText()).toList()); |
- } |
- |
- @override |
- Annotation visitFunction(FunctionConstantExpression exp, |
- AnnotationInfo context) { |
- return createAnnotation(exp.element, context); |
- } |
- |
- @override |
- Annotation visitList(ListConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitMap(MapConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitSymbol(SymbolConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitType(TypeConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitUnary(UnaryConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitVariable(VariableConstantExpression exp, |
- AnnotationInfo context) { |
- return createAnnotation(exp.element, context); |
- } |
- |
- @override |
- Annotation visitBool(BoolConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitBoolFromEnvironment(BoolFromEnvironmentConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitDouble(DoubleConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitInt(IntConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitIntFromEnvironment(IntFromEnvironmentConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitNamed(NamedArgumentReference exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitNull(NullConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitPositional(PositionalArgumentReference exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitString(StringConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitStringFromEnvironment( |
- StringFromEnvironmentConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitStringLength(StringLengthConstantExpression exp, |
- AnnotationInfo context) { |
- return null; |
- } |
- |
- @override |
- Annotation visitDeferred(DeferredConstantExpression exp, |
- AnnotationInfo context) { |
- return exp.expression.accept(this, context); |
- } |
-} |
- |
-/// A declaration is private if itself is private, or the owner is private. |
-bool isHidden(DeclarationSourceMirror mirror) { |
- if (mirror is LibraryMirror) { |
- return _isLibraryPrivate(mirror); |
- } else if (mirror.owner is LibraryMirror) { |
- return (mirror.isPrivate || _isLibraryPrivate(mirror.owner) || |
- mirror.isNameSynthetic); |
- } else { |
- return (mirror.isPrivate || isHidden(mirror.owner) || |
- mirror.isNameSynthetic); |
- } |
-} |
- |
-/// Transforms the map by calling toMap on each value in it. |
-Map recurseMap(Map inputMap) { |
- var outputMap = new LinkedHashMap(); |
- inputMap.forEach((key, value) { |
- if (value is Map) { |
- outputMap[key] = recurseMap(value); |
- } else { |
- outputMap[key] = value.toMap(); |
- } |
- }); |
- return outputMap; |
-} |
- |
-/// Read a pubspec and return the library name given a [LibraryMirror]. |
-String getPackageName(LibraryMirror mirror) { |
- if (mirror.uri.scheme != 'file') return ''; |
- var rootdir = getPackageDirectory(mirror); |
- if (rootdir == null) return ''; |
- return packageNameFor(rootdir); |
-} |
- |
- |
-/// Helper that maps [mirrors] to their simple name in map. |
-Map addAll(Map map, Iterable<DeclarationMirror> mirrors) { |
- for (var mirror in mirrors) { |
- map[dart2js_util.nameOf(mirror)] = mirror; |
- } |
- return map; |
-} |
- |
-/// For the given library determine what items (if any) are exported. |
-/// |
-/// Returns a Map with three keys: "classes", "methods", and "variables" the |
-/// values of which point to a map of exported name identifiers with values |
-/// corresponding to the actual DeclarationMirror. |
-Map<String, Map<String, DeclarationMirror>> calcExportedItems( |
- LibrarySourceMirror library, Map visited) { |
- var exports = {}; |
- visited[library] = exports; |
- exports['classes'] = new SplayTreeMap(); |
- exports['methods'] = new SplayTreeMap(); |
- exports['variables'] = new SplayTreeMap(); |
- |
- // Determine the classes, variables and methods that are exported for a |
- // specific dependency. |
- void _populateExports(LibraryDependencyMirror export, bool showExport) { |
- if (visited[export.targetLibrary] != null) return; |
- var transitiveExports = calcExportedItems(export.targetLibrary, visited); |
- exports['classes'].addAll(transitiveExports['classes']); |
- exports['methods'].addAll(transitiveExports['methods']); |
- exports['variables'].addAll(transitiveExports['variables']); |
- // If there is a show in the export, add only the show items to the |
- // library. Ex: "export foo show bar" |
- // Otherwise, add all items, and then remove the hidden ones. |
- // Ex: "export foo hide bar" |
- |
- if (!showExport) { |
- // Add all items, and then remove the hidden ones. |
- // Ex: "export foo hide bar" |
- addAll(exports['classes'], |
- dart2js_util.typesOf(export.targetLibrary.declarations)); |
- addAll(exports['methods'], |
- export.targetLibrary.declarations.values.where( |
- (mirror) => mirror is MethodMirror)); |
- addAll(exports['variables'], |
- dart2js_util.variablesOf(export.targetLibrary.declarations)); |
- } |
- for (CombinatorMirror combinator in export.combinators) { |
- for (String identifier in combinator.identifiers) { |
- var librarySourceMirror = |
- export.targetLibrary as DeclarationSourceMirror; |
- var declaration = librarySourceMirror.lookupInScope(identifier); |
- if (declaration == null) { |
- // Technically this should be a bug, but some of our packages |
- // (such as the polymer package) are curently broken in this |
- // way, so we just produce a warning. |
- print('Warning identifier $identifier not found in library ' |
- '${dart2js_util.qualifiedNameOf(export.targetLibrary)}'); |
- } else { |
- var subMap = exports['classes']; |
- if (declaration is MethodMirror) { |
- subMap = exports['methods']; |
- } else if (declaration is VariableMirror) { |
- subMap = exports['variables']; |
- } |
- if (showExport) { |
- subMap[identifier] = declaration; |
- } else { |
- subMap.remove(identifier); |
- } |
- } |
- } |
- } |
- } |
- |
- Iterable<LibraryDependencyMirror> exportList = |
- library.libraryDependencies.where((lib) => lib.isExport); |
- for (LibraryDependencyMirror export in exportList) { |
- _populateExports(export, |
- export.combinators.any((combinator) => combinator.isShow)); |
- } |
- return exports; |
-} |
- |
- |
-/// Returns a map of [Variable] objects constructed from [mirrorMap]. |
-/// The optional parameter [containingLibrary] is contains data for variables |
-/// defined at the top level of a library (potentially for exporting |
-/// purposes). |
-Map<String, Variable> createVariables(Iterable<VariableMirror> mirrors, |
- Indexable owner) { |
- var data = new SplayTreeMap<String, Variable>(); |
- // TODO(janicejl): When map to map feature is created, replace the below |
- // with a filter. Issue(#9590). |
- mirrors.forEach((dart2js_mirrors.Dart2JsFieldMirror mirror) { |
- if (includePrivateMembers || !isHidden(mirror)) { |
- var mirrorName = dart2js_util.nameOf(mirror); |
- data[mirrorName] = new Variable(mirrorName, mirror, owner); |
- } |
- }); |
- return data; |
-} |
- |
-/// Returns a map of [Method] objects constructed from [mirrorMap]. |
-/// The optional parameter [containingLibrary] is contains data for variables |
-/// defined at the top level of a library (potentially for exporting |
-/// purposes). |
-Map<String, Method> createMethods(Iterable<MethodMirror> mirrors, |
- Indexable owner) { |
- var group = new SplayTreeMap<String, Method>(); |
- mirrors.forEach((MethodMirror mirror) { |
- if (includePrivateMembers || !mirror.isPrivate) { |
- group[dart2js_util.nameOf(mirror)] = new Method(mirror, owner); |
- } |
- }); |
- return group; |
-} |
- |
-/// Returns a map of [Parameter] objects constructed from [mirrorList]. |
-Map<String, Parameter> createParameters(List<ParameterMirror> mirrorList, |
- Indexable owner) { |
- var data = {}; |
- mirrorList.forEach((ParameterMirror mirror) { |
- data[dart2js_util.nameOf(mirror)] = |
- new Parameter(mirror, owner.owningLibrary); |
- }); |
- return data; |
-} |
- |
-/// Returns a map of [Generic] objects constructed from the class mirror. |
-Map<String, Generic> createGenerics(TypeMirror mirror) { |
- return new Map.fromIterable(mirror.typeVariables, |
- key: (e) => dart2js_util.nameOf(e), |
- value: (e) => new Generic(e)); |
-} |
- |
-Map _filterMap(Map map, bool test(k, v)) { |
- var exported = new SplayTreeMap(); |
- map.forEach((key, value) { |
- if (test(key, value)) exported[key] = value; |
- }); |
- return exported; |
-} |
- |
-/// Annotations that we do not display in the viewer. |
-const List<String> _SKIPPED_ANNOTATIONS = const [ |
- 'metadata.DocsEditable', '_js_helper.JSName', '_js_helper.Creates', |
- '_js_helper.Returns' |
-]; |
- |
-/// Returns true if a library name starts with an underscore, and false |
-/// otherwise. |
-/// |
-/// An example that starts with _ is _js_helper. |
-/// An example that contains ._ is dart._collection.dev |
-bool _isLibraryPrivate(dart2js_mirrors.Dart2JsLibraryMirror mirror) { |
- // This method is needed because LibraryMirror.isPrivate returns `false` all |
- // the time. |
- var sdkLibrary = LIBRARIES[dart2js_util.nameOf(mirror)]; |
- if (sdkLibrary != null) { |
- return !sdkLibrary.documented; |
- } else if (dart2js_util.nameOf(mirror).startsWith('_') || dart2js_util.nameOf( |
- mirror).contains('._')) { |
- return true; |
- } |
- return false; |
-} |