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;