Chromium Code Reviews| Index: utils/apidoc/apidoc.dart |
| diff --git a/utils/apidoc/apidoc.dart b/utils/apidoc/apidoc.dart |
| index 38872318a14d41ec24d8a37677cdf8ecf1268ec0..3c0357225e29ed9e1ce96b22d29b36f99006078d 100644 |
| --- a/utils/apidoc/apidoc.dart |
| +++ b/utils/apidoc/apidoc.dart |
| @@ -18,16 +18,12 @@ |
| #import('dart:io'); |
| #import('dart:json'); |
| #import('html_diff.dart'); |
| - |
| -#import('../../lib/dartdoc/frog/lang.dart'); |
| -#import('../../lib/dartdoc/frog/file_system_vm.dart'); |
| -#import('../../lib/dartdoc/frog/file_system.dart'); |
| +#import('../../lib/dartdoc/mirrors/mirrors.dart'); |
| +#import('../../lib/dartdoc/mirrors/mirrors_util.dart'); |
| #import('../../lib/dartdoc/dartdoc.dart', prefix: 'doc'); |
| HtmlDiff _diff; |
| -final GET_PREFIX = 'get:'; |
| - |
| void main() { |
| final args = new Options().arguments; |
| @@ -66,12 +62,7 @@ void main() { |
| } |
| } |
| - final frogPath = joinPaths(doc.scriptDir, '../../lib/dartdoc/frog/'); |
| - |
| - if (compilerPath === null) { |
| - compilerPath |
| - = Platform.operatingSystem == 'windows' ? 'dart2js.bat' : 'dart2js'; |
| - } |
| + final libPath = '${doc.scriptDir}/../../'; |
| doc.cleanOutputDirectory(outputDir); |
| @@ -80,7 +71,7 @@ void main() { |
| final clientScript = (mode == doc.MODE_STATIC) ? |
| 'static' : 'live-nav'; |
| - final Future scriptCompiled = doc.compileScript(compilerPath, |
| + final bool scriptCompiled = doc.compileScript( |
| '${doc.scriptDir}/../../lib/dartdoc/client-$clientScript.dart', |
| '${outputDir}/client-$clientScript.js'); |
| @@ -93,54 +84,61 @@ void main() { |
| final Future copiedApiDocStatic = doc.copyFiles('${doc.scriptDir}/static', |
| outputDir); |
| - var files = new VMFileSystem(); |
| - parseOptions(frogPath, ['', '', '--libdir=../../lib'], files); |
| - initializeWorld(files); |
| - |
| print('Parsing MDN data...'); |
| final mdnFile = new File('${doc.scriptDir}/mdn/database.json'); |
| final mdn = JSON.parse(mdnFile.readAsTextSync()); |
| print('Cross-referencing dart:html...'); |
| - HtmlDiff.initialize(); |
| + HtmlDiff.initialize(libPath); |
| _diff = new HtmlDiff(printWarnings:false); |
| _diff.run(); |
| // Process handwritten HTML documentation. |
| - world.reset(); |
| - world.getOrAddLibrary('${doc.scriptDir}/../../lib/html/doc/html.dartdoc'); |
| - world.process(); |
| final htmldoc = new Htmldoc(); |
| - htmldoc.document(); |
| + htmldoc.documentLibraries( |
| + <String>['${doc.scriptDir}/../../lib/html/doc/html.dartdoc'], |
| + libPath); |
| print('Processing handwritten HTML documentation...'); |
| // Process libraries. |
| - // Note, Frog has global internal state. We need to clear away the |
| - // HTML documentation classes above first. |
| - world.reset(); |
| - |
| // Add all of the core libraries. |
| - world.getOrAddLibrary('dart:core'); |
| - world.getOrAddLibrary('dart:coreimpl'); |
| - world.getOrAddLibrary('dart:crypto'); |
| - world.getOrAddLibrary('dart:html'); |
| - world.getOrAddLibrary('dart:io'); |
| - world.getOrAddLibrary('dart:isolate'); |
| - world.getOrAddLibrary('dart:json'); |
| - world.getOrAddLibrary('${doc.scriptDir}/../../lib/math/math.dart'); |
| - world.getOrAddLibrary('${doc.scriptDir}/../../lib/unittest/unittest.dart'); |
| - world.getOrAddLibrary('${doc.scriptDir}/../../lib/i18n/intl.dart'); |
| - world.getOrAddLibrary('dart:uri'); |
| - world.getOrAddLibrary('dart:utf'); |
| - world.getOrAddLibrary('dart:web'); |
| - world.process(); |
| - |
| + var apidocLibraries = <String>[ |
| + 'dart:core', |
| + 'dart:coreimpl', |
| + 'dart:crypto', |
| + 'dart:html', |
| + 'dart:io', |
| + 'dart:isolate', |
| + 'dart:json', |
| + '${doc.scriptDir}/../../lib/math/math.dart', |
| + '${doc.scriptDir}/../../lib/unittest/unittest.dart', |
| + '${doc.scriptDir}/../../lib/i18n/intl.dart', |
| + 'dart:uri', |
| + 'dart:utf', |
| + 'dart:web', |
| + ]; |
|
Bob Nystrom
2012/07/09 16:59:55
Style nit: indent just +2, not +4 and don't indent
Johnni Winther
2012/07/12 08:51:39
Done.
|
| print('Generating docs...'); |
| final apidoc = new Apidoc(mdn, htmldoc, outputDir, mode, generateAppCache); |
| - |
| - Futures.wait([scriptCompiled, copiedStatic, copiedApiDocStatic]).then((_) { |
| - apidoc.document(); |
| + // Select the libraries to include in the produced documentation: |
| + apidoc.libraries = <String>[ |
| + 'core', |
| + 'coreimpl', |
| + 'crypto', |
| + 'html', |
| + 'io', |
| + 'dart:isolate', |
| + 'json', |
| + 'math', |
| + 'unittest', |
| + 'intl', |
| + 'uri', |
| + 'utf', |
| + 'web', |
| + ]; |
|
Bob Nystrom
2012/07/09 16:59:55
Ditto.
Johnni Winther
2012/07/12 08:51:39
Done.
|
| + |
| + Futures.wait([copiedStatic, copiedApiDocStatic]).then((_) { |
| + apidoc.documentLibraries(apidocLibraries, libPath); |
| }); |
| } |
| @@ -151,12 +149,18 @@ void main() { |
| */ |
| class Htmldoc extends doc.Dartdoc { |
| String libraryComment; |
| + /** |
|
Bob Nystrom
2012/07/09 16:59:55
Style nit. Can you put a blank line between doc co
Johnni Winther
2012/07/12 08:51:39
Done.
|
| + * Map from qualified type names to comments. |
| + */ |
| Map<String, String> typeComments; |
| - Map<String, Map<String, String>> memberComments; |
| + /** |
| + * Map from qualified member names to comments. |
| + */ |
| + Map<String, String> memberComments; |
| Htmldoc() { |
| typeComments = new Map<String, String>(); |
| - memberComments = new Map<String, Map<String, String>>(); |
| + memberComments = new Map<String, String>(); |
| } |
| // Suppress any actual writing to file. This is only for analysis. |
| @@ -166,88 +170,67 @@ class Htmldoc extends doc.Dartdoc { |
| void write(String s) { |
| } |
| - String getRecordedLibraryComment(Library library) { |
| - if (library.name == 'html') { |
| + String getRecordedLibraryComment(LibraryMirror library) { |
| + if (library.simpleName() == 'html') { |
| return libraryComment; |
| } |
| return null; |
| } |
| - String getRecordedTypeComment(Type type) { |
| - if (type.library.name == 'html') { |
| - if (typeComments.containsKey(type.name)) { |
| - return typeComments[type.name]; |
| - } |
| + String getRecordedTypeComment(TypeMirror type) { |
| + if (typeComments.containsKey(type.qualifiedName())) { |
| + return typeComments[type.qualifiedName()]; |
| } |
| return null; |
| } |
| - String getRecordedMemberComment(Member member) { |
| - if (member.library.name == 'html') { |
| - String typeName; |
| - if (member.declaringType != null) { |
| - typeName = member.declaringType.name; |
| - } |
| - if (typeName == null) { |
| - typeName = ''; |
| - } |
| - if (memberComments.containsKey(typeName)) { |
| - Map<String, String> memberMap = memberComments[typeName]; |
| - if (memberMap.containsKey(member.name)) { |
| - return memberMap[member.name]; |
| - } |
| - } |
| + String getRecordedMemberComment(MemberMirror member) { |
| + if (memberComments.containsKey(member.qualifiedName())) { |
| + return memberComments[member.qualifiedName()]; |
| } |
| return null; |
| } |
| // These methods are subclassed and used for internal processing. |
| // Do not invoke outside of this class. |
| - String getLibraryComment(Library library) { |
| + String getLibraryComment(LibraryMirror library) { |
| String comment = super.getLibraryComment(library); |
| libraryComment = comment; |
| return comment; |
| } |
| - String getTypeComment(Type type) { |
| + String getTypeComment(TypeMirror type) { |
| String comment = super.getTypeComment(type); |
| recordTypeComment(type, comment); |
| return comment; |
| } |
| - String getMethodComment(MethodMember method) { |
| + String getMethodComment(MethodMirror method) { |
| String comment = super.getMethodComment(method); |
| recordMemberComment(method, comment); |
| return comment; |
| } |
| - String getFieldComment(FieldMember field) { |
| + String getFieldComment(FieldMirror field) { |
| String comment = super.getFieldComment(field); |
| recordMemberComment(field, comment); |
| return comment; |
| } |
| - void recordTypeComment(Type type, String comment) { |
| + void recordTypeComment(TypeMirror type, String comment) { |
| if (comment != null && comment.contains('@domName')) { |
| // This is not a handwritten comment. |
| return; |
| } |
| - typeComments[type.name] = comment; |
| + typeComments[type.qualifiedName()] = comment; |
| } |
| - void recordMemberComment(Member member, String comment) { |
| + void recordMemberComment(MemberMirror member, String comment) { |
| if (comment != null && comment.contains('@domName')) { |
| // This is not a handwritten comment. |
| return; |
| } |
| - String typeName = member.declaringType.name; |
| - if (typeName == null) |
| - typeName = ''; |
| - if (!memberComments.containsKey(typeName)) { |
| - memberComments[typeName] = new Map<String, String>(); |
| - } |
| - Map<String, String> memberMap = memberComments[typeName]; |
| - memberMap[member.name] = comment; |
| + memberComments[member.qualifiedName()] = comment; |
| } |
| } |
| @@ -352,24 +335,24 @@ class Apidoc extends doc.Dartdoc { |
| '''); |
| } |
| - void docIndexLibrary(Library library) { |
| + void docIndexLibrary(LibraryMirror library) { |
| // TODO(rnystrom): Hackish. The IO libraries reference this but we don't |
| // want it in the docs. |
| - if (library.name == 'dart:nativewrappers') return; |
| + if (library.simpleName() == 'dart:nativewrappers') return; |
| super.docIndexLibrary(library); |
| } |
| - void docLibraryNavigationJson(Library library, Map libraries) { |
| + void docLibraryNavigationJson(LibraryMirror library, Map libraryMap) { |
| // TODO(rnystrom): Hackish. The IO libraries reference this but we don't |
| // want it in the docs. |
| - if (library.name == 'dart:nativewrappers') return; |
| - super.docLibraryNavigationJson(library, libraries); |
| + if (library.simpleName() == 'dart:nativewrappers') return; |
| + super.docLibraryNavigationJson(library, libraryMap); |
| } |
| - void docLibrary(Library library) { |
| + void docLibrary(LibraryMirror library) { |
| // TODO(rnystrom): Hackish. The IO libraries reference this but we don't |
| // want it in the docs. |
| - if (library.name == 'dart:nativewrappers') return; |
| + if (library.simpleName() == 'dart:nativewrappers') return; |
| super.docLibrary(library); |
| } |
| @@ -379,26 +362,26 @@ class Apidoc extends doc.Dartdoc { |
| comment.replaceAll(const RegExp("@([a-zA-Z]+) ([^;]+)(?:;|\$)"), '')); |
| } |
| - String getLibraryComment(Library library) { |
| - if (library.name == 'html') { |
| + String getLibraryComment(LibraryMirror library) { |
| + if (library.simpleName() == 'html') { |
| return htmldoc.libraryComment; |
| } |
| return super.getLibraryComment(library); |
| } |
| - String getTypeComment(Type type) { |
| + String getTypeComment(TypeMirror type) { |
| return _mergeDocs( |
| includeMdnTypeComment(type), super.getTypeComment(type), |
| htmldoc.getRecordedTypeComment(type)); |
| } |
| - String getMethodComment(MethodMember method) { |
| + String getMethodComment(MethodMirror method) { |
| return _mergeDocs( |
| includeMdnMemberComment(method), super.getMethodComment(method), |
| htmldoc.getRecordedMemberComment(method)); |
| } |
| - String getFieldComment(FieldMember field) { |
| + String getFieldComment(FieldMirror field) { |
| return _mergeDocs( |
| includeMdnMemberComment(field), super.getFieldComment(field), |
| htmldoc.getRecordedMemberComment(field)); |
| @@ -431,7 +414,7 @@ class Apidoc extends doc.Dartdoc { |
| return ''; |
| } |
| - void docType(Type type) { |
| + void docType(TypeMirror type) { |
| // Track whether we've inserted MDN content into this page. |
| mdnUrl = null; |
| @@ -467,11 +450,11 @@ class Apidoc extends doc.Dartdoc { |
| * Gets the MDN-scraped docs for [type], or `null` if this type isn't |
| * scraped from MDN. |
| */ |
| - includeMdnTypeComment(Type type) { |
| - if (type.library.name == 'html') { |
| + includeMdnTypeComment(TypeMirror type) { |
| + if (type.library().simpleName() == 'html') { |
| // If it's an HTML type, try to map it to a base DOM type so we can find |
| // the MDN docs. |
| - final domTypes = _diff.htmlTypesToDom[type]; |
| + final domTypes = _diff.htmlTypesToDom[type.qualifiedName()]; |
| // Couldn't find a DOM type. |
| if ((domTypes == null) || (domTypes.length != 1)) return null; |
| @@ -480,12 +463,12 @@ class Apidoc extends doc.Dartdoc { |
| // TODO(rnystrom): Shame there isn't a simpler way to get the one item |
| // out of a singleton Set. |
| type = domTypes.iterator().next(); |
| - } else if (type.library.name != 'dom') { |
| + } else if (type.library().simpleName() != 'dom') { |
| // Not a DOM type. |
| return null; |
| } |
| - final mdnType = mdn[type.name]; |
| + final mdnType = mdn[type.simpleName()]; |
| if (mdnType == null) return null; |
| if (mdnType['skipped'] != null) return null; |
| @@ -498,8 +481,9 @@ class Apidoc extends doc.Dartdoc { |
| * Gets the MDN-scraped docs for [member], or `null` if this type isn't |
| * scraped from MDN. |
| */ |
| - includeMdnMemberComment(Member member) { |
| - if (member.library.name == 'html') { |
| + includeMdnMemberComment(MemberMirror member) { |
| + var library = findLibrary(member); |
| + if (library.simpleName() == 'html') { |
| // If it's an HTML type, try to map it to a base DOM type so we can find |
| // the MDN docs. |
| final domMembers = _diff.htmlToDom[member]; |
| @@ -511,17 +495,17 @@ class Apidoc extends doc.Dartdoc { |
| // TODO(rnystrom): Shame there isn't a simpler way to get the one item |
| // out of a singleton Set. |
| member = domMembers.iterator().next(); |
| - } else if (member.library.name != 'dom') { |
| + } else if (library.simpleName() != 'dom') { |
| // Not a DOM type. |
| return null; |
| } |
| // Ignore top-level functions. |
| - if (member.declaringType.isTop) return null; |
| + if (member.isTopLevel) return null; |
| - final mdnType = mdn[member.declaringType.name]; |
| + final mdnType = mdn[member.surroundingDeclaration().simpleName()]; |
| if (mdnType == null) return null; |
| - var nameToFind = member.name; |
| + var nameToFind = member.simpleName(); |
| if (nameToFind.startsWith(GET_PREFIX)) { |
| nameToFind = nameToFind.substring(GET_PREFIX.length); |
| } |
| @@ -544,14 +528,12 @@ class Apidoc extends doc.Dartdoc { |
| * Returns a link to [member], relative to a type page that may be in a |
| * different library than [member]. |
| */ |
| - String _linkMember(Member member) { |
| - final typeName = member.declaringType.name; |
| - var memberName = '$typeName.${member.name}'; |
| + String _linkMember(MemberMirror member) { |
| + final typeName = member.surroundingDeclaration().simpleName(); |
| + var memberName = '$typeName.${member.simpleName()}'; |
| if (member.isConstructor || member.isFactory) { |
| final separator = member.constructorName == '' ? '' : '.'; |
| memberName = 'new $typeName$separator${member.constructorName}'; |
| - } else if (member.name.startsWith(GET_PREFIX)) { |
| - memberName = '$typeName.${member.name.substring(GET_PREFIX.length)}'; |
| } |
| return a(memberUrl(member), memberName); |