mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[Workspace Model] Add an API to get an entity reference from the entity directly
GitOrigin-RevId: c5d1cb47142970969c45d1474ed7b99da3773ede
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b71a9c74d8
commit
8053ebb072
+2
@@ -35,6 +35,8 @@ interface WorkspaceEntity {
|
||||
* internal IDs of the corresponding entities.
|
||||
*/
|
||||
fun hasEqualProperties(e: WorkspaceEntity): Boolean
|
||||
|
||||
fun <E : WorkspaceEntity> createReference(): EntityReference<E>
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+4
@@ -123,6 +123,10 @@ abstract class WorkspaceEntityBase : ReferableWorkspaceEntity, Any() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun <E : WorkspaceEntity> createReference(): EntityReference<E> {
|
||||
return EntityReferenceImpl(this.id)
|
||||
}
|
||||
|
||||
override fun toString(): String = "$id"
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
|
||||
+33
-8
@@ -1,16 +1,9 @@
|
||||
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.workspaceModel.storage
|
||||
|
||||
import com.intellij.workspaceModel.storage.entities.*
|
||||
import com.intellij.workspaceModel.storage.impl.WorkspaceEntityStorageBuilderImpl
|
||||
import com.intellij.workspaceModel.storage.impl.url.VirtualFileUrlManagerImpl
|
||||
import com.intellij.workspaceModel.storage.entities.*
|
||||
import com.intellij.workspaceModel.storage.entities.ModifiableChildEntity
|
||||
import com.intellij.workspaceModel.storage.entities.ModifiableChildWithOptionalParentEntity
|
||||
import com.intellij.workspaceModel.storage.entities.ModifiableParentEntity
|
||||
import com.intellij.workspaceModel.storage.entities.ChildEntity
|
||||
import com.intellij.workspaceModel.storage.entities.ChildWithOptionalParentEntity
|
||||
import com.intellij.workspaceModel.storage.entities.DataClass
|
||||
import com.intellij.workspaceModel.storage.entities.ParentEntity
|
||||
import com.intellij.workspaceModel.storage.url.VirtualFileUrlManager
|
||||
import org.junit.Assert
|
||||
import org.junit.Assert.assertEquals
|
||||
@@ -168,6 +161,18 @@ class ReferencesInStorageTest {
|
||||
assertEquals(emptyList<ParentEntity>(), builder.entities(ParentEntity::class.java).toList())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `remove parent entity referenced via two paths via entity ref`() {
|
||||
val builder = WorkspaceEntityStorageBuilderImpl.create()
|
||||
val parent = builder.addParentEntity()
|
||||
builder.addChildEntity(parent, "child", DataClass("data", parent.createReference()))
|
||||
builder.assertConsistency()
|
||||
builder.removeEntity(parent)
|
||||
builder.assertConsistency()
|
||||
assertEquals(emptyList<ChildEntity>(), builder.entities(ChildEntity::class.java).toList())
|
||||
assertEquals(emptyList<ParentEntity>(), builder.entities(ParentEntity::class.java).toList())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `modify parent property`() {
|
||||
val builder = WorkspaceEntityStorageBuilderImpl.create()
|
||||
@@ -264,6 +269,26 @@ class ReferencesInStorageTest {
|
||||
assertEquals(oldParent, child.dataClass!!.parent.resolve(builder))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `modify reference to parent via data class via entity ref`() {
|
||||
val builder = WorkspaceEntityStorageBuilderImpl.create()
|
||||
val parent1 = builder.addParentEntity("parent1")
|
||||
val oldParent = builder.addParentEntity("parent2")
|
||||
val child = builder.addChildEntity(parent1, "child", DataClass("data", oldParent.createReference()))
|
||||
val newParent = builder.addParentEntity("new")
|
||||
builder.assertConsistency()
|
||||
val newChild = builder.modifyEntity(ModifiableChildEntity::class.java, child) {
|
||||
dataClass = DataClass("data2", newParent.createReference())
|
||||
}
|
||||
builder.assertConsistency()
|
||||
assertEquals("child", newChild.childProperty)
|
||||
assertEquals("data2", newChild.dataClass!!.stringProperty)
|
||||
assertEquals(setOf(oldParent, newParent, parent1), builder.entities(ParentEntity::class.java).toSet())
|
||||
assertEquals(newChild, builder.singleChild())
|
||||
assertEquals(newParent, newChild.dataClass.parent.resolve(builder))
|
||||
assertEquals(oldParent, child.dataClass!!.parent.resolve(builder))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `builder from storage`() {
|
||||
val storage = WorkspaceEntityStorageBuilderImpl.create().apply {
|
||||
|
||||
Reference in New Issue
Block a user