Elements. Inline _buildClass()/_buildMixin() and reuse _EnclosingContext.
Change-Id: I974849fb401630c54d9962b2c9dd7f633992d624
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/391542
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index 70c3bdb..65e9a28 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -124,19 +124,21 @@
_libraryBuilder.declare(name, reference);
}
- var holder = _EnclosingContext(reference, element);
+ var holder = _EnclosingContext(reference, element,
+ constFieldsForFinalInstance: true);
_withEnclosing(holder, () {
- var typeParameters = node.typeParameters;
- if (typeParameters != null) {
- typeParameters.accept(this);
- element.typeParameters = holder.typeParameters;
- }
+ node.typeParameters?.accept(this);
+ _visitPropertyFirst<FieldDeclaration>(node.members);
});
+ element.typeParameters = holder.typeParameters;
+ element.accessors = holder.propertyAccessors;
+ element.constructors = holder.constructors;
+ element.fields = holder.fields;
+ element.methods = holder.methods;
node.extendsClause?.accept(this);
node.withClause?.accept(this);
node.implementsClause?.accept(this);
- _buildClass(node);
_libraryBuilder.updateAugmentationTarget(name, element);
@@ -512,23 +514,13 @@
var holder = _EnclosingContext(reference, element);
_withEnclosing(holder, () {
- var typeParameters = node.typeParameters;
- if (typeParameters != null) {
- typeParameters.accept(this);
- element.typeParameters = holder.typeParameters;
- }
+ node.typeParameters?.accept(this);
+ _visitPropertyFirst<FieldDeclaration>(node.members);
});
-
- // TODO(scheglov): don't create a duplicate
- {
- var holder = _EnclosingContext(reference, element);
- _withEnclosing(holder, () {
- _visitPropertyFirst<FieldDeclaration>(node.members);
- });
- element.accessors = holder.propertyAccessors;
- element.fields = holder.fields;
- element.methods = holder.methods;
- }
+ element.typeParameters = holder.typeParameters;
+ element.accessors = holder.propertyAccessors;
+ element.fields = holder.fields;
+ element.methods = holder.methods;
node.onClause?.accept(this);
@@ -1111,16 +1103,16 @@
var holder = _EnclosingContext(reference, element);
_withEnclosing(holder, () {
- var typeParameters = node.typeParameters;
- if (typeParameters != null) {
- typeParameters.accept(this);
- element.typeParameters = holder.typeParameters;
- }
+ node.typeParameters?.accept(this);
+ _visitPropertyFirst<FieldDeclaration>(node.members);
});
+ element.typeParameters = holder.typeParameters;
+ element.accessors = holder.propertyAccessors;
+ element.fields = holder.fields;
+ element.methods = holder.methods;
node.onClause?.accept(this);
node.implementsClause?.accept(this);
- _buildMixin(node);
_libraryBuilder.updateAugmentationTarget(name, element);
@@ -1387,21 +1379,6 @@
return _buildAnnotationsWithUnit(_unitElement, nodeList);
}
- void _buildClass(ClassDeclaration node) {
- var element = node.declaredElement as ClassElementImpl;
- // TODO(scheglov): don't create a duplicate
- var holder = _EnclosingContext(element.reference!, element,
- constFieldsForFinalInstance: true);
- _withEnclosing(holder, () {
- _visitPropertyFirst<FieldDeclaration>(node.members);
- });
-
- element.accessors = holder.propertyAccessors;
- element.constructors = holder.constructors;
- element.fields = holder.fields;
- element.methods = holder.methods;
- }
-
void _buildExecutableElementChildren({
required Reference reference,
required ExecutableElementImpl element,
@@ -1436,19 +1413,6 @@
);
}
- void _buildMixin(MixinDeclaration node) {
- var element = node.declaredElement as MixinElementImpl;
- // TODO(scheglov): don't create a duplicate
- var holder = _EnclosingContext(element.reference!, element);
- _withEnclosing(holder, () {
- _visitPropertyFirst<FieldDeclaration>(node.members);
- });
-
- element.accessors = holder.propertyAccessors;
- element.fields = holder.fields;
- element.methods = holder.methods;
- }
-
void _buildSyntheticVariable({
required String name,
required PropertyAccessorElementImpl accessorElement,