@@ -56,7 +56,8 @@ class ProcessedSerializedVarsState(
56
56
data class ProcessedDescriptorsState (
57
57
val processedSerializedVarsToJavaProperties : MutableMap <SerializedVariablesState , PropertiesData ?> = mutableMapOf(),
58
58
val processedSerializedVarsToKTProperties : MutableMap <SerializedVariablesState , KPropertiesData ?> = mutableMapOf(),
59
- val instancesPerState : MutableMap <SerializedVariablesState , Any ?> = mutableMapOf()
59
+ val instancesPerState : MutableMap <SerializedVariablesState , Any ?> = mutableMapOf(),
60
+ val parent : ProcessedDescriptorsState ? = null
60
61
)
61
62
62
63
data class RuntimeObjectWrapper (
@@ -276,16 +277,6 @@ class VariablesSerializer(
276
277
*/
277
278
if (descriptors.size == 1 && descriptors.entries.first().key == " size" ) {
278
279
descriptors.addDescriptor(value, " data" )
279
- /*
280
- if (value is Collection<*>) {
281
- value.forEach {
282
- iterateThrough(descriptors, it)
283
- }
284
- } else if (value is Array<*>) {
285
- value.forEach {
286
- iterateThrough(descriptors, it)
287
- }
288
- }*/
289
280
}
290
281
}
291
282
@@ -319,9 +310,9 @@ class VariablesSerializer(
319
310
)
320
311
321
312
/* *
322
- * Stores info computed descriptors in a cell
313
+ * Stores info computed descriptors in a cell starting from the very variable as a root
323
314
*/
324
- private val computedDescriptorsPerCell: MutableMap <Int , ProcessedDescriptorsState > = mutableMapOf ()
315
+ private val computedDescriptorsPerCell: MutableMap <Int , MutableMap < String , ProcessedDescriptorsState > > = mutableMapOf ()
325
316
326
317
private val isSerializationActive: Boolean = System .getProperty(serializationSystemProperty)?.toBooleanStrictOrNull() ? : true
327
318
@@ -409,7 +400,7 @@ class VariablesSerializer(
409
400
log.debug(" Unchanged variables: ${unchangedVariables - neededEntries.keys} " )
410
401
411
402
// remove previous data
412
- computedDescriptorsPerCell[cellId]?.instancesPerState?.clear()
403
+ // computedDescriptorsPerCell[cellId]?.instancesPerState?.clear()
413
404
val serializedData = neededEntries.mapValues {
414
405
val actualCell = variablesCells[it.key] ? : cellId
415
406
serializeVariableState(actualCell, it.key, it.value)
@@ -424,14 +415,15 @@ class VariablesSerializer(
424
415
425
416
fun doIncrementalSerialization (
426
417
cellId : Int ,
418
+ topLevelName : String ,
427
419
propertyName : String ,
428
420
serializedVariablesState : SerializedVariablesState ,
429
421
pathToDescriptor : List <String > = emptyList()
430
422
): SerializedVariablesState {
431
423
if (! isSerializationActive) return serializedVariablesState
432
424
433
425
val cellDescriptors = computedDescriptorsPerCell[cellId] ? : return serializedVariablesState
434
- return updateVariableState(cellId, propertyName, cellDescriptors, serializedVariablesState)
426
+ return updateVariableState(cellId, propertyName, cellDescriptors[topLevelName] !! , serializedVariablesState)
435
427
}
436
428
437
429
/* *
@@ -456,38 +448,39 @@ class VariablesSerializer(
456
448
return serializeVariableState(cellId, propertyName, property, value, isRecursive = false , false )
457
449
}
458
450
459
- private fun serializeVariableState (cellId : Int , name : String? , variableState : VariableState ? , isOverride : Boolean = true): SerializedVariablesState {
460
- if (! isSerializationActive || variableState == null || name == null ) return SerializedVariablesState ()
451
+ private fun serializeVariableState (cellId : Int , topLevelName : String? , variableState : VariableState ? , isOverride : Boolean = true): SerializedVariablesState {
452
+ if (! isSerializationActive || variableState == null || topLevelName == null ) return SerializedVariablesState ()
461
453
// force recursive check
462
454
variableState.stringValue
463
- return serializeVariableState(cellId, name , variableState.property, variableState.value.getOrNull(), variableState.isRecursive, isOverride)
455
+ return serializeVariableState(cellId, topLevelName , variableState.property, variableState.value.getOrNull(), variableState.isRecursive, isOverride)
464
456
}
465
457
466
- private fun serializeVariableState (cellId : Int , name : String , property : Field ? , value : Any? , isRecursive : Boolean , isOverride : Boolean = true): SerializedVariablesState {
458
+ private fun serializeVariableState (cellId : Int , topLevelName : String , property : Field ? , value : Any? , isRecursive : Boolean , isOverride : Boolean = true): SerializedVariablesState {
467
459
val wrapper = value.toObjectWrapper(isRecursive)
468
- val processedData = createSerializeVariableState(name , getSimpleTypeNameFrom(property, value), wrapper)
469
- return doActualSerialization(cellId, processedData, wrapper, isRecursive, isOverride)
460
+ val processedData = createSerializeVariableState(topLevelName , getSimpleTypeNameFrom(property, value), wrapper)
461
+ return doActualSerialization(cellId, topLevelName, processedData, wrapper, isRecursive, isOverride)
470
462
}
471
463
472
- private fun serializeVariableState (cellId : Int , name : String , property : KProperty <* >, value : Any? , isRecursive : Boolean , isOverride : Boolean = true): SerializedVariablesState {
464
+ private fun serializeVariableState (cellId : Int , topLevelName : String , property : KProperty <* >, value : Any? , isRecursive : Boolean , isOverride : Boolean = true): SerializedVariablesState {
473
465
val wrapper = value.toObjectWrapper(isRecursive)
474
- val processedData = createSerializeVariableState(name , getSimpleTypeNameFrom(property, value), wrapper)
475
- return doActualSerialization(cellId, processedData, wrapper, isRecursive, isOverride)
466
+ val processedData = createSerializeVariableState(topLevelName , getSimpleTypeNameFrom(property, value), wrapper)
467
+ return doActualSerialization(cellId, topLevelName, processedData, wrapper, isRecursive, isOverride)
476
468
}
477
469
478
- private fun doActualSerialization (cellId : Int , processedData : ProcessedSerializedVarsState , value : RuntimeObjectWrapper , isRecursive : Boolean , isOverride : Boolean = true): SerializedVariablesState {
470
+ private fun doActualSerialization (cellId : Int , topLevelName : String , processedData : ProcessedSerializedVarsState , value : RuntimeObjectWrapper , isRecursive : Boolean , isOverride : Boolean = true): SerializedVariablesState {
479
471
val serializedVersion = processedData.serializedVariablesState
480
472
481
473
seenObjectsPerCell.putIfAbsent(cellId, mutableMapOf ())
474
+ computedDescriptorsPerCell.putIfAbsent(cellId, mutableMapOf ())
482
475
483
476
if (isOverride) {
484
- val instances = computedDescriptorsPerCell[cellId]?.instancesPerState
485
- computedDescriptorsPerCell[cellId] = ProcessedDescriptorsState ()
477
+ val instances = computedDescriptorsPerCell[cellId]?.get(topLevelName)?. instancesPerState
478
+ computedDescriptorsPerCell[cellId]!! [topLevelName] = ProcessedDescriptorsState ()
486
479
if (instances != null ) {
487
- computedDescriptorsPerCell[cellId]!! .instancesPerState + = instances
480
+ computedDescriptorsPerCell[cellId]!! [topLevelName] !! .instancesPerState + = instances
488
481
}
489
482
}
490
- val currentCellDescriptors = computedDescriptorsPerCell[cellId]
483
+ val currentCellDescriptors = computedDescriptorsPerCell[cellId]?.get(topLevelName)
491
484
// TODO should we stack?
492
485
currentCellDescriptors!! .processedSerializedVarsToJavaProperties[serializedVersion] = processedData.propertiesData
493
486
currentCellDescriptors.processedSerializedVarsToKTProperties[serializedVersion] = processedData.kPropertiesData
@@ -507,9 +500,9 @@ class VariablesSerializer(
507
500
if (kProperties?.size == 1 && kProperties.first().name == " size" ) {
508
501
serializedVersion.fieldDescriptor.addDescriptor(value.objectInstance, " data" )
509
502
}
510
- iterateThroughContainerMembers(cellId, value.objectInstance, serializedVersion.fieldDescriptor, isRecursive = isRecursive, kProperties = currentCellDescriptors.processedSerializedVarsToKTProperties[serializedVersion])
503
+ iterateThroughContainerMembers(cellId, topLevelName, value.objectInstance, serializedVersion.fieldDescriptor, isRecursive = isRecursive, kProperties = currentCellDescriptors.processedSerializedVarsToKTProperties[serializedVersion])
511
504
} else {
512
- iterateThroughContainerMembers(cellId, value.objectInstance, serializedVersion.fieldDescriptor, isRecursive = isRecursive, currentCellDescriptors.processedSerializedVarsToJavaProperties[serializedVersion])
505
+ iterateThroughContainerMembers(cellId, topLevelName, value.objectInstance, serializedVersion.fieldDescriptor, isRecursive = isRecursive, currentCellDescriptors.processedSerializedVarsToJavaProperties[serializedVersion])
513
506
}
514
507
}
515
508
@@ -518,6 +511,7 @@ class VariablesSerializer(
518
511
519
512
private fun iterateThroughContainerMembers (
520
513
cellId : Int ,
514
+ topLevelName : String ,
521
515
callInstance : Any? ,
522
516
descriptor : MutableFieldDescriptor ,
523
517
isRecursive : Boolean = false,
@@ -543,7 +537,7 @@ class VariablesSerializer(
543
537
544
538
seenObjectsPerCell.putIfAbsent(cellId, mutableMapOf ())
545
539
val seenObjectsPerCell = seenObjectsPerCell[cellId]
546
- val currentCellDescriptors = computedDescriptorsPerCell[cellId]!!
540
+ val currentCellDescriptors = computedDescriptorsPerCell[cellId]!! [topLevelName] !!
547
541
// ok, it's a copy on the left for some reason
548
542
val instancesPerState = currentCellDescriptors.instancesPerState
549
543
@@ -570,7 +564,7 @@ class VariablesSerializer(
570
564
}
571
565
572
566
val isArrayType = checkForPossibleArray(callInstance)
573
- computedDescriptorsPerCell[cellId]!! .instancesPerState + = instancesPerState
567
+ computedDescriptorsPerCell[cellId]!! [topLevelName] !! .instancesPerState + = instancesPerState
574
568
575
569
if (descriptor.size == 2 && (descriptor.containsKey(" data" ) || descriptor.containsKey(" element" ))) {
576
570
val singleElemMode = descriptor.containsKey(" element" )
@@ -606,9 +600,10 @@ class VariablesSerializer(
606
600
}
607
601
}.toObjectWrapper(isRecursive)
608
602
609
- computedDescriptorsPerCell[cellId]!! .instancesPerState + = instancesPerState
603
+ computedDescriptorsPerCell[cellId]!! [topLevelName] !! .instancesPerState + = instancesPerState
610
604
iterateThroughContainerMembers(
611
605
cellId,
606
+ topLevelName,
612
607
neededCallInstance.objectInstance,
613
608
serializedVariablesState.fieldDescriptor,
614
609
isRecursive = isRecursive,
0 commit comments