Skip to content

Commit b39bd0b

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Store name2 for formal parameter fragments.
Change-Id: I87cb57dc107573d574b536622e1d47d27e5207d3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/390565 Reviewed-by: Phil Quitslund <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 066962f commit b39bd0b

27 files changed

+601
-594
lines changed

pkg/analyzer/lib/dart/element/element2.dart

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -866,10 +866,6 @@ abstract class Fragment {
866866
/// Returns `null` if the fragment is an unnamed [ConstructorFragment],
867867
/// even if its [ConstructorElement2] has the name `new`.
868868
///
869-
/// Returns `null` if the fragment is a synthetic [GetterFragment],
870-
/// even if its [GetterElement] has the name `new`.
871-
// TODO(scheglov): we should not create such fragments at all.
872-
///
873869
/// Returns `null` if the fragment declaration node does not have the name
874870
/// specified, and the parser inserted a synthetic identifier.
875871
FragmentName? get name2;

pkg/analyzer/lib/src/dart/analysis/driver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ import 'package:meta/meta.dart';
9696
// TODO(scheglov): Clean up the list of implicitly analyzed files.
9797
class AnalysisDriver {
9898
/// The version of data format, should be incremented on every format change.
99-
static const int DATA_VERSION = 395;
99+
static const int DATA_VERSION = 396;
100100

101101
/// The number of exception contexts allowed to write. Once this field is
102102
/// zero, we stop writing any new exception contexts in this process.

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8630,6 +8630,9 @@ class NotAugmentedMixinElementImpl extends NotAugmentedInterfaceElementImpl
86308630
class ParameterElementImpl extends VariableElementImpl
86318631
with ParameterElementMixin
86328632
implements ParameterElement, FormalParameterFragment {
8633+
@override
8634+
FragmentNameImpl? name2;
8635+
86338636
/// A list containing all of the parameters defined by this parameter element.
86348637
/// There will only be parameters if this parameter is a function typed
86358638
/// parameter.
@@ -8748,19 +8751,6 @@ class ParameterElementImpl extends VariableElementImpl
87488751
LibraryFragment get libraryFragment =>
87498752
thisOrAncestorOfType<CompilationUnitElementImpl>() as LibraryFragment;
87508753

8751-
@override
8752-
FragmentName? get name2 {
8753-
var name = this.name;
8754-
if (name.isEmpty) {
8755-
return null;
8756-
}
8757-
8758-
return FragmentNameImpl(
8759-
name: name,
8760-
nameOffset: nameOffset,
8761-
);
8762-
}
8763-
87648754
@override
87658755
// TODO(augmentations): Support chaining between the fragments.
87668756
FormalParameterFragment? get nextFragment => null;

pkg/analyzer/lib/src/summary2/bundle_reader.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1459,6 +1459,7 @@ class LibraryReader {
14591459
// TODO(scheglov): Deduplicate parameter reading implementation.
14601460
List<ParameterElementImpl> _readParameters() {
14611461
return _reader.readTypedList(() {
1462+
var fragmentName = _readFragmentName();
14621463
var name = _reader.readStringReference();
14631464
var isDefault = _reader.readBool();
14641465
var isInitializingFormal = _reader.readBool();
@@ -1514,6 +1515,7 @@ class LibraryReader {
15141515
reference.element = element;
15151516
}
15161517
}
1518+
element.name2 = fragmentName;
15171519
ParameterElementFlags.read(_reader, element);
15181520
element.typeParameters = _readTypeParameters();
15191521
element.parameters = _readParameters();

pkg/analyzer/lib/src/summary2/bundle_writer.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,7 @@ class BundleWriter {
602602
// TODO(scheglov): Deduplicate parameter writing implementation.
603603
void _writeParameterElement(ParameterElement element) {
604604
element as ParameterElementImpl;
605+
_writeFragmentName(element.name2);
605606
_sink._writeStringReference(element.name);
606607
_sink.writeBool(element is ConstVariableElement);
607608
_sink.writeBool(element.isInitializingFormal);

pkg/analyzer/lib/src/summary2/element_builder.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
680680
var nameToken = node.name;
681681
var name = nameToken.lexeme;
682682
var nameOffset = nameToken.offset;
683+
var fragmentName = _buildFragmentName(nameToken);
683684

684685
ParameterElementImpl element;
685686
var parent = node.parent;
@@ -701,6 +702,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
701702
_linker.elementNodes[element] = node;
702703
_enclosingContext.addParameter(null, element);
703704
}
705+
706+
element.name2 = fragmentName;
704707
element.hasImplicitType = node.type == null && node.parameters == null;
705708
element.metadata = _buildAnnotations(node.metadata);
706709
_setCodeRange(element, node);
@@ -852,6 +855,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
852855
var nameToken = node.name;
853856
var name = nameToken.lexeme;
854857
var nameOffset = nameToken.offset;
858+
var fragmentName = _buildFragmentName(nameToken);
855859

856860
ParameterElementImpl element;
857861
var parent = node.parent;
@@ -870,6 +874,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
870874
);
871875
_linker.elementNodes[element] = node;
872876
}
877+
element.name2 = fragmentName;
873878
element.isExplicitlyCovariant = node.covariantKeyword != null;
874879
element.isFinal = node.isFinal;
875880
element.metadata = _buildAnnotations(node.metadata);
@@ -1165,6 +1170,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
11651170
var nameToken = node.name;
11661171
var name = nameToken?.lexeme ?? '';
11671172
var nameOffset = nameToken?.offset ?? -1;
1173+
var fragmentName = _buildFragmentName(nameToken);
11681174

11691175
ParameterElementImpl element;
11701176
var parent = node.parent;
@@ -1188,6 +1194,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
11881194
_enclosingContext.addParameter(null, element);
11891195
}
11901196

1197+
element.name2 = fragmentName;
11911198
element.hasImplicitType = node.type == null;
11921199
element.isExplicitlyCovariant = node.covariantKeyword != null;
11931200
element.isFinal = node.isFinal;
@@ -1206,6 +1213,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
12061213
var nameToken = node.name;
12071214
var name = nameToken.lexeme;
12081215
var nameOffset = nameToken.offset;
1216+
var fragmentName = _buildFragmentName(nameToken);
12091217

12101218
SuperFormalParameterElementImpl element;
12111219
var parent = node.parent;
@@ -1227,6 +1235,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
12271235
_linker.elementNodes[element] = node;
12281236
_enclosingContext.addParameter(null, element);
12291237
}
1238+
element.name2 = fragmentName;
12301239
element.hasImplicitType = node.type == null && node.parameters == null;
12311240
element.metadata = _buildAnnotations(node.metadata);
12321241
_setCodeRange(element, node);
@@ -1516,6 +1525,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
15161525
)
15171526
..field = fieldElement
15181527
..hasImplicitType = true;
1528+
formalParameterElement.name2 = _buildFragmentName(fieldNameToken);
15191529
formalParameterElement.setCodeRange(
15201530
fieldCodeRangeOffset,
15211531
fieldCodeRangeLength,

pkg/analyzer/lib/src/summary2/informative_data.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,10 @@ class InformativeDataApplier {
484484
var primaryConstructorParameter = primaryConstructor
485485
.parameters_unresolved.first as ParameterElementImpl;
486486
primaryConstructorParameter.nameOffset = infoRep.fieldNameOffset;
487+
_setFragmentNameOffset(
488+
primaryConstructorParameter.name2,
489+
infoRep.fieldNameOffset,
490+
);
487491
primaryConstructorParameter.setCodeRange(
488492
infoRep.fieldCodeOffset,
489493
infoRep.fieldCodeLength,
@@ -560,6 +564,7 @@ class InformativeDataApplier {
560564
element as ParameterElementImpl;
561565
element.setCodeRange(info.codeOffset, info.codeLength);
562566
element.nameOffset = info.nameOffset;
567+
_setFragmentNameOffset(element.name2, info.nameOffset2);
563568
_applyToTypeParameters(element.typeParameters, info.typeParameters);
564569
_applyToFormalParameters(element.parameters, info.parameters);
565570
},
@@ -1192,6 +1197,7 @@ class _InfoFormalParameter {
11921197
final int codeOffset;
11931198
final int codeLength;
11941199
final int nameOffset;
1200+
final int? nameOffset2;
11951201
final List<_InfoTypeParameter> typeParameters;
11961202
final List<_InfoFormalParameter> parameters;
11971203

@@ -1200,6 +1206,7 @@ class _InfoFormalParameter {
12001206
codeOffset: reader.readUInt30(),
12011207
codeLength: reader.readUInt30(),
12021208
nameOffset: reader.readUInt30() - 1,
1209+
nameOffset2: reader.readOptionalUInt30(),
12031210
typeParameters: reader.readTypedList(
12041211
() => _InfoTypeParameter(reader),
12051212
),
@@ -1213,6 +1220,7 @@ class _InfoFormalParameter {
12131220
required this.codeOffset,
12141221
required this.codeLength,
12151222
required this.nameOffset,
1223+
required this.nameOffset2,
12161224
required this.typeParameters,
12171225
required this.parameters,
12181226
});
@@ -1754,7 +1762,7 @@ class _InformativeDataWriter {
17541762
sink.writeUInt30(node.offset);
17551763
sink.writeUInt30(node.length);
17561764
sink.writeUInt30(1 + (node.name?.offset ?? -1));
1757-
1765+
sink.writeOptionalUInt30(node.name?.offsetIfNotEmpty);
17581766
var notDefault = node.notDefault;
17591767
if (notDefault is FieldFormalParameter) {
17601768
_writeTypeParameters(notDefault.typeParameters);

0 commit comments

Comments
 (0)