Skip to content

Commit e405bb4

Browse files
vicbtravis@travis-ci.org
authored andcommitted
refactor(dccd): code cleanup
1 parent 4df358a commit e405bb4

File tree

2 files changed

+81
-88
lines changed

2 files changed

+81
-88
lines changed

lib/change_detection/dirty_checking_change_detector.dart

Lines changed: 81 additions & 86 deletions
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+
_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) {
1108-
record = _collection_reinsertAfter(reinsertRecord, record._prev, index);
1110+
record = _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();
@@ -1133,9 +1135,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
11331135
if (_removalsTail != null) _removalsTail._nextRemoved = null;
11341136
}
11351137

1136-
ItemRecord<V> _collection_reinsertAfter(ItemRecord<V> record,
1137-
ItemRecord<V> insertPrev,
1138-
int index) {
1138+
ItemRecord<V> _reinsertAfter(ItemRecord<V> record, ItemRecord<V> prevRecord, int index) {
11391139
_removedItems.remove(record);
11401140
var prev = record._prevRemoved;
11411141
var next = record._nextRemoved;
@@ -1154,24 +1154,20 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
11541154
next._prevRemoved = prev;
11551155
}
11561156

1157-
_collection_insertAfter(record, insertPrev, index);
1158-
_moves_add(record);
1157+
_insertAfter(record, prevRecord, index);
1158+
_addToMoves(record);
11591159
return record;
11601160
}
11611161

1162-
ItemRecord<V> _collection_moveAfter(ItemRecord<V> record,
1163-
ItemRecord<V> prev,
1164-
int index) {
1165-
_collection_unlink(record);
1166-
_collection_insertAfter(record, prev, index);
1167-
_moves_add(record);
1162+
ItemRecord<V> _moveAfter(ItemRecord<V> record, ItemRecord<V> prevRecord, int index) {
1163+
_unlink(record);
1164+
_insertAfter(record, prevRecord, index);
1165+
_addToMoves(record);
11681166
return record;
11691167
}
11701168

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

11761172
if (_additionsTail == null) {
11771173
assert(_additionsHead == null);
@@ -1184,38 +1180,35 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
11841180
return record;
11851181
}
11861182

1187-
ItemRecord<V> _collection_insertAfter(ItemRecord<V> record,
1188-
ItemRecord<V> prev,
1189-
int index) {
1190-
assert(record != prev);
1183+
ItemRecord<V> _insertAfter(ItemRecord<V> record, ItemRecord<V> prevRecord, int index) {
1184+
assert(record != prevRecord);
11911185
assert(record._next == null);
11921186
assert(record._prev == null);
11931187

1194-
ItemRecord<V> next = prev == null ? _itHead : prev._next;
1188+
ItemRecord<V> next = prevRecord == null ? _itHead : prevRecord._next;
11951189
assert(next != record);
1196-
assert(prev != record);
1190+
assert(prevRecord != record);
11971191
record._next = next;
1198-
record._prev = prev;
1192+
record._prev = prevRecord;
11991193
if (next == null) {
12001194
_itTail = record;
12011195
} else {
12021196
next._prev = record;
12031197
}
1204-
if (prev == null) {
1198+
if (prevRecord == null) {
12051199
_itHead = record;
12061200
} else {
1207-
prev._next = record;
1201+
prevRecord._next = record;
12081202
}
12091203

12101204
_movedItems.put(record);
12111205
record.currentIndex = index;
12121206
return record;
12131207
}
12141208

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

1218-
ItemRecord<V> _collection_unlink(ItemRecord record) {
1211+
ItemRecord<V> _unlink(ItemRecord record) {
12191212
_movedItems.remove(record);
12201213

12211214
var prev = record._prev;
@@ -1238,7 +1231,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
12381231
return record;
12391232
}
12401233

1241-
ItemRecord<V> _moves_add(ItemRecord<V> record) {
1234+
ItemRecord<V> _addToMoves(ItemRecord<V> record) {
12421235
assert(record._nextMoved == null);
12431236
if (_movesTail == null) {
12441237
assert(_movesHead == null);
@@ -1251,9 +1244,9 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
12511244
return record;
12521245
}
12531246

1254-
ItemRecord<V> _removals_add(ItemRecord<V> record) {
1255-
record.currentIndex = null;
1247+
ItemRecord<V> _addToRemovals(ItemRecord<V> record) {
12561248
_removedItems.put(record);
1249+
record.currentIndex = null;
12571250

12581251
if (_removalsTail == null) {
12591252
assert(_removalsHead == null);
@@ -1325,35 +1318,37 @@ class ItemRecord<V> extends CollectionChangeItem<V> {
13251318

13261319
/// A linked list of [ItemRecord]s with the same [ItemRecord.item]
13271320
class _DuplicateItemRecordList {
1328-
ItemRecord head, tail;
1321+
ItemRecord _head, _tail;
13291322

13301323
/**
13311324
* Add the [record] before the [insertBefore] in the list of duplicates or at the end of the list
13321325
* when no [insertBefore] is specified.
13331326
*
13341327
* Note: by design all records in the list of duplicates hold the save value in [record.item].
13351328
*/
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;
1329+
void add(ItemRecord record, ItemRecord insertBefore) {
1330+
assert(insertBefore == null || insertBefore.item == record.item);
1331+
if (_head == null) {
1332+
/// pushing the first [ItemRecord] to the list
1333+
assert(insertBefore == null);
1334+
_head = _tail = record;
13411335
record._nextDup = null;
13421336
record._prevDup = null;
13431337
} else {
1344-
assert(record.item == head.item);
1345-
if (previousRecord == null) {
1346-
tail._nextDup = record;
1347-
record._prevDup = tail;
1338+
// adding a duplicate [ItemRecord] to the list
1339+
assert(record.item == _head.item);
1340+
if (insertBefore == null) {
1341+
_tail._nextDup = record;
1342+
record._prevDup = _tail;
13481343
record._nextDup = null;
1349-
tail = record;
1344+
_tail = record;
13501345
} else {
1351-
var prev = previousRecord._prevDup;
1352-
var next = previousRecord;
1346+
var prev = insertBefore._prevDup;
1347+
var next = insertBefore;
13531348
record._prevDup = prev;
13541349
record._nextDup = next;
13551350
if (prev == null) {
1356-
head = record;
1351+
_head = record;
13571352
} else {
13581353
prev._nextDup = record;
13591354
}
@@ -1362,17 +1357,17 @@ class _DuplicateItemRecordList {
13621357
}
13631358
}
13641359

1365-
/// Returns an [ItemRecord] having [ItemRecord.item] == [item] and [ItemRecord.currentIndex] >=
1366-
/// [hideIndex]
1367-
ItemRecord get(item, int hideIndex) {
1360+
/// Returns an [ItemRecord] having [ItemRecord.item] == [item] and
1361+
/// [ItemRecord.currentIndex] >= [afterIndex]
1362+
ItemRecord get(item, int afterIndex) {
13681363
ItemRecord record;
1369-
for (record = head; record != null; record = record._nextDup) {
1370-
if ((hideIndex == null || hideIndex < record.currentIndex) &&
1371-
identical(record.item, key)) {
1364+
for (record = _head; record != null; record = record._nextDup) {
1365+
if ((afterIndex == null || afterIndex < record.currentIndex) &&
1366+
identical(record.item, item)) {
13721367
return record;
13731368
}
13741369
}
1375-
return record;
1370+
return null;
13761371
}
13771372

13781373
/**
@@ -1382,8 +1377,8 @@ class _DuplicateItemRecordList {
13821377
*/
13831378
bool remove(ItemRecord record) {
13841379
assert(() {
1385-
// verify that the record being removed is someplace in the list.
1386-
for (ItemRecord cursor = head; cursor != null; cursor = cursor._nextDup) {
1380+
// verify that the record being removed is in the list.
1381+
for (ItemRecord cursor = _head; cursor != null; cursor = cursor._nextDup) {
13871382
if (identical(cursor, record)) return true;
13881383
}
13891384
return false;
@@ -1392,16 +1387,16 @@ class _DuplicateItemRecordList {
13921387
var prev = record._prevDup;
13931388
var next = record._nextDup;
13941389
if (prev == null) {
1395-
head = next;
1390+
_head = next;
13961391
} else {
13971392
prev._nextDup = next;
13981393
}
13991394
if (next == null) {
1400-
tail = prev;
1395+
_tail = prev;
14011396
} else {
14021397
next._prevDup = prev;
14031398
}
1404-
return head == null;
1399+
return _head == null;
14051400
}
14061401
}
14071402

@@ -1414,21 +1409,20 @@ class _DuplicateItemRecordList {
14141409
class DuplicateMap {
14151410
final map = <dynamic, _DuplicateItemRecordList>{};
14161411

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

14221416
/**
14231417
* Retrieve the `value` using [key]. Because the [ItemRecord] value maybe one which we have
1424-
* already iterated over, we use the [hideIndex] to pretend it is not there.
1418+
* already iterated over, we use the [afterIndex] to pretend it is not there.
14251419
*
14261420
* Use case: `[a, b, c, a, a]` if we are at index `3` which is the second `a` then asking if we
14271421
* have any more `a`s needs to return the last `a` not the first or second.
14281422
*/
1429-
ItemRecord get(key, [int hideIndex]) {
1423+
ItemRecord get(key, [int afterIndex]) {
14301424
_DuplicateItemRecordList recordList = map[key];
1431-
return recordList == null ? null : recordList.get(key, hideIndex);
1425+
return recordList == null ? null : recordList.get(key, afterIndex);
14321426
}
14331427

14341428
/**
@@ -1437,8 +1431,9 @@ class DuplicateMap {
14371431
* The list of duplicates also is removed from the map if it gets empty.
14381432
*/
14391433
ItemRecord remove(ItemRecord record) {
1434+
assert(map.containsKey(record.item));
14401435
_DuplicateItemRecordList recordList = map[record.item];
1441-
assert(recordList != null);
1436+
// Remove the list of duplicates when it gets empty
14421437
if (recordList.remove(record)) map.remove(record.item);
14431438
return record;
14441439
}
@@ -1449,5 +1444,5 @@ class DuplicateMap {
14491444
map.clear();
14501445
}
14511446

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

test/change_detection/dirty_checking_change_detector_spec.dart

Lines changed: 0 additions & 2 deletions
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)