Skip to content

Commit ce4284c

Browse files
authored
Fix navigation and constructor docs to include class generics (#1556)
* Add type parameters for constructors * And make navigation consistently include generic types in the class. * Update test package docs post-merge
1 parent 2b175f8 commit ce4284c

File tree

277 files changed

+1387
-211
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

277 files changed

+1387
-211
lines changed

lib/src/html/template_data.dart

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,13 @@ abstract class TemplateData<T extends Documentable> {
3636
String get kind => self is ModelElement ? (self as ModelElement).kind : null;
3737

3838
List get navLinks;
39-
Documentable get parent => navLinks.isNotEmpty ? navLinks.last : null;
39+
List get navLinksWithGenerics => [];
40+
Documentable get parent {
41+
if (navLinksWithGenerics.isEmpty) {
42+
return navLinks.isNotEmpty ? navLinks.last : null;
43+
}
44+
return navLinksWithGenerics.last;
45+
}
4046

4147
bool get includeVersion => false;
4248

@@ -236,7 +242,9 @@ class ConstructorTemplateData extends TemplateData<Constructor> {
236242
String get layoutTitle => _layoutTitle(
237243
constructor.name, constructor.fullKind, constructor.isDeprecated);
238244
@override
239-
List get navLinks => [package, library, clazz];
245+
List get navLinks => [package, library];
246+
@override
247+
List get navLinksWithGenerics => [clazz];
240248
@override
241249
Iterable<Subnav> getSubNavItems() => _gatherSubnavForInvokable(constructor);
242250
@override
@@ -331,7 +339,9 @@ class MethodTemplateData extends TemplateData<Method> {
331339
'API docs for the ${method.name} method from the ${clazz.name} class, '
332340
'for the Dart programming language.';
333341
@override
334-
List get navLinks => [package, library, clazz];
342+
List get navLinks => [package, library];
343+
@override
344+
List get navLinksWithGenerics => [clazz];
335345
@override
336346
Iterable<Subnav> getSubNavItems() => _gatherSubnavForInvokable(method);
337347
@override
@@ -361,7 +371,9 @@ class PropertyTemplateData extends TemplateData<Field> {
361371
'API docs for the ${property.name} $type from the ${clazz.name} class, '
362372
'for the Dart programming language.';
363373
@override
364-
List get navLinks => [package, library, clazz];
374+
List get navLinks => [package, library];
375+
@override
376+
List get navLinksWithGenerics => [clazz];
365377
@override
366378
String get htmlBase => '../..';
367379

lib/src/model.dart

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,11 +1126,15 @@ class Class extends ModelElement
11261126
}
11271127

11281128
class Constructor extends ModelElement
1129-
with SourceCodeMixin
1129+
with SourceCodeMixin, TypeParameters
11301130
implements EnclosedElement {
11311131
Constructor(ConstructorElement element, Library library)
11321132
: super(element, library, null);
11331133

1134+
@override
1135+
// TODO(jcollins-g): Revisit this when dart-lang/sdk#31517 is implemented.
1136+
List<TypeParameter> get typeParameters => (enclosingElement as Class).typeParameters;
1137+
11341138
@override
11351139
ModelElement get enclosingElement =>
11361140
new ModelElement.from(_constructor.enclosingElement, library);
@@ -1172,6 +1176,20 @@ class Constructor extends ModelElement
11721176
return _name;
11731177
}
11741178

1179+
String _nameWithGenerics;
1180+
@override
1181+
String get nameWithGenerics {
1182+
if (_nameWithGenerics == null) {
1183+
String constructorName = element.name;
1184+
if (constructorName.isEmpty) {
1185+
_nameWithGenerics = '${enclosingElement.name}${genericParameters}';
1186+
} else {
1187+
_nameWithGenerics = '${enclosingElement.name}${genericParameters}.$constructorName';
1188+
}
1189+
}
1190+
return _nameWithGenerics;
1191+
}
1192+
11751193
String get shortName {
11761194
if (name.contains('.')) {
11771195
return name.substring(_constructor.enclosingElement.name.length + 1);
@@ -4689,8 +4707,6 @@ abstract class SourceCodeMixin {
46894707
}
46904708

46914709
abstract class TypeParameters implements Nameable {
4692-
Element get element;
4693-
46944710
String get nameWithGenerics => '$name$genericParameters';
46954711

46964712
String get genericParameters {

lib/templates/_head.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@
3737
{{#navLinks}}
3838
<li><a href="{{href}}">{{name}}</a></li>
3939
{{/navLinks}}
40+
{{#navLinksWithGenerics}}
41+
<li><a href="{{href}}">{{name}}{{{genericParameters}}}</a></li>
42+
{{/navLinksWithGenerics}}
4043
{{^hasHomepage}}
4144
<li class="self-crumb">{{{ layoutTitle }}}</li>
4245
{{/hasHomepage}}

lib/templates/constructor.html

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,17 @@ <h5>{{parent.kind}} {{parent.name}}</h5>
88
<div class="col-xs-12 col-sm-9 col-md-8 main-content">
99
{{#constructor}}
1010
<section class="multi-line-signature">
11+
{{#hasAnnotations}}
12+
<div>
13+
<ol class="annotation-list">
14+
{{#annotations}}
15+
<li>{{{.}}}</li>
16+
{{/annotations}}
17+
</ol>
18+
</div>
19+
{{/hasAnnotations}}
1120
{{#isConst}}const{{/isConst}}
12-
{{>name_summary}}(<wbr>{{#hasParameters}}{{{linkedParamsLines}}}{{/hasParameters}})
21+
<span class="name {{#isDeprecated}}deprecated{{/isDeprecated}}">{{{nameWithGenerics}}}</span>(<wbr>{{#hasParameters}}{{{linkedParamsLines}}}{{/hasParameters}})
1322
</section>
1423

1524
{{>documentation}}

test/model_test.dart

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1915,15 +1915,26 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
19151915
group('Constructor', () {
19161916
Constructor appleDefaultConstructor, constCatConstructor;
19171917
Constructor appleConstructorFromString;
1918-
Class apple, constCat;
1918+
Constructor constructorTesterDefault, constructorTesterFromSomething;
1919+
Class apple, constCat, constructorTester;
19191920
setUp(() {
19201921
apple = exLibrary.classes.firstWhere((c) => c.name == 'Apple');
19211922
constCat = exLibrary.classes.firstWhere((c) => c.name == 'ConstantCat');
1923+
constructorTester = fakeLibrary.classes.firstWhere((c) => c.name == 'ConstructorTester');
19221924
constCatConstructor = constCat.constructors[0];
19231925
appleDefaultConstructor =
19241926
apple.constructors.firstWhere((c) => c.name == 'Apple');
19251927
appleConstructorFromString =
19261928
apple.constructors.firstWhere((c) => c.name == 'Apple.fromString');
1929+
constructorTesterDefault =
1930+
constructorTester.constructors.firstWhere((c) => c.name == 'ConstructorTester');
1931+
constructorTesterFromSomething =
1932+
constructorTester.constructors.firstWhere((c) => c.name == 'ConstructorTester.fromSomething');
1933+
});
1934+
1935+
test('displays generic parameters correctly', () {
1936+
expect(constructorTesterDefault.nameWithGenerics, 'ConstructorTester&lt;A, B&gt;');
1937+
expect(constructorTesterFromSomething.nameWithGenerics, 'ConstructorTester&lt;A, B&gt;.fromSomething');
19271938
});
19281939

19291940
test('has a fully qualified name', () {

testing/test_package/lib/fake.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@ abstract class BaseThingy2 implements BaseThingy {
7474
ImplementingThingy2 get aImplementingThingy;
7575
}
7676

77+
class ConstructorTester<A, B> {
78+
ConstructorTester(String param1) {}
79+
ConstructorTester.fromSomething(A foo) {}
80+
}
81+
7782
class HasGenerics<X, Y, Z> {
7883
HasGenerics(X x, Y y, Z z) {}
7984

testing/test_package_docs/ex/AnotherParameterizedClass/AnotherParameterizedClass.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<ol class="breadcrumbs gt-separated dark hidden-xs">
2626
<li><a href="index.html">test_package</a></li>
2727
<li><a href="ex/ex-library.html">ex</a></li>
28-
<li><a href="ex/AnotherParameterizedClass-class.html">AnotherParameterizedClass</a></li>
28+
<li><a href="ex/AnotherParameterizedClass-class.html">AnotherParameterizedClass&lt;B&gt;</a></li>
2929
<li class="self-crumb">constructor AnotherParameterizedClass</li>
3030
</ol>
3131
<div class="self-name">AnotherParameterizedClass</div>
@@ -63,7 +63,7 @@ <h5>class AnotherParameterizedClass</h5>
6363
<div class="col-xs-12 col-sm-9 col-md-8 main-content">
6464
<section class="multi-line-signature">
6565

66-
<span class="name ">AnotherParameterizedClass</span>(<wbr>)
66+
<span class="name ">AnotherParameterizedClass&lt;B&gt;</span>(<wbr>)
6767
</section>
6868

6969

testing/test_package_docs/ex/AnotherParameterizedClass/hashCode.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<ol class="breadcrumbs gt-separated dark hidden-xs">
2626
<li><a href="index.html">test_package</a></li>
2727
<li><a href="ex/ex-library.html">ex</a></li>
28-
<li><a href="ex/AnotherParameterizedClass-class.html">AnotherParameterizedClass</a></li>
28+
<li><a href="ex/AnotherParameterizedClass-class.html">AnotherParameterizedClass&lt;B&gt;</a></li>
2929
<li class="self-crumb">property hashCode</li>
3030
</ol>
3131
<div class="self-name">hashCode</div>

testing/test_package_docs/ex/AnotherParameterizedClass/noSuchMethod.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<ol class="breadcrumbs gt-separated dark hidden-xs">
2626
<li><a href="index.html">test_package</a></li>
2727
<li><a href="ex/ex-library.html">ex</a></li>
28-
<li><a href="ex/AnotherParameterizedClass-class.html">AnotherParameterizedClass</a></li>
28+
<li><a href="ex/AnotherParameterizedClass-class.html">AnotherParameterizedClass&lt;B&gt;</a></li>
2929
<li class="self-crumb">method noSuchMethod</li>
3030
</ol>
3131
<div class="self-name">noSuchMethod</div>

testing/test_package_docs/ex/AnotherParameterizedClass/operator_equals.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<ol class="breadcrumbs gt-separated dark hidden-xs">
2626
<li><a href="index.html">test_package</a></li>
2727
<li><a href="ex/ex-library.html">ex</a></li>
28-
<li><a href="ex/AnotherParameterizedClass-class.html">AnotherParameterizedClass</a></li>
28+
<li><a href="ex/AnotherParameterizedClass-class.html">AnotherParameterizedClass&lt;B&gt;</a></li>
2929
<li class="self-crumb">method operator ==</li>
3030
</ol>
3131
<div class="self-name">operator ==</div>

0 commit comments

Comments
 (0)