Skip to content

Commit 6f83217

Browse files
scheglovCommit Queue
authored and
Commit Queue
committed
Elements. Store name2 in TypeParameterElementImpl.
Change-Id: I93805cf3ac1b9e5aedb022e5d2f691137d188787 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/390802 Reviewed-by: Phil Quitslund <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent e29aa0c commit 6f83217

File tree

7 files changed

+76
-23
lines changed

7 files changed

+76
-23
lines changed

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 = 398;
99+
static const int DATA_VERSION = 399;
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 & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10372,6 +10372,9 @@ abstract class TypeDefiningElementImpl2 extends ElementImpl2
1037210372
/// A concrete implementation of a [TypeParameterElement].
1037310373
class TypeParameterElementImpl extends ElementImpl
1037410374
implements TypeParameterElement, TypeParameterFragment {
10375+
@override
10376+
FragmentNameImpl? name2;
10377+
1037510378
/// The default value of the type parameter. It is used to provide the
1037610379
/// corresponding missing type argument in type annotations and as the
1037710380
/// fall-back type value in type inference.
@@ -10469,21 +10472,6 @@ class TypeParameterElementImpl extends ElementImpl
1046910472
return super.name!;
1047010473
}
1047110474

10472-
@override
10473-
FragmentName? get name2 {
10474-
var name = this.name;
10475-
10476-
// If synthetic name.
10477-
if (name.isEmpty) {
10478-
return null;
10479-
}
10480-
10481-
return FragmentNameImpl(
10482-
name: name,
10483-
nameOffset: nameOffset,
10484-
);
10485-
}
10486-
1048710475
@override
1048810476
// TODO(augmentations): Support chaining between the fragments.
1048910477
TypeParameterFragment? 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
@@ -1801,9 +1801,11 @@ class LibraryReader {
18011801
List<TypeParameterElementImpl> _readTypeParameters() {
18021802
return _reader.readTypedList(() {
18031803
var name = _reader.readStringReference();
1804+
var fragmentName = _readFragmentName();
18041805
var varianceEncoding = _reader.readByte();
18051806
var variance = _decodeVariance(varianceEncoding);
18061807
var element = TypeParameterElementImpl(name, -1);
1808+
element.name2 = fragmentName;
18071809
element.variance = variance;
18081810
return element;
18091811
});

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -723,13 +723,14 @@ class BundleWriter {
723723
});
724724
}
725725

726-
void _writeTypeParameterElement(TypeParameterElement typeParameter) {
727-
typeParameter as TypeParameterElementImpl;
728-
_sink._writeStringReference(typeParameter.name);
729-
_sink.writeByte(_encodeVariance(typeParameter).index);
730-
_resolutionSink._writeAnnotationList(typeParameter.metadata);
731-
_resolutionSink.writeType(typeParameter.bound);
732-
_resolutionSink.writeType(typeParameter.defaultType);
726+
void _writeTypeParameterElement(TypeParameterElement element) {
727+
element as TypeParameterElementImpl;
728+
_sink._writeStringReference(element.name);
729+
_writeFragmentName(element.name2);
730+
_sink.writeByte(_encodeVariance(element).index);
731+
_resolutionSink._writeAnnotationList(element.metadata);
732+
_resolutionSink.writeType(element.bound);
733+
_resolutionSink.writeType(element.defaultType);
733734
}
734735

735736
/// Add [typeParameters] to the indexing scope, so make them available

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1347,8 +1347,10 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
13471347
void visitTypeParameter(covariant TypeParameterImpl node) {
13481348
var nameToken = node.name;
13491349
var name = nameToken.lexeme;
1350+
var fragmentName = _buildFragmentName(nameToken);
13501351

13511352
var element = TypeParameterElementImpl(name, nameToken.offset);
1353+
element.name2 = fragmentName;
13521354
element.metadata = _buildAnnotations(node.metadata);
13531355
_setCodeRange(element, node);
13541356

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -816,6 +816,7 @@ class InformativeDataApplier {
816816
element as TypeParameterElementImpl;
817817
element.setCodeRange(info.codeOffset, info.codeLength);
818818
element.nameOffset = info.nameOffset;
819+
_setFragmentNameOffset(element.name2, info.nameOffset2);
819820
},
820821
);
821822
}
@@ -2009,6 +2010,7 @@ class _InformativeDataWriter {
20092010
sink.writeUInt30(node.offset);
20102011
sink.writeUInt30(node.length);
20112012
sink.writeUInt30(node.name.offset);
2013+
sink.writeOptionalUInt30(node.name.offsetIfNotEmpty);
20122014
});
20132015
}
20142016
}
@@ -2046,19 +2048,22 @@ class _InfoTypeParameter {
20462048
final int codeOffset;
20472049
final int codeLength;
20482050
final int nameOffset;
2051+
final int? nameOffset2;
20492052

20502053
factory _InfoTypeParameter(SummaryDataReader reader) {
20512054
return _InfoTypeParameter._(
20522055
codeOffset: reader.readUInt30(),
20532056
codeLength: reader.readUInt30(),
20542057
nameOffset: reader.readUInt30(),
2058+
nameOffset2: reader.readOptionalUInt30(),
20552059
);
20562060
}
20572061

20582062
_InfoTypeParameter._({
20592063
required this.codeOffset,
20602064
required this.codeLength,
20612065
required this.nameOffset,
2066+
required this.nameOffset2,
20622067
});
20632068
}
20642069

pkg/analyzer/test/src/summary/elements/class_test.dart

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25037,6 +25037,61 @@ library
2503725037
''');
2503825038
}
2503925039

25040+
test_class_typeParameters_missingName() async {
25041+
var library = await buildLibrary(r'''
25042+
class A<T,> {}
25043+
''');
25044+
checkElementText(library, r'''
25045+
library
25046+
reference: <testLibrary>
25047+
definingUnit: <testLibraryFragment>
25048+
units
25049+
<testLibraryFragment>
25050+
enclosingElement3: <null>
25051+
classes
25052+
class A @6
25053+
reference: <testLibraryFragment>::@class::A
25054+
enclosingElement3: <testLibraryFragment>
25055+
typeParameters
25056+
covariant T @8
25057+
defaultType: dynamic
25058+
covariant @10
25059+
defaultType: dynamic
25060+
constructors
25061+
synthetic @-1
25062+
reference: <testLibraryFragment>::@class::A::@constructor::new
25063+
enclosingElement3: <testLibraryFragment>::@class::A
25064+
----------------------------------------
25065+
library
25066+
reference: <testLibrary>
25067+
fragments
25068+
<testLibraryFragment>
25069+
element: <testLibrary>
25070+
classes
25071+
class A @6
25072+
reference: <testLibraryFragment>::@class::A
25073+
element: <testLibraryFragment>::@class::A#element
25074+
typeParameters
25075+
T @8
25076+
element: <not-implemented>
25077+
<null-name>
25078+
element: <not-implemented>
25079+
constructors
25080+
synthetic <null-name>
25081+
reference: <testLibraryFragment>::@class::A::@constructor::new
25082+
element: <testLibraryFragment>::@class::A::@constructor::new#element
25083+
classes
25084+
class A
25085+
firstFragment: <testLibraryFragment>::@class::A
25086+
typeParameters
25087+
T
25088+
25089+
constructors
25090+
synthetic new
25091+
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
25092+
''');
25093+
}
25094+
2504025095
test_class_typeParameters_variance_contravariant() async {
2504125096
var library = await buildLibrary('class C<in T> {}');
2504225097
checkElementText(library, r'''

0 commit comments

Comments
 (0)