blob: e9ceb2a8d53dc3788ccd5ebe19bb0a118dd910af [file] [log] [blame]
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/src/summary2/data_reader.dart';
import 'package:analyzer/src/summary2/data_writer.dart';
import 'package:analyzer/src/utilities/extensions/string.dart';
/// The base name of an element.
///
/// In contrast to [LookupName] there is no `=` at the end.
extension type BaseName(String _it) {
factory BaseName.read(SummaryDataReader reader) {
var str = reader.readStringUtf8();
return BaseName(str);
}
void write(BufferedSink sink) {
sink.writeStringUtf8(_it);
}
static int compare(BaseName left, BaseName right) {
return left._it.compareTo(right._it);
}
}
/// The lookup name of an element.
///
/// Specifically, for setters there is `=` at the end.
extension type LookupName(String _it) {
factory LookupName.read(SummaryDataReader reader) {
var str = reader.readStringUtf8();
return LookupName(str);
}
BaseName get asBaseName {
var str = _it.removeSuffix('=') ?? _it;
return str.asBaseName;
}
/// Returns the underlying [String] value, explicitly.
String get asString => _it;
bool get isPrivate => _it.startsWith('_');
void write(BufferedSink sink) {
sink.writeStringUtf8(_it);
}
static int compare(LookupName left, LookupName right) {
return left._it.compareTo(right._it);
}
}
extension BufferedSinkExtension on BufferedSink {
void writeBaseNameIterable(Iterable<BaseName> names) {
writeUInt30(names.length);
for (var baseName in names) {
baseName.write(this);
}
}
}
extension IterableOfBaseNameExtension on Iterable<BaseName> {
List<BaseName> sorted() => [...this]..sort(BaseName.compare);
}
extension IterableOfStringExtension on Iterable<String> {
Set<BaseName> toBaseNameSet() {
return map((str) => str.asBaseName).toSet();
}
}
extension StringExtension on String {
BaseName get asBaseName {
return BaseName(this);
}
LookupName get asLookupName {
return LookupName(this);
}
}
extension SummaryDataReaderExtension on SummaryDataReader {
Set<BaseName> readBaseNameSet() {
var length = readUInt30();
var result = <BaseName>{};
for (var i = 0; i < length; i++) {
var baseName = BaseName.read(this);
result.add(baseName);
}
return result;
}
}