Check for hasDefaultValue / hasInitializer directly, without reding the initializer.

R=brianwilkerson@google.com

Change-Id: I29b37bc2305bf044d8a5b28b78edeba4cab9c120
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/102102
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 26e8d2c..f5a4de1 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -7921,7 +7921,7 @@
   FunctionElement get initializer {
     if (_initializer == null) {
       if (linkedNode != null) {
-        if (linkedContext.readInitializer(linkedNode) != null) {
+        if (linkedContext.hasInitializer(linkedNode)) {
           _initializer = new FunctionElementImpl('', -1)
             ..isSynthetic = true
             .._type = FunctionTypeImpl.synthetic(type, [], []);
@@ -8244,7 +8244,7 @@
   FunctionElement get initializer {
     if (_initializer == null) {
       if (linkedNode != null) {
-        if (linkedContext.readInitializer(linkedNode) != null) {
+        if (linkedContext.hasDefaultValue(linkedNode)) {
           _initializer = new FunctionElementImpl('', -1)..isSynthetic = true;
         }
       }
diff --git a/pkg/analyzer/lib/src/summary2/lazy_ast.dart b/pkg/analyzer/lib/src/summary2/lazy_ast.dart
index b6b54c2..14aab50 100644
--- a/pkg/analyzer/lib/src/summary2/lazy_ast.dart
+++ b/pkg/analyzer/lib/src/summary2/lazy_ast.dart
@@ -784,6 +784,15 @@
     return LazyAst.getTypeInferenceError(node);
   }
 
+  static bool hasDefaultValue(DefaultFormalParameter node) {
+    var lazy = LazyFormalParameter.get(node);
+    if (lazy != null) {
+      return lazy.data.defaultFormalParameter_defaultValue != null;
+    } else {
+      return node.defaultValue != null;
+    }
+  }
+
   static void readDefaultValue(
     AstBinaryReader reader,
     DefaultFormalParameter node,
@@ -1754,6 +1763,15 @@
     return LazyAst.getTypeInferenceError(node);
   }
 
+  static bool hasInitializer(VariableDeclaration node) {
+    var lazy = get(node);
+    if (lazy != null) {
+      return lazy.data.variableDeclaration_initializer != null;
+    } else {
+      return node.initializer != null;
+    }
+  }
+
   static void readInitializer(
     AstBinaryReader reader,
     VariableDeclaration node,
diff --git a/pkg/analyzer/lib/src/summary2/linked_unit_context.dart b/pkg/analyzer/lib/src/summary2/linked_unit_context.dart
index 5890831..d37d6bd 100644
--- a/pkg/analyzer/lib/src/summary2/linked_unit_context.dart
+++ b/pkg/analyzer/lib/src/summary2/linked_unit_context.dart
@@ -703,6 +703,13 @@
     }
   }
 
+  bool hasDefaultValue(FormalParameter node) {
+    if (node is DefaultFormalParameter) {
+      return LazyFormalParameter.hasDefaultValue(node);
+    }
+    return false;
+  }
+
   bool hasImplicitReturnType(AstNode node) {
     if (node is FunctionDeclaration) {
       LazyFunctionDeclaration.readFunctionExpression(_astReader, node);
@@ -728,6 +735,10 @@
     return false;
   }
 
+  bool hasInitializer(VariableDeclaration node) {
+    return LazyVariableDeclaration.hasInitializer(node);
+  }
+
   bool hasOverrideInferenceDone(AstNode node) {
     // Only nodes in the libraries being linked might be not inferred yet.
     if (_astReader.isLazy) return true;