Skip to content

Commit 820e9f0

Browse files
committed
fix a bug generating windows element links
1 parent 23c6f58 commit 820e9f0

File tree

6 files changed

+45
-47
lines changed

6 files changed

+45
-47
lines changed

lib/markdown_processor.dart

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -253,21 +253,18 @@ String _getMatchingLink(
253253
}
254254
}
255255
}
256-
if (refElement == null) {
257-
return null;
258-
}
256+
257+
if (refElement == null) return null;
258+
259259
var refLibrary;
260-
try {
261-
var e = refElement is ClassMemberElement ||
262-
refElement is PropertyAccessorElement
263-
? refElement.enclosingElement
264-
: refElement;
265-
refLibrary =
266-
element.package.libraries.firstWhere((lib) => lib.hasInNamespace(e));
267-
} on StateError {}
260+
var e = refElement is ClassMemberElement ||
261+
refElement is PropertyAccessorElement
262+
? refElement.enclosingElement
263+
: refElement;
264+
refLibrary = element.package.libraries.firstWhere(
265+
(lib) => lib.hasInNamespace(e), orElse: () => null);
268266
if (refLibrary != null) {
269-
var e = new ModelElement.from(refElement, refLibrary);
270-
return e.href;
267+
return new ModelElement.from(refElement, refLibrary).href;
271268
}
272269
return null;
273270
}

lib/src/model.dart

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,7 @@ abstract class ModelElement implements Comparable {
139139

140140
String get documentationAsHtml {
141141
if (_documentationAsHtml != null) return _documentationAsHtml;
142-
143142
_documentationAsHtml = processDocsAsMarkdown(this);
144-
145143
return _documentationAsHtml;
146144
}
147145

@@ -491,7 +489,10 @@ class Library extends ModelElement {
491489
bool hasInNamespace(Element element) {
492490
if (_namespace == null) _buildExportedNamespace();
493491
var e = _namespace.get(element.name);
494-
return e == element;
492+
// Fix for #587, comparison between elements isn't reliable.
493+
//return e == element;
494+
return e.runtimeType == element.runtimeType &&
495+
e.nameOffset == element.nameOffset;
495496
}
496497

497498
String get name {
@@ -1163,19 +1164,23 @@ class Field extends ModelElement {
11631164
String get _computeDocumentationComment {
11641165
var buffer = new StringBuffer();
11651166
if (hasGetter) {
1166-
buffer.write(_field.getter.computeDocumentationComment());
1167+
String docs = _field.getter.computeDocumentationComment();
1168+
if (docs != null) buffer.write(docs);
11671169
}
11681170

11691171
if (hasSetter) {
1170-
if (buffer.isNotEmpty) buffer.write('\n\n');
1171-
buffer.write(_field.setter.computeDocumentationComment());
1172+
String docs = _field.setter.computeDocumentationComment();
1173+
if (docs != null) {
1174+
if (buffer.isNotEmpty) buffer.write('\n\n');
1175+
buffer.write(docs);
1176+
}
11721177
}
11731178

1174-
if (buffer.isEmpty) {
1175-
buffer.write(_field.computeDocumentationComment());
1176-
} else {
1177-
return buffer.toString();
1178-
}
1179+
if (hasGetter || hasSetter) return buffer.toString();
1180+
1181+
String docs = _field.computeDocumentationComment();
1182+
if (docs != null) buffer.write(docs);
1183+
return buffer.toString();
11791184
}
11801185

11811186
void _setModelType() {

test/model_test.dart

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -222,22 +222,16 @@ void main() {
222222
'<a href="ex/Apple/Apple.fromString.html">new Apple.fromString</a>'));
223223
});
224224

225-
// On Windows, this test fails due to not being able to find the library that
226-
// contains class Apple, checking in namespace does not work.
227-
// TODO(keertip): figure out why the element returned from namespace is not
228-
// the same as the one we are checking for.
229-
if (!Platform.isWindows) {
230-
test('reference to class from another library', () {
231-
String comment = superAwesomeClass.documentationAsHtml;
232-
expect(comment, contains('<a href="ex/Apple-class.html">Apple</a>'));
233-
});
234-
235-
test('reference to method', () {
236-
String comment = foo2.documentationAsHtml;
237-
expect(comment, equals(
238-
'<p>link to method from class <a href="ex/Apple/m.html">Apple.m</a></p>'));
239-
});
240-
}
225+
test('reference to class from another library', () {
226+
String comment = superAwesomeClass.documentationAsHtml;
227+
expect(comment, contains('<a href="ex/Apple-class.html">Apple</a>'));
228+
});
229+
230+
test('reference to method', () {
231+
String comment = foo2.documentationAsHtml;
232+
expect(comment, equals(
233+
'<p>link to method from class <a href="ex/Apple/m.html">Apple.m</a></p>'));
234+
});
241235

242236
test('legacy code blocks render correctly', () {
243237
expect(testingCodeSyntaxInOneLiners.oneLineDoc,

test/package_meta_test.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,7 @@ void main() {
6363
});
6464

6565
test('getReadmeContents()', () {
66-
// TODO: This is null for SDK 1.10.
67-
//expect(p.getReadmeContents(), isNotNull);
66+
expect(p.getReadmeContents(), isNotNull);
6867
});
6968

7069
test('getLicenseContents()', () {

test/template_test.dart

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ void main() {
2525
});
2626

2727
test('render', () {
28-
expect(sitemap({'links': [{'name': 'somefile.html'}]}), '''
28+
expect(_normalize(sitemap({'links': [{'name': 'somefile.html'}]})), '''
2929
<?xml version="1.0" encoding="UTF-8"?>
3030
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3131
<url>
@@ -36,9 +36,9 @@ void main() {
3636
});
3737

3838
test('substitute multiple links', () {
39-
expect(sitemap({
39+
expect(_normalize(sitemap({
4040
'links': [{'name': 'somefile.html'}, {'name': 'asecondfile.html'}]
41-
}), '''
41+
})), '''
4242
<?xml version="1.0" encoding="UTF-8"?>
4343
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
4444
<url>
@@ -52,10 +52,10 @@ void main() {
5252
});
5353

5454
test('url and file name', () {
55-
expect(sitemap({
55+
expect(_normalize(sitemap({
5656
'url': 'http://mydoc.com',
5757
'links': [{'name': 'somefile.html'}]
58-
}), '''
58+
})), '''
5959
<?xml version="1.0" encoding="UTF-8"?>
6060
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
6161
<url>
@@ -67,3 +67,5 @@ void main() {
6767
});
6868
});
6969
}
70+
71+
String _normalize(String str) => str.replaceAll('\r\n', '\n');

test_package/lib/example.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class Apple {
5151

5252
void paramFromExportLib(Helper helper) {}
5353
}
54+
5455
/// Extends class [Apple], use [new Apple] or [new Apple.fromString]
5556
class B extends Apple with Cat {
5657
List<String> list;

0 commit comments

Comments
 (0)