Skip to content

Commit ce9aae4

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Flags for TypeAliasItem.
Change-Id: Ife13f8c266e55d3a149ac511ad753affd3a59344 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/449366 Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent df983da commit ce9aae4

File tree

4 files changed

+221
-8
lines changed

4 files changed

+221
-8
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ testFineAfterLibraryAnalyzerHook;
106106
// TODO(scheglov): Clean up the list of implicitly analyzed files.
107107
class AnalysisDriver {
108108
/// The version of data format, should be incremented on every format change.
109-
static const int DATA_VERSION = 552;
109+
static const int DATA_VERSION = 553;
110110

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

pkg/analyzer/lib/src/fine/manifest_item.dart

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1345,7 +1345,7 @@ class TypeAliasItem extends ManifestItem<TypeAliasElementImpl> {
13451345

13461346
TypeAliasItem({
13471347
required super.id,
1348-
required super.flags,
1348+
required _TypeAliasItemFlags super.flags,
13491349
required super.metadata,
13501350
required this.typeParameters,
13511351
required this.aliasedType,
@@ -1359,7 +1359,7 @@ class TypeAliasItem extends ManifestItem<TypeAliasElementImpl> {
13591359
return context.withTypeParameters(element.typeParameters, (typeParameters) {
13601360
return TypeAliasItem(
13611361
id: id,
1362-
flags: _ManifestItemFlags.encode(element),
1362+
flags: _TypeAliasItemFlags.encode(element),
13631363
metadata: ManifestMetadata.encode(context, element.metadata),
13641364
typeParameters: typeParameters,
13651365
aliasedType: element.aliasedType.encode(context),
@@ -1370,17 +1370,22 @@ class TypeAliasItem extends ManifestItem<TypeAliasElementImpl> {
13701370
factory TypeAliasItem.read(SummaryDataReader reader) {
13711371
return TypeAliasItem(
13721372
id: ManifestItemId.read(reader),
1373-
flags: _ManifestItemFlags.read(reader),
1373+
flags: _TypeAliasItemFlags.read(reader),
13741374
metadata: ManifestMetadata.read(reader),
13751375
typeParameters: ManifestTypeParameter.readList(reader),
13761376
aliasedType: ManifestType.read(reader),
13771377
);
13781378
}
13791379

1380+
@override
1381+
_TypeAliasItemFlags get flags => super.flags as _TypeAliasItemFlags;
1382+
13801383
@override
13811384
bool match(MatchContext context, TypeAliasElementImpl element) {
13821385
context.addTypeParameters(element.typeParameters);
13831386
return super.match(context, element) &&
1387+
flags.isSimplyBounded == element.isSimplyBounded &&
1388+
flags.isProperRename == element.isProperRename &&
13841389
typeParameters.match(context, element.typeParameters) &&
13851390
aliasedType.match(context, element.aliasedType);
13861391
}
@@ -1481,6 +1486,8 @@ enum _MixinItemFlag { isBase }
14811486

14821487
enum _TopLevelVariableItemFlag { isExternal }
14831488

1489+
enum _TypeAliasItemFlag { isProperRename, isSimplyBounded }
1490+
14841491
enum _VariableItemFlag {
14851492
hasInitializer,
14861493
hasImplicitType,
@@ -1869,10 +1876,6 @@ extension type _ManifestItemFlags._(int _bits) {
18691876
return _ManifestItemFlags._(bits);
18701877
}
18711878

1872-
factory _ManifestItemFlags.read(SummaryDataReader reader) {
1873-
return _ManifestItemFlags._(reader.readUint30());
1874-
}
1875-
18761879
bool get isSynthetic {
18771880
return _has(_ManifestItemFlag.isSynthetic);
18781881
}
@@ -1999,6 +2002,47 @@ extension type _TopLevelVariableItemFlags._(int _bits)
19992002
}
20002003
}
20012004

2005+
extension type _TypeAliasItemFlags._(int _bits) implements _ManifestItemFlags {
2006+
static final int _base = _ManifestItemFlags._next;
2007+
2008+
factory _TypeAliasItemFlags.encode(TypeAliasElementImpl element) {
2009+
var bits = _ManifestItemFlags.encode(element)._bits;
2010+
if (element.isProperRename) {
2011+
bits |= _maskFor(_TypeAliasItemFlag.isProperRename);
2012+
}
2013+
if (element.isSimplyBounded) {
2014+
bits |= _maskFor(_TypeAliasItemFlag.isSimplyBounded);
2015+
}
2016+
return _TypeAliasItemFlags._(bits);
2017+
}
2018+
2019+
factory _TypeAliasItemFlags.read(SummaryDataReader reader) {
2020+
return _TypeAliasItemFlags._(reader.readUint30());
2021+
}
2022+
2023+
bool get isProperRename {
2024+
return _has(_TypeAliasItemFlag.isProperRename);
2025+
}
2026+
2027+
bool get isSimplyBounded {
2028+
return _has(_TypeAliasItemFlag.isSimplyBounded);
2029+
}
2030+
2031+
void write(BufferedSink sink) {
2032+
sink.writeUint30(_bits);
2033+
}
2034+
2035+
bool _has(_TypeAliasItemFlag flag) {
2036+
return (_bits & _maskFor(flag)) != 0;
2037+
}
2038+
2039+
static int _maskFor(_TypeAliasItemFlag flag) {
2040+
var bit = _base + flag.index;
2041+
assert(bit < 30);
2042+
return 1 << bit;
2043+
}
2044+
}
2045+
20022046
extension type _VariableItemFlags._(int _bits) implements _ManifestItemFlags {
20032047
static final int _base = _ManifestItemFlags._next;
20042048
static final int _next = _base + _VariableItemFlag.values.length;

pkg/analyzer/test/src/dart/analysis/driver_test.dart

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62636,6 +62636,7 @@ const x = A;
6263662636
package:test/a.dart
6263762637
declaredTypeAliases
6263862638
A: #M0
62639+
flags: isProperRename isSimplyBounded
6263962640
aliasedType: int @ dart:core
6264062641
[operation] linkLibraryCycle
6264162642
package:test/test.dart
@@ -78236,6 +78237,168 @@ typedef B = int;
7823678237
);
7823778238
}
7823878239

78240+
test_manifest_typeAlias_modifier_isProperRename() async {
78241+
configuration.withElementManifests = true;
78242+
await _runLibraryManifestScenario(
78243+
initialCode: r'''
78244+
typedef A<T> = List<T>;
78245+
typedef B<T extends num> = List<T>;
78246+
typedef C<T> = List<T>;
78247+
typedef D<T extends num> = List<T>;
78248+
''',
78249+
expectedInitialEvents: r'''
78250+
[operation] linkLibraryCycle SDK
78251+
[operation] linkLibraryCycle
78252+
package:test/test.dart
78253+
declaredTypeAliases
78254+
A: #M0
78255+
flags: isProperRename isSimplyBounded
78256+
typeParameters
78257+
#0 covariant
78258+
bound: <null>
78259+
aliasedType: List @ dart:core
78260+
typeParameter#0
78261+
B: #M1
78262+
flags: isSimplyBounded
78263+
typeParameters
78264+
#0 covariant
78265+
bound: num @ dart:core
78266+
aliasedType: List @ dart:core
78267+
typeParameter#0
78268+
C: #M2
78269+
flags: isProperRename isSimplyBounded
78270+
typeParameters
78271+
#0 covariant
78272+
bound: <null>
78273+
aliasedType: List @ dart:core
78274+
typeParameter#0
78275+
D: #M3
78276+
flags: isSimplyBounded
78277+
typeParameters
78278+
#0 covariant
78279+
bound: num @ dart:core
78280+
aliasedType: List @ dart:core
78281+
typeParameter#0
78282+
''',
78283+
updatedCode: r'''
78284+
typedef A<T> = List<T>;
78285+
typedef B<T extends num> = List<T>;
78286+
typedef C<T extends num> = List<T>;
78287+
typedef D<T> = List<T>;
78288+
''',
78289+
expectedUpdatedEvents: r'''
78290+
[operation] linkLibraryCycle
78291+
package:test/test.dart
78292+
declaredTypeAliases
78293+
A: #M0
78294+
flags: isProperRename isSimplyBounded
78295+
typeParameters
78296+
#0 covariant
78297+
bound: <null>
78298+
aliasedType: List @ dart:core
78299+
typeParameter#0
78300+
B: #M1
78301+
flags: isSimplyBounded
78302+
typeParameters
78303+
#0 covariant
78304+
bound: num @ dart:core
78305+
aliasedType: List @ dart:core
78306+
typeParameter#0
78307+
C: #M4
78308+
flags: isSimplyBounded
78309+
typeParameters
78310+
#0 covariant
78311+
bound: num @ dart:core
78312+
aliasedType: List @ dart:core
78313+
typeParameter#0
78314+
D: #M5
78315+
flags: isProperRename isSimplyBounded
78316+
typeParameters
78317+
#0 covariant
78318+
bound: <null>
78319+
aliasedType: List @ dart:core
78320+
typeParameter#0
78321+
''',
78322+
);
78323+
}
78324+
78325+
test_manifest_typeAlias_modifier_isSimplyBounded() async {
78326+
configuration.withElementManifests = true;
78327+
await _runLibraryManifestScenario(
78328+
initialCode: r'''
78329+
typedef A<T> = int;
78330+
typedef B<T extends List<T>> = int;
78331+
typedef C<T> = int;
78332+
typedef D<T extends List<T>> = int;
78333+
''',
78334+
expectedInitialEvents: r'''
78335+
[operation] linkLibraryCycle SDK
78336+
[operation] linkLibraryCycle
78337+
package:test/test.dart
78338+
declaredTypeAliases
78339+
A: #M0
78340+
flags: isSimplyBounded
78341+
typeParameters
78342+
#0 unrelated
78343+
bound: <null>
78344+
aliasedType: int @ dart:core
78345+
B: #M1
78346+
typeParameters
78347+
#0 unrelated
78348+
bound: List @ dart:core
78349+
typeParameter#0
78350+
aliasedType: int @ dart:core
78351+
C: #M2
78352+
flags: isSimplyBounded
78353+
typeParameters
78354+
#0 unrelated
78355+
bound: <null>
78356+
aliasedType: int @ dart:core
78357+
D: #M3
78358+
typeParameters
78359+
#0 unrelated
78360+
bound: List @ dart:core
78361+
typeParameter#0
78362+
aliasedType: int @ dart:core
78363+
''',
78364+
updatedCode: r'''
78365+
typedef A<T> = int;
78366+
typedef B<T extends List<T>> = int;
78367+
typedef C<T extends List<T>> = int;
78368+
typedef D<T> = int;
78369+
''',
78370+
expectedUpdatedEvents: r'''
78371+
[operation] linkLibraryCycle
78372+
package:test/test.dart
78373+
declaredTypeAliases
78374+
A: #M0
78375+
flags: isSimplyBounded
78376+
typeParameters
78377+
#0 unrelated
78378+
bound: <null>
78379+
aliasedType: int @ dart:core
78380+
B: #M1
78381+
typeParameters
78382+
#0 unrelated
78383+
bound: List @ dart:core
78384+
typeParameter#0
78385+
aliasedType: int @ dart:core
78386+
C: #M4
78387+
typeParameters
78388+
#0 unrelated
78389+
bound: List @ dart:core
78390+
typeParameter#0
78391+
aliasedType: int @ dart:core
78392+
D: #M5
78393+
flags: isSimplyBounded
78394+
typeParameters
78395+
#0 unrelated
78396+
bound: <null>
78397+
aliasedType: int @ dart:core
78398+
''',
78399+
);
78400+
}
78401+
7823978402
test_manifest_typeAlias_typeParameters_bound() async {
7824078403
configuration.withElementManifests = true;
7824178404
await _runLibraryManifestScenario(
@@ -78248,6 +78411,7 @@ typedef F<X extends num> = List<X>;
7824878411
package:test/test.dart
7824978412
declaredTypeAliases
7825078413
F: #M0
78414+
flags: isSimplyBounded
7825178415
typeParameters
7825278416
#0 covariant
7825378417
bound: num @ dart:core
@@ -78262,6 +78426,7 @@ typedef F<X extends int> = List<X>;
7826278426
package:test/test.dart
7826378427
declaredTypeAliases
7826478428
F: #M1
78429+
flags: isSimplyBounded
7826578430
typeParameters
7826678431
#0 covariant
7826778432
bound: int @ dart:core

pkg/analyzer/test/src/dart/analysis/result_printer.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1820,6 +1820,10 @@ class LibraryManifestPrinter {
18201820
void _writeTypeAliasItem(TypeAliasItem item) {
18211821
if (configuration.withElementManifests) {
18221822
sink.withIndent(() {
1823+
sink.writeFlags({
1824+
'isProperRename': item.flags.isProperRename,
1825+
'isSimplyBounded': item.flags.isSimplyBounded,
1826+
});
18231827
_writeMetadata(item);
18241828
_writeTypeParameters(item.typeParameters);
18251829
_writeNamedType('aliasedType', item.aliasedType);

0 commit comments

Comments
 (0)