33// BSD-style license that can be found in the LICENSE file.
44
55import 'package:analyzer/dart/ast/ast.dart' ;
6+ import 'package:analyzer/dart/element/element.dart' ;
67import 'package:analyzer/src/binary/binary_reader.dart' ;
78import 'package:analyzer/src/binary/binary_writer.dart' ;
89import 'package:analyzer/src/dart/element/element.dart' ;
@@ -15,6 +16,7 @@ import 'package:analyzer/src/fine/manifest_type.dart';
1516import 'package:analyzer/src/utilities/extensions/collection.dart' ;
1617import 'package:collection/collection.dart' ;
1718import 'package:meta/meta.dart' ;
19+ import 'package:pub_semver/pub_semver.dart' ;
1820
1921class ClassItem extends InterfaceItem <ClassElementImpl > {
2022 ClassItem ({
@@ -1016,6 +1018,82 @@ sealed class ManifestItem<E extends ElementImpl> {
10161018 }
10171019}
10181020
1021+ class ManifestLibraryLanguageVersion {
1022+ final Version packageVersion;
1023+ final Version ? overrideVersion;
1024+
1025+ ManifestLibraryLanguageVersion ({
1026+ required this .packageVersion,
1027+ required this .overrideVersion,
1028+ });
1029+
1030+ ManifestLibraryLanguageVersion .empty ()
1031+ : packageVersion = Version .none,
1032+ overrideVersion = null ;
1033+
1034+ factory ManifestLibraryLanguageVersion .encode (
1035+ LibraryLanguageVersion languageVersion,
1036+ ) {
1037+ return ManifestLibraryLanguageVersion (
1038+ packageVersion: languageVersion.package,
1039+ overrideVersion: languageVersion.override,
1040+ );
1041+ }
1042+
1043+ factory ManifestLibraryLanguageVersion .read (SummaryDataReader reader) {
1044+ return ManifestLibraryLanguageVersion (
1045+ packageVersion: _readVersion (reader),
1046+ overrideVersion: reader.readOptionalObject (() => _readVersion (reader)),
1047+ );
1048+ }
1049+
1050+ @override
1051+ int get hashCode {
1052+ return Object .hash (packageVersion, overrideVersion);
1053+ }
1054+
1055+ @override
1056+ bool operator == (Object other) {
1057+ return other is ManifestLibraryLanguageVersion &&
1058+ packageVersion == other.packageVersion &&
1059+ overrideVersion == other.overrideVersion;
1060+ }
1061+
1062+ @override
1063+ String toString () {
1064+ var result = '(package: $packageVersion ' ;
1065+ if (overrideVersion case var overrideVersion? ) {
1066+ result += ', override: $overrideVersion ' ;
1067+ }
1068+ result += ')' ;
1069+ return result;
1070+ }
1071+
1072+ void write (BufferedSink sink) {
1073+ _writeVersion (sink, packageVersion);
1074+ sink.writeOptionalObject (overrideVersion, (it) => _writeVersion (sink, it));
1075+ }
1076+
1077+ static ManifestLibraryLanguageVersion ? readOptional (
1078+ SummaryDataReader reader,
1079+ ) {
1080+ return reader.readOptionalObject (
1081+ () => ManifestLibraryLanguageVersion .read (reader),
1082+ );
1083+ }
1084+
1085+ static Version _readVersion (SummaryDataReader reader) {
1086+ var major = reader.readUint30 ();
1087+ var minor = reader.readUint30 ();
1088+ return Version (major, minor, 0 );
1089+ }
1090+
1091+ static void _writeVersion (BufferedSink sink, Version version) {
1092+ sink.writeUint30 (version.major);
1093+ sink.writeUint30 (version.minor);
1094+ }
1095+ }
1096+
10191097class ManifestMetadata {
10201098 final List <ManifestAnnotation > annotations;
10211099
0 commit comments