Skip to content

Commit 7c68375

Browse files
authored
Fix members not being marked as inherited in sidebars - Fixes #2472 (#2473)
* Fix members not being marked as inherited in sidebars - Fixes #2472 * Fix operator section being reported as inherited always * Only include pub instance operators * Remove unnecessary docs specifying methods only for use in mustache templates * Add test for public inherited instance operators method addition
1 parent 446b698 commit 7c68375

File tree

5 files changed

+35
-22
lines changed

5 files changed

+35
-22
lines changed

lib/src/model/class.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ class Class extends Container
8585
Iterable<Operator> get instanceOperators =>
8686
quiver.concat([super.instanceOperators, inheritedOperators]);
8787

88+
@override
89+
bool get publicInheritedInstanceOperators =>
90+
publicInstanceOperators.every((f) => f.isInherited);
91+
8892
List<ModelElement> _allModelElements;
8993

9094
@override
@@ -249,10 +253,6 @@ class Class extends Container
249253
return _inheritedOperators;
250254
}
251255

252-
@override
253-
Iterable<Operator> get publicInheritedInstanceOperators =>
254-
model_utils.filterNonPublic(inheritedOperators);
255-
256256
Iterable<Field> get inheritedFields => allFields.where((f) => f.isInherited);
257257

258258
Iterable<Field> get publicInheritedFields =>

lib/src/model/container.dart

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ abstract class Container extends ModelElement with TypeParameters {
4141
bool get isClassOrExtension => isClass || isExtension;
4242
bool get isEnum =>
4343
element is ClassElement && (element as ClassElement).isEnum;
44+
bool get isClassOrEnum => isClass || isEnum;
4445
bool get isMixin =>
4546
element is ClassElement && (element as ClassElement).isMixin;
4647

@@ -65,16 +66,13 @@ abstract class Container extends ModelElement with TypeParameters {
6566
.toList(growable: false);
6667

6768
/// Whether all instance fields are inherited.
68-
///
69-
/// This is only used in mustache templates.
7069
bool get publicInheritedInstanceFields => false;
7170

7271
/// Whether all instance methods are inherited.
73-
///
74-
/// This is only used in mustache templates.
7572
bool get publicInheritedInstanceMethods => false;
7673

77-
Iterable<Operator> get publicInheritedInstanceOperators => [];
74+
/// Whether all instance operators are inherited.
75+
bool get publicInheritedInstanceOperators => false;
7876

7977
@nonVirtual
8078
bool get hasPublicInstanceMethods =>

lib/templates/html/_sidebar_for_container.html

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,25 @@
11
<ol>
22
{{#container}}
33

4+
{{#isClass}}
5+
{{#hasPublicConstructors}}
6+
<li class="section-title"><a href="{{{href}}}#constructors">Constructors</a></li>
7+
{{#publicConstructorsSorted}}
8+
<li><a{{#isDeprecated}} class="deprecated"{{/isDeprecated}} href="{{{href}}}">{{shortName}}</a></li>
9+
{{/publicConstructorsSorted}}
10+
{{/hasPublicConstructors}}
11+
{{/isClass}}
12+
413
{{#isEnum}}
514
{{#hasPublicConstantFields}}
615
<li class="section-title"><a href="{{{href}}}#constants">Constants</a></li>
716
{{#publicConstantFieldsSorted}}
817
<li>{{{linkedName}}}</li>
918
{{/publicConstantFieldsSorted}}
1019
{{/hasPublicConstantFields}}
20+
{{/isEnum}}
1121

22+
{{#isClassOrEnum}}
1223
{{#hasPublicInstanceFields}}
1324
<li class="section-title{{ #publicInheritedInstanceFields }} inherited{{ /publicInheritedInstanceFields }}">
1425
<a href="{{{href}}}#instance-properties">Properties</a>
@@ -26,23 +37,14 @@
2637
{{/hasPublicInstanceMethods}}
2738

2839
{{#hasPublicInstanceOperators}}
29-
<li class="section-title{{ #publicInheritedInstanceOperators }} inherited{{ /publicInheritedInstanceOperators}}"><a href="{{{href}}}#operators">Operators</a></li>
40+
<li class="section-title{{ #publicInheritedInstanceOperators }} inherited{{ /publicInheritedInstanceOperators }}"><a href="{{{href}}}#operators">Operators</a></li>
3041
{{#publicInstanceOperatorsSorted}}
3142
<li{{ #isInherited }} class="inherited"{{ /isInherited}}>{{{ linkedName }}}</li>
3243
{{/publicInstanceOperatorsSorted}}
3344
{{/hasPublicInstanceOperators}}
34-
{{/isEnum}}
45+
{{/isClassOrEnum}}
3546

36-
{{#isClass}}
37-
{{#hasPublicConstructors}}
38-
<li class="section-title"><a href="{{{href}}}#constructors">Constructors</a></li>
39-
{{#publicConstructorsSorted}}
40-
<li><a{{#isDeprecated}} class="deprecated"{{/isDeprecated}} href="{{{href}}}">{{shortName}}</a></li>
41-
{{/publicConstructorsSorted}}
42-
{{/hasPublicConstructors}}
43-
{{/isClass}}
44-
45-
{{#isClassOrExtension}}
47+
{{#isExtension}}
4648
{{#hasPublicInstanceFields}}
4749
<li class="section-title"> <a href="{{{href}}}#instance-properties">Properties</a>
4850
</li>
@@ -64,7 +66,9 @@
6466
<li>{{{ linkedName }}}</li>
6567
{{/publicInstanceOperatorsSorted}}
6668
{{/hasPublicInstanceOperators}}
69+
{{/isExtension}}
6770

71+
{{#isClassOrExtension}}
6872
{{#hasPublicVariableStaticFields}}
6973
<li class="section-title"><a href="{{{href}}}#static-properties">Static properties</a></li>
7074
{{#publicVariableStaticFieldsSorted}}

test/end2end/model_test.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1632,8 +1632,17 @@ void main() {
16321632
});
16331633

16341634
test('get operators', () {
1635-
expect(Dog.publicInstanceOperators, hasLength(1));
1635+
expect(Dog.publicInstanceOperators, hasLength(2));
16361636
expect(Dog.publicInstanceOperators.first.name, 'operator ==');
1637+
expect(Dog.publicInstanceOperators.last.name, 'operator +');
1638+
});
1639+
1640+
test('has non-inherited instance operators', () {
1641+
expect(Dog.publicInheritedInstanceOperators, isFalse);
1642+
});
1643+
1644+
test('has only inherited instance operators', () {
1645+
expect(Cat.publicInheritedInstanceOperators, isTrue);
16371646
});
16381647

16391648
test('inherited methods, including from Object ', () {

testing/test_package/lib/example.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,8 @@ class Dog implements Cat, E {
332332
@override
333333
operator ==(other) => other is Dog && name == other.name;
334334

335+
Dog operator +(Dog other) => Dog()..name = name + other.name;
336+
335337
foo() async => 42;
336338

337339
@deprecated

0 commit comments

Comments
 (0)