Adapt to the state when FunctionTypeAliasElement does not implement FunctionTypedElement. (#2051)

* Adapt to the state when FunctionTypeAliasElement does not implement FunctionTypedElement.

* TODO for GenericFunctionTypeElement and FunctionTypeAliasElement.
diff --git a/lib/src/model.dart b/lib/src/model.dart
index b7bb0da..4be99f7 100644
--- a/lib/src/model.dart
+++ b/lib/src/model.dart
@@ -3235,6 +3235,8 @@
         if (e is FunctionElement) {
           newModelElement = ModelFunction(e, library, packageGraph);
         } else if (e is GenericFunctionTypeElement) {
+          // TODO(scheglov) "e" cannot be both GenericFunctionTypeElement,
+          // and FunctionTypeAliasElement or GenericTypeAliasElement.
           if (e is FunctionTypeAliasElement) {
             assert(e.name != '');
             newModelElement = ModelFunctionTypedef(e, library, packageGraph);
@@ -3495,7 +3497,9 @@
   }
 
   bool get canHaveParameters =>
-      element is ExecutableElement || element is FunctionTypedElement;
+      element is ExecutableElement ||
+      element is FunctionTypedElement ||
+      element is FunctionTypeAliasElement;
 
   ModelElement _buildCanonicalModelElement() {
     Container preferredClass;
@@ -4030,6 +4034,9 @@
           params = (element as FunctionTypedElement).parameters;
         }
       }
+      if (params == null && element is FunctionTypeAliasElement) {
+        params = (element as FunctionTypeAliasElement).function.parameters;
+      }
 
       _parameters = UnmodifiableListView<Parameter>(params
           .map((p) => ModelElement.from(p, library, packageGraph) as Parameter)