Skip to content

Commit f480e0b

Browse files
authored
Fix multiple issues with properties and top level variables (#1466)
* a little debug code * intermediate state: things mostly work, but a lot of private constants showing up as broken links. * intermediate state: debugging angular * intermediate state. things more or less work but are messy. * Screenshot worthy. * tests closer now * Tests pass! * fix up element search * beginnings of unit tests * Add new tests, and they pass. * Add stranded files. * Cleanup + dartfmt * Minor cleanups * More cleanups and simplification * rebuild docs * Add a test for extended docs for explicit getter/setter fields * Test tweaks and dartfmt * simplify an if statement * recover some performance * get back a little more performance * dartfmt * Fix minor problem with sdk build * dartfmt * Fix warning generation on non-canonical FieldElements * Add review comments
1 parent 1b1ee38 commit f480e0b

33 files changed

+1017
-278
lines changed

lib/dartdoc.dart

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -220,9 +220,8 @@ class DartDoc {
220220
{String referredFrom}) {
221221
// Ordinarily this would go in [Package.warn], but we don't actually know what
222222
// ModelElement to warn on yet.
223-
Locatable referredFromElement;
224223
Locatable warnOnElement;
225-
Set<Locatable> referredFromElements;
224+
Set<Locatable> referredFromElements = new Set();
226225
Set<Locatable> warnOnElements;
227226

228227
// Make all paths relative to origin.
@@ -234,19 +233,14 @@ class DartDoc {
234233
referredFrom = path.relative(referredFrom, from: origin);
235234
}
236235
// Source paths are always relative.
237-
referredFromElements = _hrefs[referredFrom];
236+
if (_hrefs[referredFrom] != null) {
237+
referredFromElements.addAll(_hrefs[referredFrom]);
238+
}
238239
}
239240
warnOnElements = _hrefs[warnOn];
240241

241-
if (referredFromElements != null) {
242-
if (referredFromElements.any((e) => e.isCanonical)) {
243-
referredFromElement =
244-
referredFromElements.firstWhere((e) => e.isCanonical);
245-
} else {
246-
// If we don't have a canonical element, just pick one.
247-
referredFromElement =
248-
referredFromElements.isEmpty ? null : referredFromElements.first;
249-
}
242+
if (referredFromElements.any((e) => e.isCanonical)) {
243+
referredFromElements.removeWhere((e) => !e.isCanonical);
250244
}
251245
if (warnOnElements != null) {
252246
if (warnOnElements.any((e) => e.isCanonical)) {
@@ -257,12 +251,12 @@ class DartDoc {
257251
}
258252
}
259253

260-
if (referredFromElement == null && referredFrom == 'index.html')
261-
referredFromElement = package;
254+
if (referredFromElements.isEmpty && referredFrom == 'index.html')
255+
referredFromElements.add(package);
262256
String message = warnOn;
263257
if (referredFrom == 'index.json') message = '$warnOn (from index.json)';
264258
package.warnOnElement(warnOnElement, kind,
265-
message: message, referredFrom: referredFromElement);
259+
message: message, referredFrom: referredFromElements);
266260
}
267261

268262
void _doOrphanCheck(Package package, String origin, Set<String> visited) {

lib/src/html/html_generator_instance.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ class HtmlGeneratorInstance implements HtmlOptions {
102102
// TODO(jcollins-g): consider refactor so that only the canonical
103103
// ModelElements show up in these lists
104104
if (!clazz.isCanonical) continue;
105+
105106
generateClass(package, lib, clazz);
106107

107108
for (var constructor in clazz.constructors) {

lib/src/markdown_processor.dart

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -292,10 +292,25 @@ MatchingLinkResult _getMatchingLinkElement(
292292
if (refModelElement != null) {
293293
return new MatchingLinkResult(refModelElement, null);
294294
}
295-
refModelElement = new ModelElement.from(searchElement, refLibrary);
295+
// From this point on, we haven't been able to find a canonical ModelElement.
296+
// So in this case, just find any ModelElement we can.
297+
Accessor getter;
298+
Accessor setter;
299+
if (searchElement is FieldElement) {
300+
// TODO(jcollins-g): consolidate field element construction with inheritance
301+
// checking.
302+
if (searchElement.getter != null) {
303+
getter = new ModelElement.from(searchElement.getter, refLibrary);
304+
}
305+
if (searchElement.setter != null) {
306+
setter = new ModelElement.from(searchElement.setter, refLibrary);
307+
}
308+
}
309+
refModelElement = new ModelElement.from(searchElement, refLibrary,
310+
getter: getter, setter: setter);
296311
if (!refModelElement.isCanonical) {
297-
refModelElement.warn(PackageWarning.noCanonicalFound,
298-
referredFrom: element);
312+
refModelElement
313+
.warn(PackageWarning.noCanonicalFound, referredFrom: [element]);
299314
// Don't warn about doc references because that's covered by the no
300315
// canonical library found message.
301316
return new MatchingLinkResult(null, null, warn: false);

0 commit comments

Comments
 (0)