Fix definingCombo == null for static field members of extension methods (#2404)

* fix

* forgot to write out statics

* Add tests

* dartfmt
diff --git a/lib/src/generator/generator_frontend.dart b/lib/src/generator/generator_frontend.dart
index 1fd974f..e99de66 100644
--- a/lib/src/generator/generator_frontend.dart
+++ b/lib/src/generator/generator_frontend.dart
@@ -146,6 +146,12 @@
             _generatorBackend.generateProperty(
                 writer, packageGraph, lib, extension, property);
           }
+
+          for (var staticField in filterNonDocumented(extension.staticFields)) {
+            indexAccumulator.add(staticField);
+            _generatorBackend.generateProperty(
+                writer, packageGraph, lib, extension, staticField);
+          }
         }
 
         for (var mixin in filterNonDocumented(lib.mixins)) {
diff --git a/lib/src/model/accessor.dart b/lib/src/model/accessor.dart
index 9c6512c..ff84265 100644
--- a/lib/src/model/accessor.dart
+++ b/lib/src/model/accessor.dart
@@ -28,12 +28,8 @@
   GetterSetterCombo get definingCombo {
     if (_definingCombo == null) {
       var variable = (element as PropertyAccessorElement).variable;
-      var accessor = isGetter ? variable.getter : variable.setter;
-      var accessorLibrary = Library(accessor.library, packageGraph);
-      var definingAccessor =
-          ModelElement.from(accessor, accessorLibrary, packageGraph)
-              as Accessor;
-      _definingCombo = definingAccessor.enclosingCombo;
+      _definingCombo = ModelElement.fromElement(variable, packageGraph);
+      assert(_definingCombo != null, 'Unable to find defining combo');
     }
     return _definingCombo;
   }
diff --git a/lib/src/model/model_element.dart b/lib/src/model/model_element.dart
index 58c57b4..3c1ad76 100644
--- a/lib/src/model/model_element.dart
+++ b/lib/src/model/model_element.dart
@@ -359,12 +359,14 @@
       }
     }
     if (e is PropertyAccessorElement) {
-      // TODO(jcollins-g): why test for ClassElement in enclosingElement?
+      // Accessors can be part of a [Container], or a part of a [Library].
       if (e.enclosingElement is ClassElement ||
+          e.enclosingElement is ExtensionElement ||
           e is MultiplyInheritedExecutableElement) {
         if (enclosingContainer == null) {
           return ContainerAccessor(e, library, packageGraph);
         } else {
+          assert(e.enclosingElement is! ExtensionElement);
           return ContainerAccessor.inherited(
               e, library, packageGraph, enclosingContainer,
               originalMember: originalMember);
diff --git a/test/end2end/model_test.dart b/test/end2end/model_test.dart
index 9b3eda5..01ee005 100644
--- a/test/end2end/model_test.dart
+++ b/test/end2end/model_test.dart
@@ -1746,6 +1746,7 @@
   group('Extension', () {
     Extension arm, leg, ext, fancyList, uphill;
     Extension documentOnceReexportOne, documentOnceReexportTwo;
+    Extension staticFieldExtension;
     Library reexportOneLib, reexportTwoLib;
     Class apple,
         anotherExtended,
@@ -1784,6 +1785,8 @@
           .firstWhere((e) => e.name == 'SimpleStringExtension')
           .instanceMethods
           .firstWhere((m) => m.name == 'doStuff');
+      staticFieldExtension = exLibrary.extensions
+          .firstWhere((e) => e.name == 'StaticFieldExtension');
       extensions = exLibrary.publicExtensions.toList();
       baseTest = fakeLibrary.classes.firstWhere((e) => e.name == 'BaseTest');
       bigAnotherExtended =
@@ -1798,6 +1801,11 @@
           fakeLibrary.classes.firstWhere((e) => e.name == 'SuperMegaTron');
     });
 
+    test('static fields inside extensions do not crash', () {
+      expect(staticFieldExtension.staticFields.length, equals(1));
+      expect(staticFieldExtension.staticFields.first.name, equals('aStatic'));
+    });
+
     test('basic canonicalization for extensions', () {
       expect(documentOnceReexportOne.isCanonical, isFalse);
       expect(
@@ -1980,11 +1988,11 @@
     });
 
     test('correctly finds all the extensions', () {
-      expect(exLibrary.extensions, hasLength(8));
+      expect(exLibrary.extensions, hasLength(9));
     });
 
     test('correctly finds all the public extensions', () {
-      expect(extensions, hasLength(6));
+      expect(extensions, hasLength(7));
     });
   });
 
diff --git a/testing/test_package/lib/example.dart b/testing/test_package/lib/example.dart
index 1bcc2b4..43151cc 100644
--- a/testing/test_package/lib/example.dart
+++ b/testing/test_package/lib/example.dart
@@ -648,6 +648,10 @@
   void bar() {}
 }
 
+extension StaticFieldExtension on Object {
+  static int aStatic;
+}
+
 /// This class has nothing to do with [_Shhh], [FancyList], or [AnExtension.call],
 /// but should not crash because we referenced them.
 /// We should be able to find [DocumentThisExtensionOnce], too.