Skip to content

Commit 22d0c37

Browse files
authored
Display extension type super interfaces (#3554)
1 parent 6f1b4e2 commit 22d0c37

File tree

5 files changed

+170
-65
lines changed

5 files changed

+170
-65
lines changed

lib/src/generator/templates.aot_renderers_for_html.dart

Lines changed: 51 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -862,15 +862,19 @@ String renderExtensionType<T extends ExtensionType>(
862862
buffer.write('''
863863
</ul>
864864
</dd>
865+
''');
866+
buffer.write(_renderExtensionType_partial_interfaces_5(context2));
867+
buffer.writeln();
868+
buffer.write('''
865869
</dl>
866870
''');
867-
buffer.write(_renderExtensionType_partial_container_annotations_5(context2));
871+
buffer.write(_renderExtensionType_partial_container_annotations_6(context2));
868872
buffer.writeln();
869873
buffer.write('''
870874
</section>
871875
872876
''');
873-
buffer.write(_renderExtensionType_partial_constructors_6(context2));
877+
buffer.write(_renderExtensionType_partial_constructors_7(context2));
874878
buffer.writeln();
875879
if (context2.hasPublicInstanceFields == true) {
876880
buffer.writeln();
@@ -882,31 +886,31 @@ String renderExtensionType<T extends ExtensionType>(
882886
var context4 = context2.publicInstanceFieldsSorted;
883887
for (var context5 in context4) {
884888
buffer.write('\n ');
885-
buffer.write(_renderExtensionType_partial_property_7(context5));
889+
buffer.write(_renderExtensionType_partial_property_8(context5));
886890
}
887891
buffer.writeln();
888892
buffer.write('''
889893
</dl>
890894
</section>''');
891895
}
892896
buffer.write('\n\n ');
893-
buffer.write(_renderExtensionType_partial_instance_methods_8(context2));
897+
buffer.write(_renderExtensionType_partial_instance_methods_9(context2));
894898
buffer.write('\n ');
895-
buffer.write(_renderExtensionType_partial_instance_operators_9(context2));
899+
buffer.write(_renderExtensionType_partial_instance_operators_10(context2));
896900
buffer.write('\n ');
897-
buffer.write(_renderExtensionType_partial_static_properties_10(context2));
901+
buffer.write(_renderExtensionType_partial_static_properties_11(context2));
898902
buffer.write('\n ');
899-
buffer.write(_renderExtensionType_partial_static_methods_11(context2));
903+
buffer.write(_renderExtensionType_partial_static_methods_12(context2));
900904
buffer.write('\n ');
901-
buffer.write(_renderExtensionType_partial_static_constants_12(context2));
905+
buffer.write(_renderExtensionType_partial_static_constants_13(context2));
902906
buffer.writeln();
903907
buffer.write('''
904908
905909
</div><!-- /.main-content -->
906910
907911
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
908912
''');
909-
buffer.write(_renderExtensionType_partial_search_sidebar_13(context0));
913+
buffer.write(_renderExtensionType_partial_search_sidebar_14(context0));
910914
buffer.writeln();
911915
buffer.write('''
912916
<h5>''');
@@ -920,7 +924,7 @@ String renderExtensionType<T extends ExtensionType>(
920924
</div><!--/.sidebar-offcanvas-->
921925
922926
''');
923-
buffer.write(_renderExtensionType_partial_footer_14(context0));
927+
buffer.write(_renderExtensionType_partial_footer_15(context0));
924928
buffer.writeln();
925929
buffer.writeln();
926930

@@ -2863,40 +2867,67 @@ String _renderExtensionType_partial_categorization_3(ExtensionType context1) =>
28632867
String _renderExtensionType_partial_documentation_4(ExtensionType context1) =>
28642868
_deduplicated_lib_templates_html__documentation_html(context1);
28652869

2866-
String _renderExtensionType_partial_container_annotations_5(
2870+
String _renderExtensionType_partial_interfaces_5(ExtensionType context1) {
2871+
final buffer = StringBuffer();
2872+
if (context1.hasPublicInterfaces == true) {
2873+
buffer.writeln();
2874+
buffer.write('''
2875+
<dt>Implemented types</dt>
2876+
<dd>
2877+
<ul class="comma-separated ''');
2878+
buffer.writeEscaped(context1.relationshipsClass);
2879+
buffer.write('''">''');
2880+
var context2 = context1.publicInterfaces;
2881+
for (var context3 in context2) {
2882+
buffer.writeln();
2883+
buffer.write('''
2884+
<li>''');
2885+
buffer.write(context3.linkedName);
2886+
buffer.write('''</li>''');
2887+
}
2888+
buffer.writeln();
2889+
buffer.write('''
2890+
</ul>
2891+
</dd>''');
2892+
}
2893+
2894+
return buffer.toString();
2895+
}
2896+
2897+
String _renderExtensionType_partial_container_annotations_6(
28672898
ExtensionType context1) =>
28682899
_deduplicated_lib_templates_html__container_annotations_html(context1);
28692900

2870-
String _renderExtensionType_partial_constructors_6(ExtensionType context1) =>
2901+
String _renderExtensionType_partial_constructors_7(ExtensionType context1) =>
28712902
_deduplicated_lib_templates_html__constructors_html(context1);
28722903

2873-
String _renderExtensionType_partial_property_7(Field context2) =>
2904+
String _renderExtensionType_partial_property_8(Field context2) =>
28742905
_deduplicated_lib_templates_html__property_html(context2);
28752906

2876-
String _renderExtensionType_partial_instance_methods_8(
2907+
String _renderExtensionType_partial_instance_methods_9(
28772908
ExtensionType context1) =>
28782909
_deduplicated_lib_templates_html__instance_methods_html(context1);
28792910

2880-
String _renderExtensionType_partial_instance_operators_9(
2911+
String _renderExtensionType_partial_instance_operators_10(
28812912
ExtensionType context1) =>
28822913
_deduplicated_lib_templates_html__instance_operators_html(context1);
28832914

2884-
String _renderExtensionType_partial_static_properties_10(
2915+
String _renderExtensionType_partial_static_properties_11(
28852916
ExtensionType context1) =>
28862917
_deduplicated_lib_templates_html__static_properties_html(context1);
28872918

2888-
String _renderExtensionType_partial_static_methods_11(ExtensionType context1) =>
2919+
String _renderExtensionType_partial_static_methods_12(ExtensionType context1) =>
28892920
_deduplicated_lib_templates_html__static_methods_html(context1);
28902921

2891-
String _renderExtensionType_partial_static_constants_12(
2922+
String _renderExtensionType_partial_static_constants_13(
28922923
ExtensionType context1) =>
28932924
_deduplicated_lib_templates_html__static_constants_html(context1);
28942925

2895-
String _renderExtensionType_partial_search_sidebar_13<T extends ExtensionType>(
2926+
String _renderExtensionType_partial_search_sidebar_14<T extends ExtensionType>(
28962927
ExtensionTypeTemplateData<T> context0) =>
28972928
_deduplicated_lib_templates_html__search_sidebar_html(context0);
28982929

2899-
String _renderExtensionType_partial_footer_14<T extends ExtensionType>(
2930+
String _renderExtensionType_partial_footer_15<T extends ExtensionType>(
29002931
ExtensionTypeTemplateData<T> context0) =>
29012932
_deduplicated_lib_templates_html__footer_html(context0);
29022933

lib/src/generator/templates.runtime_renderers.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5508,6 +5508,13 @@ class _Renderer_ExtensionType extends RendererBase<ExtensionType> {
55085508
parent: r);
55095509
},
55105510
),
5511+
'hasPublicInterfaces': Property(
5512+
getValue: (CT_ c) => c.hasPublicInterfaces,
5513+
renderVariable: (CT_ c, Property<CT_> self,
5514+
List<String> remainingNames) =>
5515+
self.renderSimpleVariable(c, remainingNames, 'bool'),
5516+
getBool: (CT_ c) => c.hasPublicInterfaces == true,
5517+
),
55115518
'inheritanceChain': Property(
55125519
getValue: (CT_ c) => c.inheritanceChain,
55135520
renderVariable: (CT_ c, Property<CT_> self,
@@ -5592,6 +5599,19 @@ class _Renderer_ExtensionType extends RendererBase<ExtensionType> {
55925599
parent: r, getters: _invisibleGetters['Kind']!);
55935600
},
55945601
),
5602+
'publicInterfaces': Property(
5603+
getValue: (CT_ c) => c.publicInterfaces,
5604+
renderVariable: (CT_ c, Property<CT_> self,
5605+
List<String> remainingNames) =>
5606+
self.renderSimpleVariable(
5607+
c, remainingNames, 'List<DefinedElementType>'),
5608+
renderIterable: (CT_ c, RendererBase<CT_> r,
5609+
List<MustachioNode> ast, StringSink sink) {
5610+
return c.publicInterfaces.map((e) =>
5611+
_render_DefinedElementType(e, ast, r.template, sink,
5612+
parent: r));
5613+
},
5614+
),
55955615
'referenceChildren': Property(
55965616
getValue: (CT_ c) => c.referenceChildren,
55975617
renderVariable: (CT_ c, Property<CT_> self,

lib/src/model/extension_type.dart

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,25 @@ class ExtensionType extends InheritingContainer with Constructable {
3838
@override
3939
bool get isSealed => false;
4040

41+
bool get hasPublicInterfaces => publicInterfaces.isNotEmpty;
42+
43+
@override
44+
List<DefinedElementType> get publicInterfaces {
45+
var interfaces = <DefinedElementType>[];
46+
for (var interface in element.interfaces) {
47+
var elementType =
48+
modelBuilder.typeFrom(interface, library) as DefinedElementType;
49+
50+
if (elementType.modelElement.canonicalModelElement != null) {
51+
interfaces.add(elementType);
52+
continue;
53+
}
54+
55+
// TODO(srawlins): Work through intermediate, private, interfaces.
56+
}
57+
return interfaces;
58+
}
59+
4160
@override
4261
late final List<Field> declaredFields = element.fields.map((field) {
4362
Accessor? getter, setter;

lib/templates/html/extension_type.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
{{ /representationType }}
2222
</ul>
2323
</dd>
24+
{{ >interfaces }}
2425
</dl>
2526
{{ >container_annotations }}
2627
</section>

0 commit comments

Comments
 (0)