Skip to content

Commit 691b939

Browse files
committed
Cider. Use CiderByteStore in tests.
Simplify MemoryByteStore. In Cider we discard values when the last use of the key is released. OTOH, outside of Cider, we use FileByteStore, which does not immediately discard values, but might eventually when the storage directory overflows. Using the infinite MemoryByteStore in tests is better suited for most tests. But for Cider we need its own implementation of ByteStore that reflects the discarding behaviour. Change-Id: Ief83eabac7f4a240feabf609b0dd0d5548bfc70f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/420640 Reviewed-by: Paul Berry <[email protected]>
1 parent 8d77908 commit 691b939

File tree

4 files changed

+51
-29
lines changed

4 files changed

+51
-29
lines changed

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

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,11 @@ abstract class ByteStore {
3737
void release(Iterable<String> keys);
3838
}
3939

40-
/// [ByteStore] which stores data only in memory.
41-
class MemoryByteStore implements ByteStore {
42-
@visibleForTesting
43-
final Map<String, MemoryByteStoreEntry> map = {};
44-
45-
/// Throws [StateError] if [release] invoked when there is no entry.
40+
/// [ByteStore] which stores data only in memory, and evicts data as soon as it
41+
/// becomes unreferenced.
42+
class CiderByteStore implements ByteStore {
4643
@visibleForTesting
47-
bool throwIfReleaseWithoutEntry = false;
44+
final Map<String, CiderByteStoreEntry> map = {};
4845

4946
@override
5047
Uint8List? get(String key) {
@@ -65,39 +62,59 @@ class MemoryByteStore implements ByteStore {
6562
return entry.bytes;
6663
}
6764

68-
map[key] = MemoryByteStoreEntry._(bytes);
65+
map[key] = CiderByteStoreEntry._(bytes);
6966
return bytes;
7067
}
7168

7269
@override
7370
void release(Iterable<String> keys) {
7471
for (var key in keys) {
7572
var entry = map[key];
76-
if (entry != null) {
77-
entry.refCount--;
78-
if (entry.refCount == 0) {
79-
map.remove(key);
80-
}
81-
} else if (throwIfReleaseWithoutEntry) {
82-
throw StateError('No entry: $key');
73+
if (entry == null) {
74+
// TODO(scheglov): enable and fix
75+
// throw StateError('No entry: $key');
76+
return;
77+
}
78+
entry.refCount--;
79+
if (entry.refCount == 0) {
80+
map.remove(key);
8381
}
8482
}
8583
}
8684
}
8785

8886
@visibleForTesting
89-
class MemoryByteStoreEntry {
87+
class CiderByteStoreEntry {
9088
final Uint8List bytes;
9189
int refCount = 1;
9290

93-
MemoryByteStoreEntry._(this.bytes);
91+
CiderByteStoreEntry._(this.bytes);
9492

9593
@override
9694
String toString() {
9795
return '(length: ${bytes.length}, refCount: $refCount)';
9896
}
9997
}
10098

99+
/// [ByteStore] which stores data only in memory.
100+
class MemoryByteStore implements ByteStore {
101+
final Map<String, Uint8List> map = {};
102+
103+
@override
104+
Uint8List? get(String key) {
105+
return map[key];
106+
}
107+
108+
@override
109+
Uint8List putGet(String key, Uint8List bytes) {
110+
map[key] = bytes;
111+
return bytes;
112+
}
113+
114+
@override
115+
void release(Iterable<String> keys) {}
116+
}
117+
101118
/// A wrapper around [ByteStore] which adds an in-memory LRU cache to it.
102119
class MemoryCachingByteStore implements ByteStore {
103120
final ByteStore _store;

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

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import 'package:collection/collection.dart';
1616
import 'package:test/test.dart';
1717

1818
class AnalyzerStatePrinter {
19-
final MemoryByteStore byteStore;
19+
final ByteStore byteStore;
2020
final UnlinkedUnitStoreImpl unlinkedUnitStore;
2121
final IdProvider idProvider;
2222
final LibraryContext libraryContext;
@@ -98,14 +98,19 @@ class AnalyzerStatePrinter {
9898
void _writeByteStore() {
9999
sink.writelnWithIndent('byteStore');
100100
sink.withIndent(() {
101-
var groups = byteStore.map.entries.groupListsBy((element) {
102-
return element.value.refCount;
103-
});
104-
105-
for (var groupEntry in groups.entries) {
106-
var keys = groupEntry.value.map((e) => e.key).toList();
107-
var shortKeys = idProvider.shortKeys(keys)..sort();
108-
sink.writelnWithIndent('${groupEntry.key}: $shortKeys');
101+
switch (byteStore) {
102+
case CiderByteStore byteStore:
103+
var groups = byteStore.map.entries.groupListsBy((element) {
104+
return element.value.refCount;
105+
});
106+
107+
for (var groupEntry in groups.entries) {
108+
var keys = groupEntry.value.map((e) => e.key).toList();
109+
var shortKeys = idProvider.shortKeys(keys)..sort();
110+
sink.writelnWithIndent('${groupEntry.key}: $shortKeys');
111+
}
112+
default:
113+
throw UnimplementedError('${byteStore.runtimeType}');
109114
}
110115
});
111116
}

pkg/analyzer/test/src/dart/micro/file_resolution.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import '../resolution/resolution.dart';
3232

3333
/// [FileResolver] based implementation of [ResolutionTest].
3434
class FileResolutionTest with ResourceProviderMixin, ResolutionTest {
35-
final MemoryByteStore byteStore = MemoryByteStore();
35+
final CiderByteStore byteStore = CiderByteStore();
3636

3737
final FileResolverTestData testData = FileResolverTestData();
3838

pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1666,7 +1666,7 @@ elementFactory
16661666
unlinkedUnitStore
16671667
1: [k00, k02, k03, k04, k05, k06, k07]
16681668
byteStore
1669-
1: [k00, k02, k03, k04, k05, k06, k07]
1669+
1: [k00, k02, k03, k04, k05, k06, k07, k08]
16701670
''');
16711671

16721672
var b_library = await fileResolver.getLibraryByUri2(
@@ -1735,7 +1735,7 @@ elementFactory
17351735
unlinkedUnitStore
17361736
1: [k00, k02, k03, k04, k05, k06, k07]
17371737
byteStore
1738-
1: [k00, k02, k03, k04, k05, k06, k07]
1738+
1: [k00, k02, k03, k04, k05, k06, k07, k08]
17391739
''');
17401740
}
17411741

0 commit comments

Comments
 (0)