Chromium Code Reviews| Index: utils/dartdoc/dartdoc.dart |
| diff --git a/utils/dartdoc/dartdoc.dart b/utils/dartdoc/dartdoc.dart |
| index 4e0f7a6f2cddf29311041df15562cc39ddec25f8..2c52a74b1b41884d6dc422434c6bbc44149e5f61 100644 |
| --- a/utils/dartdoc/dartdoc.dart |
| +++ b/utils/dartdoc/dartdoc.dart |
| @@ -791,7 +791,7 @@ class Dartdoc { |
| return anchor; |
| } |
| - findMember(Type type) { |
| + findMember(Type type, String name) { |
|
Bob Nystrom
2012/01/10 00:40:41
Shadowing name here, makes this already-confusing
nweiz
2012/01/10 01:51:55
Done.
|
| final member = type.members[name]; |
| if (member == null) return null; |
| @@ -818,21 +818,48 @@ class Dartdoc { |
| // See if it's another member of the current type. |
| if (type != null) { |
| - final member = findMember(type); |
| + final member = findMember(type, name); |
| if (member != null) { |
| return makeLink(memberUrl(member)); |
| } |
| } |
| - // See if it's another type in the current library. |
| + // See if it's another type or a member of another type in the current |
| + // library. |
| if (library != null) { |
| + // See if it's a constructor |
| + final constructorLink = (() { |
| + if (!name.startsWith('new ')) return; |
| + final classAndName = name.substring(4).split('.'); |
|
Bob Nystrom
2012/01/10 00:40:41
I think a regex would be simpler here: 'new (\w+).
nweiz
2012/01/10 01:51:55
Done.
|
| + if (classAndName.length > 2) return; |
| + final type = library.types[classAndName[0]]; |
| + if (type == null) return; |
| + final constructor = type.getConstructor( |
| + classAndName.length == 2 ? classAndName[1] : ''); |
| + if (constructor == null) return; |
| + return makeLink(memberUrl(constructor)); |
| + })(); |
|
Bob Nystrom
2012/01/10 00:40:41
This is clever, but perverse. :) If using a regex
nweiz
2012/01/10 01:51:55
I had this as a local named function before this,
|
| + if (constructorLink != null) return constructorLink; |
| + |
| + // See if it's a member of another type |
| + final foreignMemberLink = (() { |
| + final nameAndMember = name.split('.'); |
| + if (nameAndMember.length != 2) return; |
| + final type = library.types[nameAndMember[0]]; |
| + if (type == null) return; |
| + final member = findMember(type, nameAndMember[1]); |
| + if (member == null) return; |
| + return makeLink(memberUrl(member)); |
| + })(); |
| + if (foreignMemberLink != null) return foreignMemberLink; |
| + |
| final type = library.types[name]; |
| if (type != null) { |
| return makeLink(typeUrl(type)); |
| } |
| // See if it's a top-level member in the current library. |
| - final member = findMember(library.topType); |
| + final member = findMember(library.topType, name); |
| if (member != null) { |
| return makeLink(memberUrl(member)); |
| } |