Index: pkg/docgen/lib/docgen.dart |
diff --git a/pkg/docgen/lib/docgen.dart b/pkg/docgen/lib/docgen.dart |
index e69ad43de0e34ed9014b9b2bb07d68159d9fd9f5..f26bc928f6da23f88a32694117c4ed2ba222a905 100644 |
--- a/pkg/docgen/lib/docgen.dart |
+++ b/pkg/docgen/lib/docgen.dart |
@@ -376,12 +376,7 @@ void _documentLibraries(List<LibraryMirror> libs, {bool includeSdk: false, |
} |
Library generateLibrary(dart2js.Dart2JsLibraryMirror library) { |
- var result = new Library(docName(library), |
- (actualLibrary) => _commentToHtml(library, actualLibrary), |
- _classes(library.classes), |
- _methods(library.functions), |
- _variables(library.variables), |
- _isHidden(library), library); |
+ var result = new Library(library); |
Alan Knight
2013/11/20 21:29:20
Awesome!
|
_findPackage(library, result); |
logger.fine('Generated library for ${result.name}'); |
return result; |
@@ -433,25 +428,6 @@ bool _isVisible(Indexable item) { |
return _includePrivate || !item.isPrivate; |
} |
-/// Returns a list of meta annotations assocated with a mirror. |
-List<Annotation> _annotations(DeclarationMirror mirror) { |
- var annotationMirrors = mirror.metadata.where((e) => |
- e is dart2js.Dart2JsConstructedConstantMirror); |
- var annotations = []; |
- annotationMirrors.forEach((annotation) { |
- var parameterList = annotation.type.variables.values |
- .where((e) => e.isFinal) |
- .map((e) => annotation.getField(e.simpleName).reflectee) |
- .where((e) => e != null) |
- .toList(); |
- if (!skippedAnnotations.contains(docName(annotation.type))) { |
- annotations.add(new Annotation(docName(annotation.type), |
- parameterList)); |
- } |
- }); |
- return annotations; |
-} |
- |
/// Returns any documentation comments associated with a mirror with |
/// simple markdown converted to html. |
/// |
@@ -674,103 +650,6 @@ markdown.Node fixReferenceWithScope(String name, DeclarationMirror scope) { |
return null; |
} |
-/// Returns a map of [Variable] objects constructed from [mirrorMap]. |
-Map<String, Variable> _variables(Map<String, VariableMirror> mirrorMap) { |
- var data = {}; |
- // TODO(janicejl): When map to map feature is created, replace the below with |
- // a filter. Issue(#9590). |
- mirrorMap.forEach((String mirrorName, VariableMirror mirror) { |
- if (_includePrivate || !_isHidden(mirror)) { |
- entityMap[docName(mirror)] = new Variable(mirrorName, mirror.isFinal, |
- mirror.isStatic, mirror.isConst, _type(mirror.type), |
- (actualVariable) => _commentToHtml(mirror, actualVariable), |
- _annotations(mirror), docName(mirror), |
- _isHidden(mirror), docName(mirror.owner), mirror); |
- data[mirrorName] = entityMap[docName(mirror)]; |
- } |
- }); |
- return data; |
-} |
- |
-/// Returns a map of [Method] objects constructed from [mirrorMap]. |
-MethodGroup _methods(Map<String, MethodMirror> mirrorMap) { |
- var group = new MethodGroup(); |
- mirrorMap.forEach((String mirrorName, MethodMirror mirror) { |
- if (_includePrivate || !mirror.isPrivate) { |
- group.addMethod(mirror); |
- } |
- }); |
- return group; |
-} |
- |
-/// Returns the [Class] for the given [mirror] has already been created, and if |
-/// it does not exist, creates it. |
-Class _class(ClassMirror mirror) { |
- var clazz = entityMap[docName(mirror)]; |
- if (clazz == null) { |
- var superclass = mirror.superclass != null ? |
- _class(mirror.superclass) : null; |
- var interfaces = |
- mirror.superinterfaces.map((interface) => _class(interface)); |
- clazz = new Class(mirror.simpleName, superclass, |
- (actualClass) => _commentToHtml(mirror, actualClass), |
- interfaces.toList(), _variables(mirror.variables), |
- _methods(mirror.methods), _annotations(mirror), _generics(mirror), |
- docName(mirror), _isHidden(mirror), docName(mirror.owner), |
- mirror.isAbstract, mirror); |
- if (superclass != null) clazz.addInherited(superclass); |
- interfaces.forEach((interface) => clazz.addInherited(interface)); |
- entityMap[docName(mirror)] = clazz; |
- } |
- return clazz; |
-} |
- |
-/// Returns a map of [Class] objects constructed from [mirrorMap]. |
-ClassGroup _classes(Map<String, ClassMirror> mirrorMap) { |
- var group = new ClassGroup(); |
- mirrorMap.forEach((String mirrorName, ClassMirror mirror) { |
- group.addClass(mirror); |
- }); |
- return group; |
-} |
- |
-/// Returns a map of [Parameter] objects constructed from [mirrorList]. |
-Map<String, Parameter> _parameters(List<ParameterMirror> mirrorList) { |
- var data = {}; |
- mirrorList.forEach((ParameterMirror mirror) { |
- data[mirror.simpleName] = new Parameter(mirror.simpleName, |
- mirror.isOptional, mirror.isNamed, mirror.hasDefaultValue, |
- _type(mirror.type), mirror.defaultValue, |
- _annotations(mirror)); |
- }); |
- return data; |
-} |
- |
-/// Returns a map of [Generic] objects constructed from the class mirror. |
-Map<String, Generic> _generics(ClassMirror mirror) { |
- return new Map.fromIterable(mirror.typeVariables, |
- key: (e) => e.toString(), |
- value: (e) => new Generic(e.toString(), e.upperBound.qualifiedName)); |
-} |
- |
-/// Returns a single [Type] object constructed from the Method.returnType |
-/// Type mirror. |
-Type _type(TypeMirror mirror) { |
- return new Type(docName(mirror), _typeGenerics(mirror)); |
-} |
- |
-/// Returns a list of [Type] objects constructed from TypeMirrors. |
-List<Type> _typeGenerics(TypeMirror mirror) { |
- if (mirror is ClassMirror && !mirror.isTypedef) { |
- var innerList = []; |
- mirror.typeArguments.forEach((e) { |
- innerList.add(new Type(docName(e), _typeGenerics(e))); |
- }); |
- return innerList; |
- } |
- return []; |
-} |
- |
/// Writes text to a file in the 'docs' directory. |
void _writeToFile(String text, String filename, {bool append: false}) { |
Directory dir = new Directory('docs'); |
@@ -810,10 +689,13 @@ typedef String CommentGenerator(Mirror m); |
/// A class representing all programming constructs, like library or class. |
class Indexable { |
- String name; |
String get qualifiedName => fileName; |
bool isPrivate; |
- Mirror mirror; |
+ DeclarationMirror mirror; |
+ |
+ Indexable(this.mirror) { |
+ this.isPrivate = _isHidden(mirror); |
+ } |
// The qualified name (for URL purposes) and the file name are the same, |
// of the form packageName/ClassName or packageName/ClassName.methodName. |
@@ -822,9 +704,9 @@ class Indexable { |
Indexable get owningEntity => entityMap[owner]; |
- String get ownerPrefix => owningEntity == null |
- ? (owner == null || owner.isEmpty ? '' : owner + '.') |
- : owningEntity.qualifiedName + '.'; |
+ String get ownerPrefix => owningEntity == null ? |
+ (owner == null || owner.isEmpty ? '' : owner + '.') : |
+ owningEntity.qualifiedName + '.'; |
String get packagePrefix => ''; |
@@ -842,15 +724,14 @@ class Indexable { |
set comment(x) => _comment = x; |
- /// We defer evaluating the comment until we have all the context available |
- CommentGenerator _commentFunction; |
+ String get name => mirror.simpleName; |
/// Qualified Name of the owner of this Indexable Item. |
- /// For Library, owner will be ""; |
- String owner; |
+ String get owner => docName(mirror.owner); |
- Indexable(this.name, this._commentFunction, this.isPrivate, this.owner, |
- this.mirror); |
+ /// We defer evaluating the comment until we have all the context available |
+ CommentGenerator get _commentFunction => |
Alan Knight
2013/11/20 21:29:20
If this is always there, could we just call make i
Emily Fortuna
2013/11/21 19:29:59
Good point. I ended up doing this refactor in incr
|
+ (itemToDocument) => _commentToHtml(mirror, itemToDocument); |
/// The type of this member to be used in index.txt. |
String get typeName => ''; |
@@ -865,6 +746,88 @@ class Indexable { |
return finalMap; |
} |
+ /// Returns a map of [Variable] objects constructed from [mirrorMap]. |
+ Map<String, Variable> _processVariables(Map<String, |
+ VariableMirror> mirrorMap) { |
+ var data = {}; |
+ // TODO(janicejl): When map to map feature is created, replace the below |
+ // with a filter. Issue(#9590). |
+ mirrorMap.forEach((String mirrorName, VariableMirror mirror) { |
+ if (_includePrivate || !_isHidden(mirror)) { |
+ entityMap[docName(mirror)] = new Variable(mirrorName, mirror); |
+ data[mirrorName] = entityMap[docName(mirror)]; |
+ } |
+ }); |
+ return data; |
+ } |
+ |
+ /// Returns a map of [Method] objects constructed from [mirrorMap]. |
+ MethodGroup _processMethods(Map<String, MethodMirror> mirrorMap) { |
Alan Knight
2013/11/20 21:29:20
A bit of inconsistency with naming that we're proc
Emily Fortuna
2013/11/21 19:29:59
renamed to create
|
+ var group = new MethodGroup(); |
+ mirrorMap.forEach((String mirrorName, MethodMirror mirror) { |
+ if (_includePrivate || !mirror.isPrivate) { |
+ group.addMethod(mirror); |
+ } |
+ }); |
+ return group; |
+ } |
+ |
+ /// Returns a map of [Parameter] objects constructed from [mirrorList]. |
+ Map<String, Parameter> _processParameters(List<ParameterMirror> mirrorList) { |
+ var data = {}; |
+ mirrorList.forEach((ParameterMirror mirror) { |
+ data[mirror.simpleName] = new Parameter(mirror.simpleName, |
+ mirror.isOptional, mirror.isNamed, mirror.hasDefaultValue, |
+ _processType(mirror.type), mirror.defaultValue, |
+ _processAnnotations(mirror)); |
+ }); |
+ return data; |
+ } |
+ |
+ /// Returns a map of [Generic] objects constructed from the class mirror. |
+ Map<String, Generic> _processGenerics(ClassMirror mirror) { |
+ return new Map.fromIterable(mirror.typeVariables, |
+ key: (e) => e.toString(), |
+ value: (e) => new Generic(e.toString(), e.upperBound.qualifiedName)); |
+ } |
+ |
+ /// Returns a single [Type] object constructed from the Method.returnType |
+ /// Type mirror. |
+ Type _processType(TypeMirror mirror) { |
+ return new Type(docName(mirror), _processTypeGenerics(mirror)); |
+ } |
+ |
+ /// Returns a list of [Type] objects constructed from TypeMirrors. |
+ List<Type> _processTypeGenerics(TypeMirror mirror) { |
+ if (mirror is ClassMirror && !mirror.isTypedef) { |
+ var innerList = []; |
+ mirror.typeArguments.forEach((e) { |
+ innerList.add(new Type(docName(e), _processTypeGenerics(e))); |
+ }); |
+ return innerList; |
+ } |
+ return []; |
+ } |
+ |
+ /// Returns a list of meta annotations assocated with a mirror. |
+ List<Annotation> _processAnnotations(DeclarationMirror mirror) { |
+ var annotationMirrors = mirror.metadata.where((e) => |
+ e is dart2js.Dart2JsConstructedConstantMirror); |
+ var annotations = []; |
+ annotationMirrors.forEach((annotation) { |
+ var parameterList = annotation.type.variables.values |
+ .where((e) => e.isFinal) |
+ .map((e) => annotation.getField(e.simpleName).reflectee) |
+ .where((e) => e != null) |
+ .toList(); |
+ if (!skippedAnnotations.contains(docName(annotation.type))) { |
+ annotations.add(new Annotation(docName(annotation.type), |
+ parameterList)); |
+ } |
+ }); |
+ return annotations; |
+ } |
+ |
/// Return an informative [Object.toString] for debugging. |
String toString() => "${super.toString()}(${name.toString()})"; |
@@ -886,12 +849,21 @@ class Library extends Indexable { |
String packageName = ''; |
bool hasBeenCheckedForPackage = false; |
+ String packageIntro; |
- String get packagePrefix => packageName == null || packageName.isEmpty |
- ? '' |
- : '$packageName/'; |
+ Library(LibraryMirror libraryMirror) : super(libraryMirror) { |
+ var exported = _calcExportedItems(libraryMirror); |
+ this.classes = _processClasses( |
+ exported['classes']..addAll(libraryMirror.classes)); |
+ this.functions = _processMethods( |
+ exported['methods']..addAll(libraryMirror.functions)); |
+ this.variables = _processVariables( |
+ exported['variables']..addAll(libraryMirror.variables)); |
+ print(classes.toMap().toString()); |
Alan Knight
2013/11/20 21:29:20
Leftover debugging?
Emily Fortuna
2013/11/21 19:29:59
yep. removed.
|
+ } |
- String packageIntro; |
+ String get packagePrefix => packageName == null || packageName.isEmpty ? |
+ '' : '$packageName/'; |
Map get previewMap { |
var basic = super.previewMap; |
@@ -902,9 +874,80 @@ class Library extends Indexable { |
return basic; |
} |
- Library(String name, Function commentFunction, this.classes, this.functions, |
- this.variables, bool isPrivate, Mirror mirror) |
- : super(name, commentFunction, isPrivate, "", mirror); |
+ String get owner => ''; |
+ |
+ String get name => docName(mirror); |
+ |
+ /// Returns a map of [Class] objects constructed from [mirrorMap]. |
Alan Knight
2013/11/20 21:29:20
"Returns a [ClassGroup] with a map of" ?
Emily Fortuna
2013/11/21 19:29:59
Done.
|
+ ClassGroup _processClasses(Map<String, ClassMirror> mirrorMap) { |
+ var group = new ClassGroup(); |
+ mirrorMap.forEach((String mirrorName, ClassMirror mirror) { |
+ group.addClass(mirror); |
+ }); |
+ return group; |
+ } |
+ |
+ /// 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( |
+ LibraryMirror library) { |
+ var exports = {}; |
+ exports['classes'] = {}; |
+ exports['methods'] = {}; |
+ exports['variables'] = {}; |
+ |
+ // Determine the classes, variables and methods that are exported for a |
+ // specific dependency. |
+ _populateExports(LibraryDependencyMirror export, bool showExport) { |
+ if (!showExport) { |
+ // Add all items, and then remove the hidden ones. |
+ // Ex: "export foo hide bar" |
+ exports['classes'].addAll(export.targetLibrary.classes); |
+ exports['methods'].addAll(export.targetLibrary.functions); |
+ exports['variables'].addAll(export.targetLibrary.variables); |
+ } |
+ for (CombinatorMirror combinator in export.combinators) { |
+ for (String identifier in combinator.identifiers) { |
+ DeclarationMirror declaration = |
+ export.targetLibrary.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 ' |
+ '${export.targetLibrary.qualifiedName}'); |
+ } 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) { |
+ // 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" |
+ _populateExports(export, |
+ export.combinators.any((combinator) => combinator.isShow)); |
+ } |
+ return exports; |
+ } |
/// Generates a map describing the [Library] object. |
Map toMap() => { |
@@ -954,16 +997,35 @@ class Class extends Indexable implements Comparable { |
/// Make sure that we don't check for inherited comments more than once. |
bool _commentsEnsured = false; |
- Class(String name, this.superclass, Function commentFunction, this.interfaces, |
- this.variables, this.methods, this.annotations, this.generics, |
- String qualifiedName, bool isPrivate, String owner, this.isAbstract, |
- Mirror mirror) |
- : super(name, commentFunction, isPrivate, owner, mirror); |
+ Class(ClassMirror classMirror) : super(classMirror) { |
+ var superclass = classMirror.superclass != null ? |
+ _getClassFromClassMirror(classMirror.superclass) : null; |
+ var interfaces = classMirror.superinterfaces.map( |
+ (interface) => _getClassFromClassMirror(interface)); |
+ |
+ this.superclass = superclass; |
+ this.interfaces = interfaces.toList(); |
+ this.variables = _processVariables(classMirror.variables); |
+ this.methods = _processMethods(classMirror.methods); |
+ this.annotations = _processAnnotations(classMirror); |
+ this.generics = _processGenerics(classMirror); |
+ this.isAbstract = classMirror.isAbstract; |
+ |
+ // Tell all superclasses that you are a subclass. |
+ if (!classMirror.isNameSynthetic && _isVisible(this)) { |
+ parentChain().forEach((parentClass) { |
+ parentClass.addSubclass(this); |
+ }); |
+ } |
+ |
+ if (this.superclass != null) addInherited(superclass); |
+ interfaces.forEach((interface) => addInherited(interface)); |
+ } |
String get typeName => 'class'; |
/// Returns a list of all the parent classes. |
- List<Class> parent() { |
+ List<Class> parentChain() { |
var parent = superclass == null ? [] : [superclass]; |
parent.addAll(interfaces); |
return parent; |
@@ -980,8 +1042,8 @@ class Class extends Indexable implements Comparable { |
/// Add the subclass to the class. |
/// |
- /// If [this] is private, it will add the subclass to the list of subclasses in |
- /// the superclasses. |
+ /// If [this] is private, it will add the subclass to the list of subclasses |
+ /// in the superclasses. |
void addSubclass(Class subclass) { |
if (!_includePrivate && isPrivate) { |
if (superclass != null) superclass.addSubclass(subclass); |
@@ -993,6 +1055,17 @@ class Class extends Indexable implements Comparable { |
} |
} |
+ /// Returns the [Class] for the given [mirror] has already been created, and |
Alan Knight
2013/11/20 21:29:20
Missing an "if it"?
Emily Fortuna
2013/11/21 19:29:59
Done.
|
+ /// if it does not exist, creates it. |
+ static Class _getClassFromClassMirror(ClassMirror mirror) { |
Alan Knight
2013/11/20 21:29:20
Naming nit. The "get" doesn't add much, and if it'
Emily Fortuna
2013/11/21 19:29:59
Good call. Fixed.
|
+ var clazz = entityMap[docName(mirror)]; |
+ if (clazz == null) { |
+ clazz = new Class(mirror); |
+ entityMap[docName(mirror)] = clazz; |
+ } |
+ return clazz; |
+ } |
+ |
/// Check if this [Class] is an error or exception. |
bool isError() { |
if (qualifiedName == 'dart-core.Error' || |
@@ -1075,23 +1148,11 @@ class ClassGroup { |
// but we don't have visibility to that type. |
var mirror = classMirror; |
if (_includePrivate || !mirror.isPrivate) { |
- entityMap[docName(mirror)] = new Typedef(mirror.simpleName, |
- docName(mirror.value.returnType), |
- (actualTypedef) => _commentToHtml(mirror, actualTypedef), |
- _generics(mirror), _parameters(mirror.value.parameters), |
- _annotations(mirror), docName(mirror), _isHidden(mirror), |
- docName(mirror.owner), mirror); |
+ entityMap[docName(mirror)] = new Typedef(mirror); |
typedefs[mirror.simpleName] = entityMap[docName(mirror)]; |
} |
} else { |
- var clazz = _class(classMirror); |
- |
- // Adding inherited parent variables and methods. |
- clazz.parent().forEach((parent) { |
- if (_isVisible(clazz)) { |
- parent.addSubclass(clazz); |
- } |
- }); |
+ var clazz = Class._getClassFromClassMirror(classMirror); |
if (clazz.isError()) { |
errors[classMirror.simpleName] = clazz; |
@@ -1129,10 +1190,12 @@ class Typedef extends Indexable { |
/// List of the meta annotations on the typedef. |
List<Annotation> annotations; |
- Typedef(String name, this.returnType, Function commentFunction, this.generics, |
- this.parameters, this.annotations, |
- String qualifiedName, bool isPrivate, String owner, Mirror mirror) |
- : super(name, commentFunction, isPrivate, owner, mirror); |
+ Typedef(mirror) : super(mirror) { |
+ this.returnType = docName(mirror.value.returnType); |
+ this.generics = _processGenerics(mirror); |
+ this.parameters = _processParameters(mirror.value.parameters); |
+ this.annotations = _processAnnotations(mirror); |
+ } |
Map toMap() => { |
'name': name, |
@@ -1154,16 +1217,21 @@ class Variable extends Indexable { |
bool isStatic; |
bool isConst; |
Type type; |
+ String _variableName; |
/// List of the meta annotations on the variable. |
List<Annotation> annotations; |
- Variable(String name, this.isFinal, this.isStatic, this.isConst, this.type, |
- Function commentFunction, this.annotations, String qualifiedName, |
- bool isPrivate, String owner, Mirror mirror) |
- : super(name, commentFunction, isPrivate, owner, mirror) { |
+ Variable(this._variableName, VariableMirror mirror) : super(mirror) { |
+ this.isFinal = mirror.isFinal; |
+ this.isStatic = mirror.isStatic; |
+ this.isConst = mirror.isConst; |
+ this.type = _processType(mirror.type); |
+ this.annotations = _processAnnotations(mirror); |
} |
+ String get name => this._variableName; |
Alan Knight
2013/11/20 21:29:20
Why the explicit "this."?
Emily Fortuna
2013/11/21 19:29:59
oops. Refactoring cruft from when it was part of t
|
+ |
/// Generates a map describing the [Variable] object. |
Map toMap() => { |
'name': name, |
@@ -1209,12 +1277,17 @@ class Method extends Indexable { |
/// List of the meta annotations on the method. |
List<Annotation> annotations; |
- Method(String name, this.isStatic, this.isAbstract, this.isConst, |
- this.returnType, Function commentFunction, this.parameters, |
- this.annotations, |
- String qualifiedName, bool isPrivate, String owner, this.isConstructor, |
- this.isGetter, this.isSetter, this.isOperator, Mirror mirror) |
- : super(name, commentFunction, isPrivate, owner, mirror) { |
+ Method(MethodMirror mirror) : super(mirror) { |
+ this.isStatic = mirror.isStatic; |
+ this.isAbstract = mirror.isAbstract; |
+ this.isConst = mirror.isConstConstructor; |
+ this.returnType = _processType(mirror.returnType); |
+ this.parameters = _processParameters(mirror.parameters); |
+ this.annotations = _processAnnotations(mirror); |
+ this.isConstructor = mirror.isConstructor; |
+ this.isGetter = mirror.isGetter; |
+ this.isSetter = mirror.isSetter; |
+ this.isOperator = mirror.isOperator; |
} |
/// Makes sure that the method with an inherited equivalent have comments. |
@@ -1263,13 +1336,7 @@ class MethodGroup { |
Map<String, Method> regularMethods = {}; |
void addMethod(MethodMirror mirror) { |
- var method = new Method(mirror.simpleName, mirror.isStatic, |
- mirror.isAbstract, mirror.isConstConstructor, _type(mirror.returnType), |
- (actualMethod) => _commentToHtml(mirror, actualMethod), |
- _parameters(mirror.parameters), |
- _annotations(mirror), docName(mirror), _isHidden(mirror), |
- docName(mirror.owner), mirror.isConstructor, mirror.isGetter, |
- mirror.isSetter, mirror.isOperator, mirror); |
+ var method = new Method(mirror); |
entityMap[docName(mirror)] = method; |
if (mirror.isSetter) { |
setters[mirror.simpleName] = method; |
@@ -1422,7 +1489,7 @@ class Annotation { |
/// have them replaced with hyphens. |
String docName(DeclarationMirror m) { |
if (m is LibraryMirror) { |
- return (m as LibraryMirror).qualifiedName.replaceAll('.','-'); |
+ return m.qualifiedName.replaceAll('.','-'); |
} |
var owner = m.owner; |
if (owner == null) return m.qualifiedName; |