[Workspace Model] [IDEA-310919] Fix issue when applying external mappings in addDiff.

GitOrigin-RevId: 1842b4d0a8e0d16aea2cda6f6612db6f07c8d7e9
This commit is contained in:
Alex Plate
2023-08-03 14:23:00 +03:00
committed by intellij-monorepo-bot
parent b5d7cd817f
commit 66567d917a
2 changed files with 33 additions and 3 deletions

View File

@@ -129,7 +129,9 @@ internal class MutableExternalEntityMappingImpl<T> private constructor(
}
}
is IndexLogRecord.Remove -> {
remove(record.id)
getTargetId(replaceMap, target, record.id)?.let { entityId ->
remove(entityId)
}
}
}
}

View File

@@ -17,6 +17,7 @@ import org.junit.jupiter.api.*
import org.junit.jupiter.api.Assertions.assertEquals
import java.util.*
import kotlin.test.assertNotNull
import kotlin.test.assertSame
import kotlin.test.assertTrue
class AddDiffTest {
@@ -25,6 +26,8 @@ class AddDiffTest {
private lateinit var virtualFileUrlManager: VirtualFileUrlManager
private val externalMappingName = "test.checking.external.mapping"
private fun MutableEntityStorage.applyDiff(anotherBuilder: MutableEntityStorage): EntityStorage {
val builder = createBuilderFrom(this)
builder.upgradeAddDiffEngine = { it.shaker = shaker }
@@ -326,16 +329,41 @@ class AddDiffTest {
val source = createEmptyBuilder()
val sourceSample = source addEntity SampleEntity(false, "Entity at index 1", ArrayList(), HashMap(),
virtualFileUrlManager.fromUrl("file:///tmp"), SampleEntitySource("test"))
val mutableExternalMapping = source.getMutableExternalMapping<Any>("test.checking.external.mapping")
val mutableExternalMapping = source.getMutableExternalMapping<Any>(externalMappingName)
val anyObj = Any()
mutableExternalMapping.addMapping(sourceSample, anyObj)
target.addDiff(source)
val externalMapping = target.getExternalMapping<Any>("test.checking.external.mapping") as ExternalEntityMappingImpl<Any>
val externalMapping = target.getExternalMapping<Any>(externalMappingName) as ExternalEntityMappingImpl<Any>
assertEquals(1, externalMapping.index.size)
}
@RepeatedTest(10)
fun `checking external mapping is moved to the target builder`() {
val target = createEmptyBuilder()
val entity = target addEntity ParentEntity("Hey", MySource)
val obj = Any()
val obj2 = Any()
target.getMutableExternalMapping<Any>(externalMappingName).addMapping(entity, obj)
val newBuilder = target.toSnapshot().toBuilder()
val newEntity = newBuilder addEntity ParentEntity("Hey 2", MySource)
newBuilder.getMutableExternalMapping<Any>(externalMappingName).addMapping(newEntity, obj2)
newBuilder.removeEntity(entity.from(newBuilder))
target.removeEntity(entity)
val freezed = target.toSnapshot().toBuilder()
freezed.addDiff(newBuilder)
assertEquals(1, freezed.entities(ParentEntity::class.java).toList().size)
val requestedEntity = freezed.entities(ParentEntity::class.java).single()
assertEquals("Hey 2", requestedEntity.parentData)
assertSame(obj2, freezed.getMutableExternalMapping<Any>(externalMappingName).getDataByEntity(requestedEntity))
}
@RepeatedTest(10)
fun `change source in diff`() {
val sampleEntity = target addEntity SampleEntity(false, "Prop", ArrayList(), HashMap(),