Chromium Code Reviews| Index: pkg/docgen/lib/docgen.dart |
| diff --git a/pkg/docgen/lib/docgen.dart b/pkg/docgen/lib/docgen.dart |
| index d86bf7131529f4df4f7ac38adb39b8788418a4b0..ba3c6f172ad1c2d0ad8505f06cd6e935ef2c8b8f 100644 |
| --- a/pkg/docgen/lib/docgen.dart |
| +++ b/pkg/docgen/lib/docgen.dart |
| @@ -17,6 +17,7 @@ import 'dart:convert'; |
| import 'dart:io'; |
| import 'dart:async'; |
| + |
| import 'package:logging/logging.dart'; |
| import 'package:markdown/markdown.dart' as markdown; |
| import 'package:path/path.dart' as path; |
| @@ -26,9 +27,11 @@ import 'dart2yaml.dart'; |
| import 'src/io.dart'; |
| import '../../../sdk/lib/_internal/compiler/compiler.dart' as api; |
| import '../../../sdk/lib/_internal/compiler/implementation/filenames.dart'; |
| -import '../../../sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart' |
| +import '../../../sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart' |
| + as dart2js; |
| +import '../../../sdk/lib/_internal/compiler/implementation/mirrors/analyze.dart' |
| as dart2js; |
| -import '../../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart'; |
| +import '../../../sdk/lib/_internal/compiler/implementation/mirrors/source_mirrors.dart'; |
| import '../../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart' |
| as dart2js_util; |
| import '../../../sdk/lib/_internal/compiler/implementation/source_file_provider.dart'; |
| @@ -58,7 +61,7 @@ LibraryMirror _currentLibrary; |
| ClassMirror _currentClass; |
| /// Current member being documented to be used for comment links. |
| -MemberMirror _currentMember; |
| +DeclarationMirror _currentMember; |
| /// Support for [:foo:]-style code comments to the markdown parser. |
| List<markdown.InlineSyntax> markdownSyntaxes = |
| @@ -380,9 +383,9 @@ void _documentLibraries(List<LibraryMirror> libs, {bool includeSdk: false, |
| Library generateLibrary(dart2js.Dart2JsLibraryMirror library) { |
| _currentLibrary = library; |
| var result = new Library(docName(library), _commentToHtml(library), |
| - _classes(library.classes), |
| - _methods(library.functions), |
| - _variables(library.variables), |
| + _classes(dart2js_util.typesOf(library.declarations)), |
| + _methods(dart2js_util.methodsOf(library.declarations)), |
| + _variables(dart2js_util.variablesOf(library.declarations)), |
| _isHidden(library)); |
| _findPackage(result, library); |
| logger.fine('Generated library for ${result.name}'); |
| @@ -409,11 +412,11 @@ void _writeIndexableToFile(Indexable result, bool outputToYaml) { |
| /// An example that contains ._ is dart._collection.dev |
| // This is because LibraryMirror.isPrivate returns `false` all the time. |
| bool _isLibraryPrivate(LibraryMirror mirror) { |
| - var sdkLibrary = LIBRARIES[mirror.simpleName]; |
| + var sdkLibrary = LIBRARIES[dart2js_util.nameOf(mirror)]; |
| if (sdkLibrary != null) { |
| return !sdkLibrary.documented; |
| - } else if (mirror.simpleName.startsWith('_') || |
| - mirror.simpleName.contains('._')) { |
| + } else if (dart2js_util.nameOf(mirror).startsWith('_') || |
| + dart2js_util.nameOf(mirror).contains('._')) { |
| return true; |
| } |
| return false; |
| @@ -441,7 +444,7 @@ List<Annotation> _annotations(DeclarationMirror mirror) { |
| e is dart2js.Dart2JsConstructedConstantMirror); |
| var annotations = []; |
| annotationMirrors.forEach((annotation) { |
| - var parameterList = annotation.type.variables.values |
| + var parameterList = dart2js_util.variablesOf(annotation.type.declarations) |
| .where((e) => e.isFinal) |
| .map((e) => annotation.getField(e.simpleName).reflectee) |
| .where((e) => e != null) |
| @@ -538,7 +541,8 @@ String _htmlMdn(String content, String url) { |
| /// Look for the specified name starting with the current member, and |
| /// progressively working outward to the current library scope. |
| String findElementInScope(String name, LibraryMirror currentLibrary, |
| - ClassMirror currentClass, MemberMirror currentMember) { |
| + ClassMirror currentClass, |
| + DeclarationMirror currentMember) { |
| determineLookupFunc(name) => name.contains('.') ? |
| dart2js_util.lookupQualifiedInScope : |
| (mirror, name) => mirror.lookupInScope(name); |
| @@ -627,7 +631,8 @@ List<String> _tokenizeComplexReference(String name) { |
| /// <a>resolvedFoo</a><<a>resolved_bar_</a>> rather than an italicized |
| /// version of resolvedBar. |
| markdown.Node _fixComplexReference(String name, LibraryMirror currentLibrary, |
| - ClassMirror currentClass, MemberMirror currentMember) { |
| + ClassMirror currentClass, |
| + DeclarationMirror currentMember) { |
| // Parse into multiple elements we can try to resolve. |
| var tokens = _tokenizeComplexReference(name); |
| @@ -656,7 +661,8 @@ markdown.Node _fixComplexReference(String name, LibraryMirror currentLibrary, |
| /// Converts all [foo] references in comments to <a>libraryName.foo</a>. |
| markdown.Node fixReference(String name, LibraryMirror currentLibrary, |
| - ClassMirror currentClass, MemberMirror currentMember) { |
| + ClassMirror currentClass, |
| + DeclarationMirror currentMember) { |
| // Attempt the look up the whole name up in the scope. |
| String elementName = |
| findElementInScope(name, currentLibrary, currentClass, currentMember); |
| @@ -667,13 +673,14 @@ markdown.Node fixReference(String name, LibraryMirror currentLibrary, |
| } |
| /// Returns a map of [Variable] objects constructed from [mirrorMap]. |
| -Map<String, Variable> _variables(Map<String, VariableMirror> mirrorMap) { |
| +Map<String, Variable> _variables(Iterable<VariableMirror> mirrors) { |
| var data = {}; |
| // TODO(janicejl): When map to map feature is created, replace the below with |
| // a filter. Issue(#9590). |
|
floitsch
2014/01/28 19:21:53
Either rewrite TODO, or just do the switch.
|
| - mirrorMap.forEach((String mirrorName, VariableMirror mirror) { |
| + mirrors.forEach((VariableMirror mirror) { |
| _currentMember = mirror; |
| if (_includePrivate || !_isHidden(mirror)) { |
| + var mirrorName = dart2js_util.nameOf(mirror); |
| entityMap[docName(mirror)] = new Variable(mirrorName, mirror.isFinal, |
| mirror.isStatic, mirror.isConst, _type(mirror.type), |
| _commentToHtml(mirror), _annotations(mirror), docName(mirror), |
| @@ -685,9 +692,9 @@ Map<String, Variable> _variables(Map<String, VariableMirror> mirrorMap) { |
| } |
| /// Returns a map of [Method] objects constructed from [mirrorMap]. |
| -MethodGroup _methods(Map<String, MethodMirror> mirrorMap) { |
| +MethodGroup _methods(Iterable<MethodMirror> mirrors) { |
| var group = new MethodGroup(); |
| - mirrorMap.forEach((String mirrorName, MethodMirror mirror) { |
| + mirrors.forEach((MethodMirror mirror) { |
| if (_includePrivate || !mirror.isPrivate) { |
| group.addMethod(mirror); |
| } |
| @@ -697,16 +704,19 @@ MethodGroup _methods(Map<String, MethodMirror> mirrorMap) { |
| /// Returns the [Class] for the given [mirror] has already been created, and if |
| /// it does not exist, creates it. |
| -Class _class(ClassMirror mirror) { |
| +Class _class(ClassSourceMirror mirror) { |
| var clazz = entityMap[docName(mirror)]; |
| if (clazz == null) { |
| + var mirrorName = dart2js_util.nameOf(mirror); |
| var superclass = mirror.superclass != null ? |
| _class(mirror.superclass) : null; |
| var interfaces = |
| mirror.superinterfaces.map((interface) => _class(interface)); |
| - clazz = new Class(mirror.simpleName, superclass, _commentToHtml(mirror), |
| - interfaces.toList(), _variables(mirror.variables), |
| - _methods(mirror.methods), _annotations(mirror), _generics(mirror), |
| + clazz = new Class(mirrorName, superclass, _commentToHtml(mirror), |
| + interfaces.toList(), |
| + _variables(dart2js_util.variablesOf(mirror.declarations)), |
| + _methods(dart2js_util.methodsOf(mirror.declarations)), |
| + _annotations(mirror), _generics(mirror), |
| docName(mirror), _isHidden(mirror), docName(mirror.owner), |
| mirror.isAbstract); |
| if (superclass != null) clazz.addInherited(superclass); |
| @@ -717,11 +727,9 @@ Class _class(ClassMirror mirror) { |
| } |
| /// Returns a map of [Class] objects constructed from [mirrorMap]. |
| -ClassGroup _classes(Map<String, ClassMirror> mirrorMap) { |
| +ClassGroup _classes(Iterable<TypeMirror> mirrors) { |
| var group = new ClassGroup(); |
| - mirrorMap.forEach((String mirrorName, ClassMirror mirror) { |
| - group.addClass(mirror); |
| - }); |
| + mirrors.forEach(group.addClass); |
| return group; |
| } |
| @@ -729,17 +737,18 @@ ClassGroup _classes(Map<String, ClassMirror> mirrorMap) { |
| Map<String, Parameter> _parameters(List<ParameterMirror> mirrorList) { |
| var data = {}; |
| mirrorList.forEach((ParameterMirror mirror) { |
| + var mirrorName = dart2js_util.nameOf(mirror); |
| _currentMember = mirror; |
| - data[mirror.simpleName] = new Parameter(mirror.simpleName, |
| + data[mirrorName] = new Parameter(mirrorName, |
| mirror.isOptional, mirror.isNamed, mirror.hasDefaultValue, |
| - _type(mirror.type), mirror.defaultValue, |
| + _type(mirror.type), '${mirror.defaultValue}', |
| _annotations(mirror)); |
| }); |
| return data; |
| } |
| /// Returns a map of [Generic] objects constructed from the class mirror. |
|
floitsch
2014/01/28 19:21:53
from the type mirror.
|
| -Map<String, Generic> _generics(ClassMirror mirror) { |
| +Map<String, Generic> _generics(TypeMirror mirror) { |
| return new Map.fromIterable(mirror.typeVariables, |
| key: (e) => e.toString(), |
| value: (e) => new Generic(e.toString(), e.upperBound.qualifiedName)); |
| @@ -753,7 +762,7 @@ Type _type(TypeMirror mirror) { |
| /// Returns a list of [Type] objects constructed from TypeMirrors. |
| List<Type> _typeGenerics(TypeMirror mirror) { |
| - if (mirror is ClassMirror && !mirror.isTypedef) { |
| + if (mirror is ClassMirror) { |
| var innerList = []; |
| mirror.typeArguments.forEach((e) { |
| innerList.add(new Type(docName(e), _typeGenerics(e))); |
| @@ -1035,21 +1044,22 @@ class ClassGroup { |
| Map<String, Typedef> typedefs = {}; |
| Map<String, Class> errors = {}; |
| - void addClass(ClassMirror mirror) { |
| + void addClass(TypeMirror mirror) { |
| _currentClass = mirror; |
| - if (mirror.isTypedef) { |
| + var mirrorName = dart2js_util.nameOf(mirror); |
| + if (mirror is TypedefMirror) { |
| // This is actually a Dart2jsTypedefMirror, and it does define value, |
| // but we don't have visibility to that type. |
| - var mirror = _currentClass; |
| + //var mirror = _currentClass; |
| if (_includePrivate || !mirror.isPrivate) { |
| - entityMap[docName(mirror)] = new Typedef(mirror.simpleName, |
| - docName(mirror.value.returnType), _commentToHtml(mirror), |
| - _generics(mirror), _parameters(mirror.value.parameters), |
| + entityMap[docName(mirror)] = new Typedef(mirrorName, |
| + docName(mirror.referent.returnType), _commentToHtml(mirror), |
| + _generics(mirror), _parameters(mirror.referent.parameters), |
| _annotations(mirror), docName(mirror), _isHidden(mirror), |
| docName(mirror.owner)); |
| - typedefs[mirror.simpleName] = entityMap[docName(mirror)]; |
| + typedefs[mirrorName] = entityMap[docName(mirror)]; |
| } |
| - } else { |
| + } else if (mirror is ClassMirror) { |
| var clazz = _class(mirror); |
| // Adding inherited parent variables and methods. |
| @@ -1062,12 +1072,12 @@ class ClassGroup { |
| clazz.ensureComments(); |
| if (clazz.isError()) { |
| - errors[mirror.simpleName] = clazz; |
| - } else if (mirror.isClass) { |
| - classes[mirror.simpleName] = clazz; |
| + errors[mirrorName] = clazz; |
| } else { |
| - throw new ArgumentError('${mirror.simpleName} - no class type match. '); |
| + classes[mirrorName] = clazz; |
| } |
| + } else { |
| + throw new ArgumentError('${mirrorName} - no class type match. '); |
| } |
| } |
| @@ -1213,7 +1223,8 @@ class MethodGroup { |
| Map<String, Method> regularMethods = {}; |
| void addMethod(MethodMirror mirror) { |
| - var method = new Method(mirror.simpleName, mirror.isStatic, |
| + var methodName = dart2js_util.nameOf(mirror); |
| + var method = new Method(methodName, mirror.isStatic, |
| mirror.isAbstract, mirror.isConstConstructor, _type(mirror.returnType), |
| _commentToHtml(mirror), _parameters(mirror.parameters), |
| _annotations(mirror), docName(mirror), _isHidden(mirror), |
| @@ -1222,17 +1233,17 @@ class MethodGroup { |
| entityMap[docName(mirror)] = method; |
| _currentMember = mirror; |
| if (mirror.isSetter) { |
| - setters[mirror.simpleName] = method; |
| + setters[methodName] = method; |
| } else if (mirror.isGetter) { |
| - getters[mirror.simpleName] = method; |
| + getters[methodName] = method; |
| } else if (mirror.isConstructor) { |
| - constructors[mirror.simpleName] = method; |
| + constructors[methodName] = method; |
| } else if (mirror.isOperator) { |
| - operators[mirror.simpleName] = method; |
| + operators[methodName] = method; |
| } else if (mirror.isRegularMethod) { |
| - regularMethods[mirror.simpleName] = method; |
| + regularMethods[methodName] = method; |
| } else { |
| - throw new ArgumentError('${mirror.simpleName} - no method type match'); |
| + throw new ArgumentError('${methodName} - no method type match'); |
| } |
| } |
| @@ -1372,13 +1383,13 @@ class Annotation { |
| /// have them replaced with hyphens. |
| String docName(DeclarationMirror m) { |
| if (m is LibraryMirror) { |
| - return (m as LibraryMirror).qualifiedName.replaceAll('.','-'); |
| + return dart2js_util.qualifiedNameOf(m).replaceAll('.','-'); |
| } |
| var owner = m.owner; |
| - if (owner == null) return m.qualifiedName; |
| + if (owner == null) return dart2js_util.qualifiedNameOf(m); |
| // For the unnamed constructor we just return the class name. |
| if (m.simpleName == '') return docName(owner); |
| - return docName(owner) + '.' + m.simpleName; |
| + return docName(owner) + '.' + dart2js_util.nameOf(m); |
| } |
| /// Remove statics from the map of inherited items before adding them. |