Handle Tag.MemberLegacyWithoutTypeArguments, don't write empty type arguments.

Change-Id: I838a046a4dfa7744528e85ceae90efe0403b1ef6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/274261
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Konstantin Shcheglov 2022-12-07 22:57:58 +00:00 committed by Commit Queue
parent 66f1dee48c
commit fe968d979e
3 changed files with 23 additions and 20 deletions

View file

@ -85,7 +85,7 @@ import 'package:analyzer/src/util/performance/operation_performance.dart';
/// TODO(scheglov) Clean up the list of implicitly analyzed files.
class AnalysisDriver implements AnalysisDriverGeneric {
/// The version of data format, should be incremented on every format change.
static const int DATA_VERSION = 251;
static const int DATA_VERSION = 252;
/// The number of exception contexts allowed to write. Once this field is
/// zero, we stop writing any new exception contexts in this process.

View file

@ -1634,19 +1634,16 @@ class ResolutionReader {
if (memberFlags == Tag.MemberLegacyWithTypeArguments ||
memberFlags == Tag.MemberWithTypeArguments) {
var arguments = _readTypeList();
// TODO(scheglov) why to check for empty? If we have this flags.
if (arguments.isNotEmpty) {
var typeParameters =
(element.enclosingElement as TypeParameterizedElement)
.typeParameters;
var substitution = Substitution.fromPairs(typeParameters, arguments);
element =
ExecutableMember.from2(element as ExecutableElement, substitution);
}
element as ExecutableElement;
var enclosing = element.enclosingElement as TypeParameterizedElement;
var typeParameters = enclosing.typeParameters;
var typeArguments = _readTypeList();
var substitution = Substitution.fromPairs(typeParameters, typeArguments);
element = ExecutableMember.from2(element, substitution);
}
if (memberFlags == Tag.MemberLegacyWithTypeArguments) {
if (memberFlags == Tag.MemberLegacyWithoutTypeArguments ||
memberFlags == Tag.MemberLegacyWithTypeArguments) {
return Member.legacy(element);
}

View file

@ -598,14 +598,20 @@ class ResolutionSink extends _SummaryDataWriter {
element.substitution.map,
);
writeByte(
isLegacy
? Tag.MemberLegacyWithTypeArguments
: Tag.MemberWithTypeArguments,
);
_writeElement(declaration);
_writeTypeList(typeArguments);
if (isLegacy) {
if (typeArguments.isEmpty) {
writeByte(Tag.MemberLegacyWithoutTypeArguments);
_writeElement(declaration);
} else {
writeByte(Tag.MemberLegacyWithTypeArguments);
_writeElement(declaration);
_writeTypeList(typeArguments);
}
} else {
writeByte(Tag.MemberWithTypeArguments);
_writeElement(declaration);
_writeTypeList(typeArguments);
}
} else {
writeByte(Tag.RawElement);
_writeElement(element);