Skip to content

Commit 4ad9268

Browse files
authored
Implement covariant handling for dartdoc (#1782)
* Covariant implementation * dartfmt && rebuild test docs * Fix up test stub that got forgotten * Update test package docs post merge
1 parent 215ca55 commit 4ad9268

File tree

247 files changed

+2997
-2
lines changed

Some content is hidden

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

247 files changed

+2997
-2
lines changed

lib/src/model.dart

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ const Map<String, int> featureOrder = const {
6868
'read-only': 1,
6969
'write-only': 1,
7070
'read / write': 1,
71+
'covariant': 2,
7172
'final': 2,
7273
'inherited': 3,
7374
};
@@ -355,9 +356,17 @@ class Accessor extends ModelElement implements EnclosedElement {
355356
_accessor.enclosingElement, library, packageGraph);
356357
}
357358

359+
@override
360+
Set<String> get features {
361+
if (!isCovariant) return super.features;
362+
return super.features..add('covariant');
363+
}
364+
358365
@override
359366
bool get isCanonical => enclosingCombo.isCanonical;
360367

368+
bool get isCovariant => isSetter && parameters.first.isCovariant;
369+
361370
bool get isInherited => false;
362371

363372
@override
@@ -1621,6 +1630,12 @@ class Field extends ModelElement
16211630
@override
16221631
bool get isConst => _field.isConst;
16231632

1633+
/// Returns true if the FieldElement is covariant, or if the first parameter
1634+
/// for the setter is covariant.
1635+
@override
1636+
bool get isCovariant =>
1637+
setter?.isCovariant == true || (_field as FieldElementImpl).isCovariant;
1638+
16241639
@override
16251640
bool get isFinal {
16261641
/// isFinal returns true for the field even if it has an explicit getter
@@ -1722,9 +1737,12 @@ abstract class GetterSetterCombo implements ModelElement {
17221737
if (readOnly && !isFinal && !isConst) allFeatures.add('read-only');
17231738
if (writeOnly) allFeatures.add('write-only');
17241739
if (readWrite) allFeatures.add('read / write');
1740+
if (isCovariant) allFeatures.add('covariant');
17251741
return allFeatures;
17261742
}
17271743

1744+
bool get isCovariant => false;
1745+
17281746
@override
17291747
ModelElement enclosingElement;
17301748
bool get isInherited;
@@ -3577,6 +3595,9 @@ abstract class ModelElement extends Canonicalization
35773595
buf.write('<span>$annotation</span> ');
35783596
});
35793597
}
3598+
if (param.isCovariant) {
3599+
buf.write('<span>covariant</span> ');
3600+
}
35803601
if (paramModelType is CallableElementTypeMixin) {
35813602
String returnTypeName;
35823603
if (paramModelType.isTypedef) {
@@ -5781,6 +5802,8 @@ class Parameter extends ModelElement implements EnclosedElement {
57815802
return '${enclosingName}-param-${name}';
57825803
}
57835804

5805+
bool get isCovariant => _parameter.isCovariant;
5806+
57845807
bool get isOptional => _parameter.isOptional;
57855808

57865809
bool get isOptionalNamed => _parameter.isNamed;

test/model_test.dart

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2210,6 +2210,7 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
22102210
Field documentedPartialFieldInSubclassOnly;
22112211
Field ExtraSpecialListLength;
22122212
Field aProperty;
2213+
Field covariantField, covariantSetter;
22132214

22142215
setUp(() {
22152216
c = exLibrary.classes.firstWhere((c) => c.name == 'Apple');
@@ -2270,6 +2271,22 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
22702271
.firstWhere((c) => c.name == 'AClassWithFancyProperties')
22712272
.allInstanceProperties
22722273
.firstWhere((f) => f.name == 'aProperty');
2274+
covariantField = fakeLibrary.classes
2275+
.firstWhere((c) => c.name == 'CovariantMemberParams')
2276+
.allInstanceProperties
2277+
.firstWhere((f) => f.name == 'covariantField');
2278+
covariantSetter = fakeLibrary.classes
2279+
.firstWhere((c) => c.name == 'CovariantMemberParams')
2280+
.allInstanceProperties
2281+
.firstWhere((f) => f.name == 'covariantSetter');
2282+
});
2283+
2284+
test('covariant fields are recognized', () {
2285+
expect(covariantField.isCovariant, isTrue);
2286+
expect(covariantField.featuresAsString, contains('covariant'));
2287+
expect(covariantSetter.isCovariant, isTrue);
2288+
expect(covariantSetter.setter.isCovariant, isTrue);
2289+
expect(covariantSetter.featuresAsString, contains('covariant'));
22732290
});
22742291

22752292
test('indentation is not lost inside indented code samples', () {
@@ -2987,16 +3004,21 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
29873004
});
29883005

29893006
group('Parameter', () {
2990-
Class c, fClass;
3007+
Class c, fClass, CovariantMemberParams;
29913008
Method isGreaterThan,
29923009
asyncM,
29933010
methodWithGenericParam,
29943011
paramFromExportLib,
2995-
methodWithTypedefParam;
3012+
methodWithTypedefParam,
3013+
applyCovariantParams;
29963014
Parameter intNumber, intCheckOptional;
29973015

29983016
setUp(() {
29993017
c = exLibrary.classes.firstWhere((c) => c.name == 'Apple');
3018+
CovariantMemberParams = fakeLibrary.classes
3019+
.firstWhere((c) => c.name == 'CovariantMemberParams');
3020+
applyCovariantParams = CovariantMemberParams.allInstanceMethods
3021+
.firstWhere((m) => m.name == 'applyCovariantParams');
30003022
paramFromExportLib =
30013023
c.instanceMethods.singleWhere((m) => m.name == 'paramFromExportLib');
30023024
isGreaterThan =
@@ -3014,6 +3036,12 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
30143036
.singleWhere((m) => m.name == 'methodWithTypedefParam');
30153037
});
30163038

3039+
test('covariant parameters render correctly', () {
3040+
expect(applyCovariantParams.parameters, hasLength(2));
3041+
expect(applyCovariantParams.linkedParamsLines,
3042+
contains('<span>covariant</span>'));
3043+
});
3044+
30173045
test('has parameters', () {
30183046
expect(isGreaterThan.parameters, hasLength(2));
30193047
});

testing/test_package/lib/fake.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -754,6 +754,16 @@ class WithGetterAndSetter {
754754
void set lengthX(int _length) {}
755755
}
756756

757+
/// Test that we can properly handle covariant member parameters.
758+
class CovariantMemberParams {
759+
covariant int covariantField;
760+
761+
set covariantSetter(covariant int x) {}
762+
763+
void applyCovariantParams(
764+
covariant num aNumber, covariant dynamic aDynamic) {}
765+
}
766+
757767
/// I have a generic and it extends [Foo2]
758768
class HasGenericWithExtends<T extends Foo2> {}
759769

testing/test_package_docs/fake/ABaseClass-class.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ <h5>fake library</h5>
5555
<li><a href="fake/ConstantClass-class.html">ConstantClass</a></li>
5656
<li><a href="fake/ConstructorTester-class.html">ConstructorTester</a></li>
5757
<li><a href="fake/Cool-class.html">Cool</a></li>
58+
<li><a href="fake/CovariantMemberParams-class.html">CovariantMemberParams</a></li>
5859
<li><a href="fake/DocumentWithATable-class.html">DocumentWithATable</a></li>
5960
<li><a href="fake/ExtendsFutureVoid-class.html">ExtendsFutureVoid</a></li>
6061
<li><a href="fake/ExtraSpecialList-class.html">ExtraSpecialList</a></li>

testing/test_package_docs/fake/AClassUsingASuperMixin-class.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ <h5>fake library</h5>
5555
<li><a href="fake/ConstantClass-class.html">ConstantClass</a></li>
5656
<li><a href="fake/ConstructorTester-class.html">ConstructorTester</a></li>
5757
<li><a href="fake/Cool-class.html">Cool</a></li>
58+
<li><a href="fake/CovariantMemberParams-class.html">CovariantMemberParams</a></li>
5859
<li><a href="fake/DocumentWithATable-class.html">DocumentWithATable</a></li>
5960
<li><a href="fake/ExtendsFutureVoid-class.html">ExtendsFutureVoid</a></li>
6061
<li><a href="fake/ExtraSpecialList-class.html">ExtraSpecialList</a></li>

testing/test_package_docs/fake/AClassUsingNewStyleMixin-class.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ <h5>fake library</h5>
5555
<li><a href="fake/ConstantClass-class.html">ConstantClass</a></li>
5656
<li><a href="fake/ConstructorTester-class.html">ConstructorTester</a></li>
5757
<li><a href="fake/Cool-class.html">Cool</a></li>
58+
<li><a href="fake/CovariantMemberParams-class.html">CovariantMemberParams</a></li>
5859
<li><a href="fake/DocumentWithATable-class.html">DocumentWithATable</a></li>
5960
<li><a href="fake/ExtendsFutureVoid-class.html">ExtendsFutureVoid</a></li>
6061
<li><a href="fake/ExtraSpecialList-class.html">ExtraSpecialList</a></li>

testing/test_package_docs/fake/AClassWithFancyProperties-class.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ <h5>fake library</h5>
5555
<li><a href="fake/ConstantClass-class.html">ConstantClass</a></li>
5656
<li><a href="fake/ConstructorTester-class.html">ConstructorTester</a></li>
5757
<li><a href="fake/Cool-class.html">Cool</a></li>
58+
<li><a href="fake/CovariantMemberParams-class.html">CovariantMemberParams</a></li>
5859
<li><a href="fake/DocumentWithATable-class.html">DocumentWithATable</a></li>
5960
<li><a href="fake/ExtendsFutureVoid-class.html">ExtendsFutureVoid</a></li>
6061
<li><a href="fake/ExtraSpecialList-class.html">ExtraSpecialList</a></li>

testing/test_package_docs/fake/AMixinCallingSuper-class.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ <h5>fake library</h5>
5555
<li><a href="fake/ConstantClass-class.html">ConstantClass</a></li>
5656
<li><a href="fake/ConstructorTester-class.html">ConstructorTester</a></li>
5757
<li><a href="fake/Cool-class.html">Cool</a></li>
58+
<li><a href="fake/CovariantMemberParams-class.html">CovariantMemberParams</a></li>
5859
<li><a href="fake/DocumentWithATable-class.html">DocumentWithATable</a></li>
5960
<li><a href="fake/ExtendsFutureVoid-class.html">ExtendsFutureVoid</a></li>
6061
<li><a href="fake/ExtraSpecialList-class.html">ExtraSpecialList</a></li>

testing/test_package_docs/fake/ATypeTakingClass-class.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ <h5>fake library</h5>
5555
<li><a href="fake/ConstantClass-class.html">ConstantClass</a></li>
5656
<li><a href="fake/ConstructorTester-class.html">ConstructorTester</a></li>
5757
<li><a href="fake/Cool-class.html">Cool</a></li>
58+
<li><a href="fake/CovariantMemberParams-class.html">CovariantMemberParams</a></li>
5859
<li><a href="fake/DocumentWithATable-class.html">DocumentWithATable</a></li>
5960
<li><a href="fake/ExtendsFutureVoid-class.html">ExtendsFutureVoid</a></li>
6061
<li><a href="fake/ExtraSpecialList-class.html">ExtraSpecialList</a></li>

testing/test_package_docs/fake/ATypeTakingClassMixedIn-class.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ <h5>fake library</h5>
5555
<li><a href="fake/ConstantClass-class.html">ConstantClass</a></li>
5656
<li><a href="fake/ConstructorTester-class.html">ConstructorTester</a></li>
5757
<li><a href="fake/Cool-class.html">Cool</a></li>
58+
<li><a href="fake/CovariantMemberParams-class.html">CovariantMemberParams</a></li>
5859
<li><a href="fake/DocumentWithATable-class.html">DocumentWithATable</a></li>
5960
<li><a href="fake/ExtendsFutureVoid-class.html">ExtendsFutureVoid</a></li>
6061
<li><a href="fake/ExtraSpecialList-class.html">ExtraSpecialList</a></li>

0 commit comments

Comments
 (0)