Skip to content

Commit 40c039a

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Store name2 in MethodFragment and similar.
Note that for setters we store the name without '='. We don't use it yet, so this does not affect anything yet. Note that for synthetic getter/setter fragments the name is `null`. But we should not create such fragments at all. Synthetic getter/setter elements are fine, but they should not have fragments. Change-Id: I09bc07171d149572bea0a334b3f2e29ad4761b4c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/390584 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent e032779 commit 40c039a

31 files changed

+2132
-2104
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -967,6 +967,10 @@ abstract class Fragment {
967967
/// Returns `null` if the fragment is an unnamed [ConstructorFragment],
968968
/// even if its [ConstructorElement2] has the name `new`.
969969
///
970+
/// Returns `null` if the fragment is a synthetic [GetterFragment],
971+
/// even if its [GetterElement] has the name `new`.
972+
// TODO(scheglov): we should not create such fragments at all.
973+
///
970974
/// Returns `null` if the fragment declaration node does not have the name
971975
/// specified, and the parser inserted a synthetic identifier.
972976
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 = 394;
99+
static const int DATA_VERSION = 395;
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: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3583,21 +3583,6 @@ abstract class ExecutableElementImpl extends _ExistingElementImpl
35833583
return super.name!;
35843584
}
35853585

3586-
@override
3587-
FragmentName? get name2 {
3588-
var name = this.name;
3589-
3590-
// If synthetic name.
3591-
if (name.isEmpty) {
3592-
return null;
3593-
}
3594-
3595-
return FragmentNameImpl(
3596-
name: name,
3597-
nameOffset: nameOffset,
3598-
);
3599-
}
3600-
36013586
@override
36023587
List<ParameterElement> get parameters {
36033588
linkedData?.read(this);
@@ -4766,6 +4751,9 @@ class FunctionElementImpl extends ExecutableElementImpl
47664751
FunctionElement,
47674752
FunctionTypedElementImpl,
47684753
TopLevelFunctionFragment {
4754+
@override
4755+
FragmentNameImpl? name2;
4756+
47694757
late final LocalFunctionElementImpl element2 = LocalFunctionElementImpl(this);
47704758

47714759
/// The element corresponding to this fragment.
@@ -7895,6 +7883,9 @@ final class MetadataImpl implements Metadata {
78957883
class MethodElementImpl extends ExecutableElementImpl
78967884
with AugmentableElement<MethodElementImpl>
78977885
implements MethodElement, MethodFragment {
7886+
@override
7887+
FragmentNameImpl? name2;
7888+
78987889
/// Is `true` if this method is `operator==`, and there is no explicit
78997890
/// type specified for its formal parameter, in this method or in any
79007891
/// overridden methods other than the one declared in `Object`.
@@ -9386,6 +9377,9 @@ abstract class PromotableElementImpl2 extends VariableElementImpl2
93869377
class PropertyAccessorElementImpl extends ExecutableElementImpl
93879378
with AugmentableElement<PropertyAccessorElementImpl>
93889379
implements PropertyAccessorElement, GetterFragment, SetterFragment {
9380+
@override
9381+
FragmentNameImpl? name2;
9382+
93899383
PropertyInducingElementImpl? _variable;
93909384

93919385
/// The element corresponding to this fragment.

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1216,9 +1216,11 @@ class LibraryReader {
12161216
unitElement.functions = _reader.readTypedList(() {
12171217
var resolutionOffset = _baseResolutionOffset + _reader.readUInt30();
12181218
var reference = _readReference();
1219+
var fragmentName = _readFragmentName();
12191220
var name = reference.elementName;
12201221

12211222
var element = FunctionElementImpl(name, -1);
1223+
element.name2 = fragmentName;
12221224

12231225
var linkedData = FunctionElementLinkedData(
12241226
reference: reference,
@@ -1366,8 +1368,10 @@ class LibraryReader {
13661368
return _reader.readTypedList(() {
13671369
var resolutionOffset = _baseResolutionOffset + _reader.readUInt30();
13681370
var reference = _readReference();
1371+
var fragmentName = _readFragmentName();
13691372
var name = reference.elementName;
13701373
var element = MethodElementImpl(name, -1);
1374+
element.name2 = fragmentName;
13711375
var linkedData = MethodElementLinkedData(
13721376
reference: reference,
13731377
libraryReader: this,
@@ -1564,9 +1568,11 @@ class LibraryReader {
15641568
var resolutionOffset = _baseResolutionOffset + _reader.readUInt30();
15651569

15661570
var reference = _readReference();
1571+
var fragmentName = _readFragmentName();
15671572
var name = reference.elementName;
15681573

15691574
var element = PropertyAccessorElementImpl(name, -1);
1575+
element.name2 = fragmentName;
15701576
PropertyAccessorElementFlags.read(_reader, element);
15711577

15721578
var linkedData = PropertyAccessorElementLinkedData(

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,7 @@ class BundleWriter {
448448
void _writeFunctionElement(FunctionElementImpl element) {
449449
_sink.writeUInt30(_resolutionSink.offset);
450450
_writeReference(element);
451+
_writeFragmentName(element.name2);
451452
FunctionElementFlags.write(_sink, element);
452453

453454
_resolutionSink._writeAnnotationList(element.metadata);
@@ -520,6 +521,7 @@ class BundleWriter {
520521
void _writeMethodElement(MethodElementImpl element) {
521522
_sink.writeUInt30(_resolutionSink.offset);
522523
_writeReference(element);
524+
_writeFragmentName(element.name2);
523525
MethodElementFlags.write(_sink, element);
524526

525527
_resolutionSink._writeAnnotationList(element.metadata);
@@ -650,6 +652,7 @@ class BundleWriter {
650652
void _writePropertyAccessorElement(PropertyAccessorElementImpl element) {
651653
_sink.writeUInt30(_resolutionSink.offset);
652654
_writeReference(element);
655+
_writeFragmentName(element.name2);
653656
PropertyAccessorElementFlags.write(_sink, element);
654657

655658
_resolutionSink._writeAnnotationList(element.metadata);

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
737737
var nameToken = node.name;
738738
var name = nameToken.lexeme;
739739
var nameOffset = nameToken.offset;
740+
var fragmentName = _buildFragmentName(nameToken);
740741

741742
var functionExpression = node.functionExpression;
742743
var body = functionExpression.body;
@@ -745,6 +746,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
745746
ExecutableElementImpl executableElement;
746747
if (node.isGetter) {
747748
var element = PropertyAccessorElementImpl(name, nameOffset);
749+
element.name2 = fragmentName;
748750
element.isAugmentation = node.augmentKeyword != null;
749751
element.isGetter = true;
750752
element.isStatic = true;
@@ -759,6 +761,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
759761
_libraryBuilder.topVariables.addAccessor(element);
760762
} else if (node.isSetter) {
761763
var element = PropertyAccessorElementImpl(name, nameOffset);
764+
element.name2 = fragmentName;
762765
element.isAugmentation = node.augmentKeyword != null;
763766
element.isSetter = true;
764767
element.isStatic = true;
@@ -773,6 +776,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
773776
_libraryBuilder.topVariables.addAccessor(element);
774777
} else {
775778
var element = FunctionElementImpl(name, nameOffset);
779+
element.name2 = fragmentName;
776780
element.isAugmentation = node.augmentKeyword != null;
777781
element.isStatic = true;
778782
reference = _enclosingContext.addFunction(name, element);
@@ -975,11 +979,13 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
975979
var nameToken = node.name;
976980
var name = nameToken.lexeme;
977981
var nameOffset = nameToken.offset;
982+
var fragmentName = _buildFragmentName(nameToken);
978983

979984
Reference reference;
980985
ExecutableElementImpl executableElement;
981986
if (node.isGetter) {
982987
var element = PropertyAccessorElementImpl(name, nameOffset);
988+
element.name2 = fragmentName;
983989
element.isAbstract = node.isAbstract;
984990
element.isAugmentation = node.augmentKeyword != null;
985991
element.isGetter = true;
@@ -999,6 +1005,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
9991005
_buildSyntheticVariable(name: name, accessorElement: element);
10001006
} else if (node.isSetter) {
10011007
var element = PropertyAccessorElementImpl(name, nameOffset);
1008+
element.name2 = fragmentName;
10021009
element.isAbstract = node.isAbstract;
10031010
element.isAugmentation = node.augmentKeyword != null;
10041011
element.isSetter = true;
@@ -1017,6 +1024,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
10171024
}
10181025

10191026
var element = MethodElementImpl(name, nameOffset);
1027+
element.name2 = fragmentName;
10201028
element.isAbstract = node.isAbstract;
10211029
element.isAugmentation = node.augmentKeyword != null;
10221030
element.isStatic = node.isStatic;

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ class InformativeDataApplier {
186186
element as PropertyAccessorElementImpl;
187187
element.setCodeRange(info.codeOffset, info.codeLength);
188188
element.nameOffset = info.nameOffset;
189+
_setFragmentNameOffset(element.name2, info.nameOffset2);
189190
element.documentationComment = info.documentationComment;
190191
_applyToFormalParameters(
191192
element.parameters_unresolved,
@@ -572,6 +573,7 @@ class InformativeDataApplier {
572573
element as FunctionElementImpl;
573574
element.setCodeRange(info.codeOffset, info.codeLength);
574575
element.nameOffset = info.nameOffset;
576+
_setFragmentNameOffset(element.name2, info.nameOffset2);
575577
element.documentationComment = info.documentationComment;
576578
_applyToTypeParameters(
577579
element.typeParameters_unresolved,
@@ -698,6 +700,7 @@ class InformativeDataApplier {
698700
element as MethodElementImpl;
699701
element.setCodeRange(info.codeOffset, info.codeLength);
700702
element.nameOffset = info.nameOffset;
703+
_setFragmentNameOffset(element.name2, info.nameOffset2);
701704
element.documentationComment = info.documentationComment;
702705
_applyToTypeParameters(
703706
element.typeParameters_unresolved,
@@ -1219,6 +1222,7 @@ class _InfoFunctionDeclaration {
12191222
final int codeOffset;
12201223
final int codeLength;
12211224
final int nameOffset;
1225+
final int? nameOffset2;
12221226
final String? documentationComment;
12231227
final List<_InfoTypeParameter> typeParameters;
12241228
final List<_InfoFormalParameter> parameters;
@@ -1229,6 +1233,7 @@ class _InfoFunctionDeclaration {
12291233
codeOffset: reader.readUInt30(),
12301234
codeLength: reader.readUInt30(),
12311235
nameOffset: reader.readUInt30(),
1236+
nameOffset2: reader.readOptionalUInt30(),
12321237
documentationComment: reader.readStringUtf8().nullIfEmpty,
12331238
typeParameters: reader.readTypedList(
12341239
() => _InfoTypeParameter(reader),
@@ -1244,6 +1249,7 @@ class _InfoFunctionDeclaration {
12441249
required this.codeOffset,
12451250
required this.codeLength,
12461251
required this.nameOffset,
1252+
required this.nameOffset2,
12471253
required this.documentationComment,
12481254
required this.typeParameters,
12491255
required this.parameters,
@@ -1371,6 +1377,7 @@ class _InfoMethodDeclaration {
13711377
final int codeOffset;
13721378
final int codeLength;
13731379
final int nameOffset;
1380+
final int? nameOffset2;
13741381
final String? documentationComment;
13751382
final List<_InfoTypeParameter> typeParameters;
13761383
final List<_InfoFormalParameter> parameters;
@@ -1381,6 +1388,7 @@ class _InfoMethodDeclaration {
13811388
codeOffset: reader.readUInt30(),
13821389
codeLength: reader.readUInt30(),
13831390
nameOffset: reader.readUInt30(),
1391+
nameOffset2: reader.readOptionalUInt30(),
13841392
documentationComment: reader.readStringUtf8().nullIfEmpty,
13851393
typeParameters: reader.readTypedList(
13861394
() => _InfoTypeParameter(reader),
@@ -1396,6 +1404,7 @@ class _InfoMethodDeclaration {
13961404
required this.codeOffset,
13971405
required this.codeLength,
13981406
required this.nameOffset,
1407+
required this.nameOffset2,
13991408
required this.documentationComment,
14001409
required this.typeParameters,
14011410
required this.parameters,
@@ -1540,6 +1549,7 @@ class _InformativeDataWriter {
15401549
sink.writeUInt30(node.offset);
15411550
sink.writeUInt30(node.length);
15421551
sink.writeUInt30(node.name.offset);
1552+
sink.writeOptionalUInt30(node.name.offsetIfNotEmpty);
15431553
_writeDocumentationComment(node);
15441554
_writeTypeParameters(node.functionExpression.typeParameters);
15451555
_writeFormalParameters(node.functionExpression.parameters);
@@ -1559,6 +1569,7 @@ class _InformativeDataWriter {
15591569
sink.writeUInt30(node.offset);
15601570
sink.writeUInt30(node.length);
15611571
sink.writeUInt30(node.name.offset);
1572+
sink.writeOptionalUInt30(node.name.offsetIfNotEmpty);
15621573
_writeDocumentationComment(node);
15631574
_writeTypeParameters(node.functionExpression.typeParameters);
15641575
_writeFormalParameters(node.functionExpression.parameters);
@@ -1771,6 +1782,7 @@ class _InformativeDataWriter {
17711782
sink.writeUInt30(node.offset);
17721783
sink.writeUInt30(node.length);
17731784
sink.writeUInt30(node.name.offset);
1785+
sink.writeOptionalUInt30(node.name.offsetIfNotEmpty);
17741786
_writeDocumentationComment(node);
17751787
_writeTypeParameters(node.typeParameters);
17761788
_writeFormalParameters(node.parameters);
@@ -1818,6 +1830,7 @@ class _InformativeDataWriter {
18181830
sink.writeUInt30(node.offset);
18191831
sink.writeUInt30(node.length);
18201832
sink.writeUInt30(node.name.offset);
1833+
sink.writeOptionalUInt30(node.name.offsetIfNotEmpty);
18211834
_writeDocumentationComment(node);
18221835
_writeTypeParameters(node.typeParameters);
18231836
_writeFormalParameters(node.parameters);

0 commit comments

Comments
 (0)