@@ -56,7 +56,8 @@ class ProcessedSerializedVarsState(
5656data class ProcessedDescriptorsState (
5757 val processedSerializedVarsToJavaProperties : MutableMap <SerializedVariablesState , PropertiesData ?> = mutableMapOf(),
5858 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
6061)
6162
6263data class RuntimeObjectWrapper (
@@ -276,16 +277,6 @@ class VariablesSerializer(
276277 */
277278 if (descriptors.size == 1 && descriptors.entries.first().key == " size" ) {
278279 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- }*/
289280 }
290281 }
291282
@@ -319,9 +310,9 @@ class VariablesSerializer(
319310 )
320311
321312 /* *
322- * Stores info computed descriptors in a cell
313+ * Stores info computed descriptors in a cell starting from the very variable as a root
323314 */
324- private val computedDescriptorsPerCell: MutableMap <Int , ProcessedDescriptorsState > = mutableMapOf ()
315+ private val computedDescriptorsPerCell: MutableMap <Int , MutableMap < String , ProcessedDescriptorsState > > = mutableMapOf ()
325316
326317 private val isSerializationActive: Boolean = System .getProperty(serializationSystemProperty)?.toBooleanStrictOrNull() ? : true
327318
@@ -409,7 +400,7 @@ class VariablesSerializer(
409400 log.debug(" Unchanged variables: ${unchangedVariables - neededEntries.keys} " )
410401
411402 // remove previous data
412- computedDescriptorsPerCell[cellId]?.instancesPerState?.clear()
403+ // computedDescriptorsPerCell[cellId]?.instancesPerState?.clear()
413404 val serializedData = neededEntries.mapValues {
414405 val actualCell = variablesCells[it.key] ? : cellId
415406 serializeVariableState(actualCell, it.key, it.value)
@@ -424,14 +415,15 @@ class VariablesSerializer(
424415
425416 fun doIncrementalSerialization (
426417 cellId : Int ,
418+ topLevelName : String ,
427419 propertyName : String ,
428420 serializedVariablesState : SerializedVariablesState ,
429421 pathToDescriptor : List <String > = emptyList()
430422 ): SerializedVariablesState {
431423 if (! isSerializationActive) return serializedVariablesState
432424
433425 val cellDescriptors = computedDescriptorsPerCell[cellId] ? : return serializedVariablesState
434- return updateVariableState(cellId, propertyName, cellDescriptors, serializedVariablesState)
426+ return updateVariableState(cellId, propertyName, cellDescriptors[topLevelName] !! , serializedVariablesState)
435427 }
436428
437429 /* *
@@ -456,38 +448,39 @@ class VariablesSerializer(
456448 return serializeVariableState(cellId, propertyName, property, value, isRecursive = false , false )
457449 }
458450
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 ()
461453 // force recursive check
462454 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)
464456 }
465457
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 {
467459 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)
470462 }
471463
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 {
473465 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)
476468 }
477469
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 {
479471 val serializedVersion = processedData.serializedVariablesState
480472
481473 seenObjectsPerCell.putIfAbsent(cellId, mutableMapOf ())
474+ computedDescriptorsPerCell.putIfAbsent(cellId, mutableMapOf ())
482475
483476 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 ()
486479 if (instances != null ) {
487- computedDescriptorsPerCell[cellId]!! .instancesPerState + = instances
480+ computedDescriptorsPerCell[cellId]!! [topLevelName] !! .instancesPerState + = instances
488481 }
489482 }
490- val currentCellDescriptors = computedDescriptorsPerCell[cellId]
483+ val currentCellDescriptors = computedDescriptorsPerCell[cellId]?.get(topLevelName)
491484 // TODO should we stack?
492485 currentCellDescriptors!! .processedSerializedVarsToJavaProperties[serializedVersion] = processedData.propertiesData
493486 currentCellDescriptors.processedSerializedVarsToKTProperties[serializedVersion] = processedData.kPropertiesData
@@ -507,9 +500,9 @@ class VariablesSerializer(
507500 if (kProperties?.size == 1 && kProperties.first().name == " size" ) {
508501 serializedVersion.fieldDescriptor.addDescriptor(value.objectInstance, " data" )
509502 }
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])
511504 } 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])
513506 }
514507 }
515508
@@ -518,6 +511,7 @@ class VariablesSerializer(
518511
519512 private fun iterateThroughContainerMembers (
520513 cellId : Int ,
514+ topLevelName : String ,
521515 callInstance : Any? ,
522516 descriptor : MutableFieldDescriptor ,
523517 isRecursive : Boolean = false,
@@ -543,7 +537,7 @@ class VariablesSerializer(
543537
544538 seenObjectsPerCell.putIfAbsent(cellId, mutableMapOf ())
545539 val seenObjectsPerCell = seenObjectsPerCell[cellId]
546- val currentCellDescriptors = computedDescriptorsPerCell[cellId]!!
540+ val currentCellDescriptors = computedDescriptorsPerCell[cellId]!! [topLevelName] !!
547541 // ok, it's a copy on the left for some reason
548542 val instancesPerState = currentCellDescriptors.instancesPerState
549543
@@ -570,7 +564,7 @@ class VariablesSerializer(
570564 }
571565
572566 val isArrayType = checkForPossibleArray(callInstance)
573- computedDescriptorsPerCell[cellId]!! .instancesPerState + = instancesPerState
567+ computedDescriptorsPerCell[cellId]!! [topLevelName] !! .instancesPerState + = instancesPerState
574568
575569 if (descriptor.size == 2 && (descriptor.containsKey(" data" ) || descriptor.containsKey(" element" ))) {
576570 val singleElemMode = descriptor.containsKey(" element" )
@@ -606,9 +600,10 @@ class VariablesSerializer(
606600 }
607601 }.toObjectWrapper(isRecursive)
608602
609- computedDescriptorsPerCell[cellId]!! .instancesPerState + = instancesPerState
603+ computedDescriptorsPerCell[cellId]!! [topLevelName] !! .instancesPerState + = instancesPerState
610604 iterateThroughContainerMembers(
611605 cellId,
606+ topLevelName,
612607 neededCallInstance.objectInstance,
613608 serializedVariablesState.fieldDescriptor,
614609 isRecursive = isRecursive,
0 commit comments