Refactor templates for extensions (#2015)

* rename refactor template data

* Add a test
diff --git a/lib/src/html/template_data.dart b/lib/src/html/template_data.dart
index 271ce70..7f25e2a 100644
--- a/lib/src/html/template_data.dart
+++ b/lib/src/html/template_data.dart
@@ -283,64 +283,64 @@
 class MethodTemplateData extends TemplateData<Method> {
   final Library library;
   final Method method;
-  final Container clazz;
-  String container;
+  final Container container;
+  String containerDesc;
 
   MethodTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
-      this.library, this.clazz, this.method)
+      this.library, this.container, this.method)
       : super(htmlOptions, packageGraph) {
-    container = clazz.isClass ? 'class' : 'extension';
+    containerDesc = container.isClass ? 'class' : 'extension';
   }
 
   @override
   Method get self => method;
   @override
-  String get title => '${method.name} method - ${clazz.name} ${container} - '
+  String get title => '${method.name} method - ${container.name} ${containerDesc} - '
       '${library.name} library - Dart API';
   @override
   String get layoutTitle => _layoutTitle(
       method.nameWithGenerics, method.fullkind, method.isDeprecated);
   @override
   String get metaDescription =>
-      'API docs for the ${method.name} method from the ${clazz.name} ${container}, '
+      'API docs for the ${method.name} method from the ${container.name} ${containerDesc}, '
       'for the Dart programming language.';
   @override
   List get navLinks => [packageGraph.defaultPackage, library];
   @override
-  List get navLinksWithGenerics => [clazz];
+  List get navLinksWithGenerics => [container];
   @override
   String get htmlBase => '../..';
 }
 
 class PropertyTemplateData extends TemplateData<Field> {
   final Library library;
-  final Container clazz;
+  final Container container;
   final Field property;
-  String container;
+  String containerDesc;
 
   PropertyTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
-      this.library, this.clazz, this.property)
+      this.library, this.container, this.property)
       : super(htmlOptions, packageGraph) {
-    container = clazz.isClass ? 'class' : 'extension';
+    containerDesc = container.isClass ? 'class' : 'extension';
   }
 
   @override
   Field get self => property;
 
   @override
-  String get title => '${property.name} $type - ${clazz.name} ${container} - '
+  String get title => '${property.name} $type - ${container.name} ${containerDesc} - '
       '${library.name} library - Dart API';
   @override
   String get layoutTitle =>
       _layoutTitle(property.name, type, property.isDeprecated);
   @override
   String get metaDescription =>
-      'API docs for the ${property.name} $type from the ${clazz.name} ${container}, '
+      'API docs for the ${property.name} $type from the ${container.name} ${containerDesc}, '
       'for the Dart programming language.';
   @override
   List get navLinks => [packageGraph.defaultPackage, library];
   @override
-  List get navLinksWithGenerics => [clazz];
+  List get navLinksWithGenerics => [container];
   @override
   String get htmlBase => '../..';
 
@@ -349,8 +349,8 @@
 
 class ConstantTemplateData extends PropertyTemplateData {
   ConstantTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
-      Library library, Container clazz, Field property)
-      : super(htmlOptions, packageGraph, library, clazz, property);
+      Library library, Container container, Field property)
+      : super(htmlOptions, packageGraph, library, container, property);
 
   @override
   String get type => 'constant';
diff --git a/lib/src/html/templates.dart b/lib/src/html/templates.dart
index aa78da0..a47efde 100644
--- a/lib/src/html/templates.dart
+++ b/lib/src/html/templates.dart
@@ -31,6 +31,7 @@
   'search_sidebar',
   'sidebar_for_class',
   'sidebar_for_category',
+  'sidebar_for_container',
   'sidebar_for_enum',
   'sidebar_for_extension',
   'source_code',
diff --git a/lib/templates/_sidebar_for_class.html b/lib/templates/_sidebar_for_class.html
index d0b1bb0..662ec17 100644
--- a/lib/templates/_sidebar_for_class.html
+++ b/lib/templates/_sidebar_for_class.html
@@ -1,7 +1,6 @@
 <ol>
   {{#clazz}}
 
-  {{#isClass}}
   {{#hasPublicConstructors}}
   <li class="section-title"><a href="{{{href}}}#constructors">Constructors</a></li>
   {{#publicConstructors}}
@@ -52,52 +51,6 @@
   <li>{{{linkedName}}}</li>
   {{/publicConstants}}
   {{/hasPublicConstants}}
-  {{/isClass}}
-
-  {{#isExtension}}
-  {{#hasPublicProperties}}
-  <li class="section-title"> <a href="{{{href}}}#instance-properties">Properties</a>
-  </li>
-  {{#allPublicInstanceProperties}}
-  <li>{{{ linkedName }}}</li>
-  {{/allPublicInstanceProperties}}
-  {{/hasPublicProperties}}
-
-  {{#hasPublicMethods}}
-  <li class="section-title"><a href="{{{href}}}#instance-methods">Methods</a></li>
-  {{#allPublicInstanceMethods}}
-  <li>{{{ linkedName }}}</li>
-  {{/allPublicInstanceMethods}}
-  {{/hasPublicMethods}}
-
-  {{#hasPublicOperators}}
-  <li class="section-title"><a href="{{{href}}}#operators">Operators</a></li>
-  {{#allPublicOperators}}
-  <li>{{{ linkedName }}}</li>
-  {{/allPublicOperators}}
-  {{/hasPublicOperators}}
-
-  {{#hasPublicStaticProperties}}
-  <li class="section-title"><a href="{{{href}}}#static-properties">Static properties</a></li>
-  {{#publicStaticProperties}}
-  <li>{{{ linkedName }}}</li>
-  {{/publicStaticProperties}}
-  {{/hasPublicStaticProperties}}
-
-  {{#hasPublicStaticMethods}}
-  <li class="section-title"><a href="{{{href}}}#static-methods">Static methods</a></li>
-  {{#publicStaticMethods}}
-  <li>{{{ linkedName }}}</li>
-  {{/publicStaticMethods}}
-  {{/hasPublicStaticMethods}}
-
-  {{#hasPublicConstants}}
-  <li class="section-title"><a href="{{{href}}}#constants">Constants</a></li>
-  {{#publicConstants}}
-  <li>{{{linkedName}}}</li>
-  {{/publicConstants}}
-  {{/hasPublicConstants}}
-  {{/isExtension}}
 
   {{/clazz}}
 </ol>
diff --git a/lib/templates/_sidebar_for_container.html b/lib/templates/_sidebar_for_container.html
new file mode 100644
index 0000000..3c3b316
--- /dev/null
+++ b/lib/templates/_sidebar_for_container.html
@@ -0,0 +1,103 @@
+<ol>
+    {{#container}}
+
+    {{#isClass}}
+    {{#hasPublicConstructors}}
+    <li class="section-title"><a href="{{{href}}}#constructors">Constructors</a></li>
+    {{#publicConstructors}}
+    <li><a{{#isDeprecated}} class="deprecated"{{/isDeprecated}} href="{{{href}}}">{{shortName}}</a></li>
+    {{/publicConstructors}}
+    {{/hasPublicConstructors}}
+
+    {{#hasPublicProperties}}
+    <li class="section-title{{ #allPublicInstancePropertiesInherited }} inherited{{ /allPublicInstancePropertiesInherited }}">
+        <a href="{{{href}}}#instance-properties">Properties</a>
+    </li>
+    {{#allPublicInstanceProperties}}
+    <li{{ #isInherited }} class="inherited"{{ /isInherited}}>{{{ linkedName }}}</li>
+    {{/allPublicInstanceProperties}}
+    {{/hasPublicProperties}}
+
+    {{#hasPublicMethods}}
+    <li class="section-title{{ #allPublicInstanceMethodsInherited }} inherited{{ /allPublicInstanceMethodsInherited }}"><a href="{{{href}}}#instance-methods">Methods</a></li>
+    {{#allPublicInstanceMethods}}
+    <li{{ #isInherited }} class="inherited"{{ /isInherited}}>{{{ linkedName }}}</li>
+    {{/allPublicInstanceMethods}}
+    {{/hasPublicMethods}}
+
+    {{#hasPublicOperators}}
+    <li class="section-title{{ #allPublicOperatorsInherited }} inherited{{ /allPublicOperatorsInherited}}"><a href="{{{href}}}#operators">Operators</a></li>
+    {{#allPublicOperators}}
+    <li{{ #isInherited }} class="inherited"{{ /isInherited}}>{{{ linkedName }}}</li>
+    {{/allPublicOperators}}
+    {{/hasPublicOperators}}
+
+    {{#hasPublicStaticProperties}}
+    <li class="section-title"><a href="{{{href}}}#static-properties">Static properties</a></li>
+    {{#publicStaticProperties}}
+    <li>{{{ linkedName }}}</li>
+    {{/publicStaticProperties}}
+    {{/hasPublicStaticProperties}}
+
+    {{#hasPublicStaticMethods}}
+    <li class="section-title"><a href="{{{href}}}#static-methods">Static methods</a></li>
+    {{#publicStaticMethods}}
+    <li>{{{ linkedName }}}</li>
+    {{/publicStaticMethods}}
+    {{/hasPublicStaticMethods}}
+
+    {{#hasPublicConstants}}
+    <li class="section-title"><a href="{{{href}}}#constants">Constants</a></li>
+    {{#publicConstants}}
+    <li>{{{linkedName}}}</li>
+    {{/publicConstants}}
+    {{/hasPublicConstants}}
+    {{/isClass}}
+
+    {{#isExtension}}
+    {{#hasPublicProperties}}
+    <li class="section-title"> <a href="{{{href}}}#instance-properties">Properties</a>
+    </li>
+    {{#allPublicInstanceProperties}}
+    <li>{{{ linkedName }}}</li>
+    {{/allPublicInstanceProperties}}
+    {{/hasPublicProperties}}
+
+    {{#hasPublicMethods}}
+    <li class="section-title"><a href="{{{href}}}#instance-methods">Methods</a></li>
+    {{#allPublicInstanceMethods}}
+    <li>{{{ linkedName }}}</li>
+    {{/allPublicInstanceMethods}}
+    {{/hasPublicMethods}}
+
+    {{#hasPublicOperators}}
+    <li class="section-title"><a href="{{{href}}}#operators">Operators</a></li>
+    {{#allPublicOperators}}
+    <li>{{{ linkedName }}}</li>
+    {{/allPublicOperators}}
+    {{/hasPublicOperators}}
+
+    {{#hasPublicStaticProperties}}
+    <li class="section-title"><a href="{{{href}}}#static-properties">Static properties</a></li>
+    {{#publicStaticProperties}}
+    <li>{{{ linkedName }}}</li>
+    {{/publicStaticProperties}}
+    {{/hasPublicStaticProperties}}
+
+    {{#hasPublicStaticMethods}}
+    <li class="section-title"><a href="{{{href}}}#static-methods">Static methods</a></li>
+    {{#publicStaticMethods}}
+    <li>{{{ linkedName }}}</li>
+    {{/publicStaticMethods}}
+    {{/hasPublicStaticMethods}}
+
+    {{#hasPublicConstants}}
+    <li class="section-title"><a href="{{{href}}}#constants">Constants</a></li>
+    {{#publicConstants}}
+    <li>{{{linkedName}}}</li>
+    {{/publicConstants}}
+    {{/hasPublicConstants}}
+    {{/isExtension}}
+
+    {{/container}}
+</ol>
diff --git a/lib/templates/constant.html b/lib/templates/constant.html
index 44e278b..5248e7d 100644
--- a/lib/templates/constant.html
+++ b/lib/templates/constant.html
@@ -3,7 +3,7 @@
   <div id="dartdoc-sidebar-left" class="col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left">
     {{>search_sidebar}}
     <h5>{{parent.name}} {{parent.kind}}</h5>
-    {{>sidebar_for_class}}
+    {{>sidebar_for_container}}
   </div><!--/.sidebar-offcanvas-left-->
 
   <div id="dartdoc-main-content" class="col-xs-12 col-sm-9 col-md-8 main-content">
diff --git a/lib/templates/method.html b/lib/templates/method.html
index 0d1fb44..d88bc73 100644
--- a/lib/templates/method.html
+++ b/lib/templates/method.html
@@ -3,7 +3,7 @@
   <div id="dartdoc-sidebar-left" class="col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left">
     {{>search_sidebar}}
     <h5>{{parent.name}} {{parent.kind}}</h5>
-    {{>sidebar_for_class}}
+    {{>sidebar_for_container}}
   </div><!--/.sidebar-offcanvas-->
 
   <div id="dartdoc-main-content" class="col-xs-12 col-sm-9 col-md-8 main-content">
diff --git a/lib/templates/property.html b/lib/templates/property.html
index 8d9bb5e..1372a37 100644
--- a/lib/templates/property.html
+++ b/lib/templates/property.html
@@ -3,7 +3,7 @@
   <div id="dartdoc-sidebar-left" class="col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left">
     {{>search_sidebar}}
     <h5>{{parent.name}} {{parent.kind}}</h5>
-    {{>sidebar_for_class}}
+    {{>sidebar_for_container}}
   </div><!--/.sidebar-offcanvas-->
 
   <div id="dartdoc-main-content" class="col-xs-12 col-sm-9 col-md-8 main-content">
diff --git a/test/model_test.dart b/test/model_test.dart
index 10e4364..dbc6257 100644
--- a/test/model_test.dart
+++ b/test/model_test.dart
@@ -2134,6 +2134,13 @@
               'FancyList&lt;<wbr><span class="type-parameter">Z</span>&gt;'));
     });
 
+    test('extended type has generics', () {
+      expect(
+          fancyList.extendedType.nameWithGenerics,
+          equals(
+              'List&lt;<wbr><span class="type-parameter">Z</span>&gt;'));
+    });
+
     test('get methods', () {
       expect(fancyList.allPublicInstanceMethods, hasLength(1));
     });