Skip to content

Commit 5c79bae

Browse files
committed
refactor(dccd): code cleanup
1 parent e11de59 commit 5c79bae

File tree

2 files changed

+75
-75
lines changed

2 files changed

+75
-75
lines changed

lib/change_detection/dirty_checking_change_detector.dart

+75-73
Original file line numberDiff line numberDiff line change
@@ -939,6 +939,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
939939

940940
bool _check(Iterable collection) {
941941
_reset();
942+
942943
if (collection is UnmodifiableListView && identical(_iterable, collection)) {
943944
// Short circuit and assume that the list has not been modified.
944945
return false;
@@ -988,11 +989,9 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
988989
*/
989990
void _reset() {
990991
if (isDirty) {
991-
// Record the state of the collection for a possible _revertToPreviousState()
992-
for (ItemRecord<V> record = _previousItHead = _itHead;
993-
record != null;
994-
record = record._next) {
995-
record._nextPrevious = record._next;
992+
// Record the state of the collection for a possible `_revertToPreviousState()`
993+
for (ItemRecord<V> r = _previousItHead = _itHead; r != null; r = r._next) {
994+
r._nextPrevious = r._next;
996995
}
997996
_undoDeltas();
998997
}
@@ -1043,33 +1042,37 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
10431042
return record..item = item;
10441043
}
10451044

1046-
if (item is num && (item as num).isNaN && record.item is num && (record.item as num).isNaN){
1045+
if (item is num && (item as num).isNaN && record.item is num && (record.item as num).isNaN) {
10471046
// we need this for JavaScript since in JS NaN !== NaN.
10481047
return record;
10491048
}
10501049
}
10511050

1052-
// find the previous record so that we know where to insert after.
1053-
ItemRecord<V> prev = record == null ? _itTail : record._prev;
1051+
// The previous record after which we will append the current one.
1052+
ItemRecord<V> previousRecord;
1053+
1054+
if (record == null) {
1055+
previousRecord = _itTail;
1056+
} else {
1057+
previousRecord = record._prev;
1058+
// Remove the record from the collection since we know it does not match the item.
1059+
_remove(record);
1060+
}
10541061

1055-
// Remove the record from the collection since we know it does not match the
1056-
// item.
1057-
if (record != null) _collection_remove(record);
10581062
// Attempt to see if we have seen the item before.
10591063
record = _movedItems.get(item, index);
10601064
if (record != null) {
10611065
// We have seen this before, we need to move it forward in the collection.
1062-
_collection_moveAfter(record, prev, index);
1066+
_moveAfter(record, previousRecord, index);
10631067
} else {
10641068
// Never seen it, check evicted list.
10651069
record = _removedItems.get(item);
10661070
if (record != null) {
1067-
// It is an item which we have earlier evict it, reinsert it back into
1068-
// the list.
1069-
_collection_reinsertAfter(record, prev, index);
1071+
// It is an item which we have evicted earlier: reinsert it back into the list.
1072+
_collection_reinsertAfter(record, previousRecord, index);
10701073
} else {
1071-
// It is a new item add it.
1072-
record = _collection_addAfter(new ItemRecord<V>(item), prev, index);
1074+
// It is a new item: add it.
1075+
record = _addAfter(new ItemRecord<V>(item), previousRecord, index);
10731076
}
10741077
}
10751078
return record;
@@ -1101,14 +1104,13 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
11011104
* position. This is incorrect, since a better way to think of it is as insert
11021105
* of 'b' rather then switch 'a' with 'b' and then add 'a' at the end.
11031106
*/
1104-
ItemRecord<V> verifyReinsertion(ItemRecord record, dynamic item,
1105-
int index) {
1107+
ItemRecord<V> verifyReinsertion(ItemRecord record, item, int index) {
11061108
ItemRecord<V> reinsertRecord = _removedItems.get(item);
11071109
if (reinsertRecord != null) {
11081110
record = _collection_reinsertAfter(reinsertRecord, record._prev, index);
11091111
} else if (record.currentIndex != index) {
11101112
record.currentIndex = index;
1111-
_moves_add(record);
1113+
_addToMoves(record);
11121114
}
11131115
return record;
11141116
}
@@ -1122,7 +1124,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
11221124
// Anything after that needs to be removed;
11231125
while (record != null) {
11241126
ItemRecord<V> nextRecord = record._next;
1125-
_removals_add(_collection_unlink(record));
1127+
_addToRemovals(_unlink(record));
11261128
record = nextRecord;
11271129
}
11281130
_removedItems.clear();
@@ -1154,24 +1156,24 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
11541156
next._prevRemoved = prev;
11551157
}
11561158

1157-
_collection_insertAfter(record, insertPrev, index);
1158-
_moves_add(record);
1159+
_insertAfter(record, insertPrev, index);
1160+
_addToMoves(record);
11591161
return record;
11601162
}
11611163

1162-
ItemRecord<V> _collection_moveAfter(ItemRecord<V> record,
1163-
ItemRecord<V> prev,
1164+
ItemRecord<V> _moveAfter(ItemRecord<V> record,
1165+
ItemRecord<V> prevRecord,
11641166
int index) {
1165-
_collection_unlink(record);
1166-
_collection_insertAfter(record, prev, index);
1167-
_moves_add(record);
1167+
_unlink(record);
1168+
_insertAfter(record, prevRecord, index);
1169+
_addToMoves(record);
11681170
return record;
11691171
}
11701172

1171-
ItemRecord<V> _collection_addAfter(ItemRecord<V> record,
1172-
ItemRecord<V> prev,
1173+
ItemRecord<V> _addAfter(ItemRecord<V> record,
1174+
ItemRecord<V> prevRecord,
11731175
int index) {
1174-
_collection_insertAfter(record, prev, index);
1176+
_insertAfter(record, prevRecord, index);
11751177

11761178
if (_additionsTail == null) {
11771179
assert(_additionsHead == null);
@@ -1184,38 +1186,37 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
11841186
return record;
11851187
}
11861188

1187-
ItemRecord<V> _collection_insertAfter(ItemRecord<V> record,
1188-
ItemRecord<V> prev,
1189+
ItemRecord<V> _insertAfter(ItemRecord<V> record,
1190+
ItemRecord<V> prevRecord,
11891191
int index) {
1190-
assert(record != prev);
1192+
assert(record != prevRecord);
11911193
assert(record._next == null);
11921194
assert(record._prev == null);
11931195

1194-
ItemRecord<V> next = prev == null ? _itHead : prev._next;
1196+
ItemRecord<V> next = prevRecord == null ? _itHead : prevRecord._next;
11951197
assert(next != record);
1196-
assert(prev != record);
1198+
assert(prevRecord != record);
11971199
record._next = next;
1198-
record._prev = prev;
1200+
record._prev = prevRecord;
11991201
if (next == null) {
12001202
_itTail = record;
12011203
} else {
12021204
next._prev = record;
12031205
}
1204-
if (prev == null) {
1206+
if (prevRecord == null) {
12051207
_itHead = record;
12061208
} else {
1207-
prev._next = record;
1209+
prevRecord._next = record;
12081210
}
12091211

12101212
_movedItems.put(record);
12111213
record.currentIndex = index;
12121214
return record;
12131215
}
12141216

1215-
ItemRecord<V> _collection_remove(ItemRecord record) =>
1216-
_removals_add(_collection_unlink(record));
1217+
ItemRecord<V> _remove(ItemRecord record) => _addToRemovals(_unlink(record));
12171218

1218-
ItemRecord<V> _collection_unlink(ItemRecord record) {
1219+
ItemRecord<V> _unlink(ItemRecord record) {
12191220
_movedItems.remove(record);
12201221

12211222
var prev = record._prev;
@@ -1238,7 +1239,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
12381239
return record;
12391240
}
12401241

1241-
ItemRecord<V> _moves_add(ItemRecord<V> record) {
1242+
ItemRecord<V> _addToMoves(ItemRecord<V> record) {
12421243
assert(record._nextMoved == null);
12431244
if (_movesTail == null) {
12441245
assert(_movesHead == null);
@@ -1251,9 +1252,9 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
12511252
return record;
12521253
}
12531254

1254-
ItemRecord<V> _removals_add(ItemRecord<V> record) {
1255-
record.currentIndex = null;
1255+
ItemRecord<V> _addToRemovals(ItemRecord<V> record) {
12561256
_removedItems.put(record);
1257+
record.currentIndex = null;
12571258

12581259
if (_removalsTail == null) {
12591260
assert(_removalsHead == null);
@@ -1325,35 +1326,37 @@ class ItemRecord<V> extends CollectionChangeItem<V> {
13251326

13261327
/// A linked list of [ItemRecord]s with the same [ItemRecord.item]
13271328
class _DuplicateItemRecordList {
1328-
ItemRecord head, tail;
1329+
ItemRecord _head, _tail;
13291330

13301331
/**
13311332
* Add the [record] before the [insertBefore] in the list of duplicates or at the end of the list
13321333
* when no [insertBefore] is specified.
13331334
*
13341335
* Note: by design all records in the list of duplicates hold the save value in [record.item].
13351336
*/
1336-
void add(ItemRecord record, ItemRecord previousRecord) {
1337-
assert(previousRecord == null || previousRecord.item == record.item);
1338-
if (head == null) {
1339-
assert(previousRecord == null);
1340-
head = tail = record;
1337+
void add(ItemRecord record, ItemRecord insertBefore) {
1338+
assert(insertBefore == null || insertBefore.item == record.item);
1339+
if (_head == null) {
1340+
/// pushing the first [ItemRecord] to the list
1341+
assert(insertBefore == null);
1342+
_head = _tail = record;
13411343
record._nextDup = null;
13421344
record._prevDup = null;
13431345
} else {
1344-
assert(record.item == head.item);
1345-
if (previousRecord == null) {
1346-
tail._nextDup = record;
1347-
record._prevDup = tail;
1346+
// adding a duplicate [ItemRecord] to the list
1347+
assert(record.item == _head.item);
1348+
if (insertBefore == null) {
1349+
_tail._nextDup = record;
1350+
record._prevDup = _tail;
13481351
record._nextDup = null;
1349-
tail = record;
1352+
_tail = record;
13501353
} else {
1351-
var prev = previousRecord._prevDup;
1352-
var next = previousRecord;
1354+
var prev = insertBefore._prevDup;
1355+
var next = insertBefore;
13531356
record._prevDup = prev;
13541357
record._nextDup = next;
13551358
if (prev == null) {
1356-
head = record;
1359+
_head = record;
13571360
} else {
13581361
prev._nextDup = record;
13591362
}
@@ -1366,13 +1369,12 @@ class _DuplicateItemRecordList {
13661369
/// [hideIndex]
13671370
ItemRecord get(item, int hideIndex) {
13681371
ItemRecord record;
1369-
for (record = head; record != null; record = record._nextDup) {
1370-
if ((hideIndex == null || hideIndex < record.currentIndex) &&
1371-
identical(record.item, key)) {
1372+
for (record = _head; record != null; record = record._nextDup) {
1373+
if ((hideIndex == null || hideIndex < record.currentIndex) && identical(record.item, item)) {
13721374
return record;
13731375
}
13741376
}
1375-
return record;
1377+
return null;
13761378
}
13771379

13781380
/**
@@ -1382,8 +1384,8 @@ class _DuplicateItemRecordList {
13821384
*/
13831385
bool remove(ItemRecord record) {
13841386
assert(() {
1385-
// verify that the record being removed is someplace in the list.
1386-
for (ItemRecord cursor = head; cursor != null; cursor = cursor._nextDup) {
1387+
// verify that the record being removed is in the list.
1388+
for (ItemRecord cursor = _head; cursor != null; cursor = cursor._nextDup) {
13871389
if (identical(cursor, record)) return true;
13881390
}
13891391
return false;
@@ -1392,16 +1394,16 @@ class _DuplicateItemRecordList {
13921394
var prev = record._prevDup;
13931395
var next = record._nextDup;
13941396
if (prev == null) {
1395-
head = next;
1397+
_head = next;
13961398
} else {
13971399
prev._nextDup = next;
13981400
}
13991401
if (next == null) {
1400-
tail = prev;
1402+
_tail = prev;
14011403
} else {
14021404
next._prevDup = prev;
14031405
}
1404-
return head == null;
1406+
return _head == null;
14051407
}
14061408
}
14071409

@@ -1414,9 +1416,8 @@ class _DuplicateItemRecordList {
14141416
class DuplicateMap {
14151417
final map = <dynamic, _DuplicateItemRecordList>{};
14161418

1417-
void put(ItemRecord record, [ItemRecord beforeRecord = null]) {
1418-
map.putIfAbsent(record.item, () => new _DuplicateItemRecordList())
1419-
.add(record, beforeRecord);
1419+
void put(ItemRecord record, [ItemRecord insertBefore = null]) {
1420+
map.putIfAbsent(record.item, () => new _DuplicateItemRecordList()).add(record, insertBefore);
14201421
}
14211422

14221423
/**
@@ -1437,8 +1438,9 @@ class DuplicateMap {
14371438
* The list of duplicates also is removed from the map if it gets empty.
14381439
*/
14391440
ItemRecord remove(ItemRecord record) {
1441+
assert(map.containsKey(record.item));
14401442
_DuplicateItemRecordList recordList = map[record.item];
1441-
assert(recordList != null);
1443+
// Remove the list of duplicates when it gets empty
14421444
if (recordList.remove(record)) map.remove(record.item);
14431445
return record;
14441446
}
@@ -1449,5 +1451,5 @@ class DuplicateMap {
14491451
map.clear();
14501452
}
14511453

1452-
String toString() => "$runtimeType($map)";
1454+
String toString() => "DuplicateMap($map)";
14531455
}

test/change_detection/dirty_checking_change_detector_spec.dart

-2
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,6 @@ void testWithGetterFactory(FieldGetterFactory getterFactory) {
195195
try {
196196
for (var i = 0; i < 100000; i++) {
197197
if (i % 50 == 0) {
198-
//print(steps);
199-
//print('===================================');
200198
records = [];
201199
steps = [];
202200
detectors = [new DirtyCheckingChangeDetector<String>(getterFactory)];

0 commit comments

Comments
 (0)