diff --git a/java/idea-ui/testSrc/com/intellij/facet/AddFacetActionTest.java b/java/idea-ui/testSrc/com/intellij/facet/AddFacetActionTest.java index c8ef14527a6a..362d19452164 100644 --- a/java/idea-ui/testSrc/com/intellij/facet/AddFacetActionTest.java +++ b/java/idea-ui/testSrc/com/intellij/facet/AddFacetActionTest.java @@ -40,7 +40,7 @@ public class AddFacetActionTest extends FacetTestCase { myEditorFacade.getModel().addFacetInfo(subInfo); assertTrue(isVisible(MockFacetType.getInstance())); - assertFalse(isVisible(MockSubFacetType.getInstance())); + assertTrue(isVisible(MockSubFacetType.getInstance())); } private boolean isVisible(FacetType type) { diff --git a/java/idea-ui/testSrc/com/intellij/facet/FacetManagerTest.java b/java/idea-ui/testSrc/com/intellij/facet/FacetManagerTest.java index c42e33a7598c..1270023463d2 100644 --- a/java/idea-ui/testSrc/com/intellij/facet/FacetManagerTest.java +++ b/java/idea-ui/testSrc/com/intellij/facet/FacetManagerTest.java @@ -98,6 +98,26 @@ public class FacetManagerTest extends FacetTestCase { assertNull(getFacetManager().getFacetByType(MockFacetType.ID)); } + public void testTwoSubFacets() { + MockFacet mockFacet = addFacet(); + Facet subFacet1 = addSubFacet(mockFacet, "sub1"); + Facet subFacet2 = addSubFacet(mockFacet, "sub2"); + assertSameElements(getFacetManager().getFacetsByType(mockFacet, MockSubFacetType.ID), subFacet1, subFacet2); + + ModifiableFacetModel model = getFacetManager().createModifiableModel(); + model.removeFacet(subFacet1); + commit(model); + + assertSameElements(getFacetManager().getFacetsByType(mockFacet, MockSubFacetType.ID), subFacet2); + assertSameElements(getFacetManager().getFacetsByType(MockSubFacetType.ID), subFacet2); + + model = getFacetManager().createModifiableModel(); + model.removeFacet(mockFacet); + commit(model); + assertNull(getFacetManager().getFacetByType(MockFacetType.ID)); + assertNull(getFacetManager().getFacetByType(MockSubFacetType.ID)); + } + public void testChangeFacetConfiguration() { String configData = "data"; ModifiableFacetModel model = getFacetManager().createModifiableModel(); diff --git a/platform/testFramework/src/com/intellij/facet/mock/MockSubFacetType.java b/platform/testFramework/src/com/intellij/facet/mock/MockSubFacetType.java index 3104109ec422..ad02af8d30db 100644 --- a/platform/testFramework/src/com/intellij/facet/mock/MockSubFacetType.java +++ b/platform/testFramework/src/com/intellij/facet/mock/MockSubFacetType.java @@ -32,6 +32,11 @@ public class MockSubFacetType extends FacetType { return true; } + @Override + public boolean isOnlyOneFacetAllowed() { + return false; + } + public static MockSubFacetType getInstance() { return findInstance(MockSubFacetType.class); } diff --git a/platform/workspaceModel/ide/tests/testSrc/com/intellij/workspaceModel/ide/ImlSerializationTest.kt b/platform/workspaceModel/ide/tests/testSrc/com/intellij/workspaceModel/ide/ImlSerializationTest.kt index 2fe6de8c7855..8025f78f4f2b 100644 --- a/platform/workspaceModel/ide/tests/testSrc/com/intellij/workspaceModel/ide/ImlSerializationTest.kt +++ b/platform/workspaceModel/ide/tests/testSrc/com/intellij/workspaceModel/ide/ImlSerializationTest.kt @@ -46,7 +46,7 @@ class ImlSerializationTest { checkSerializationSize(bytes, expectedSize, 2_000) assertTrue("This assertion is a reminder. Have you updated the serializer? Update the serializer version!", - 26_000 == expectedSize && "v20" == EntityStorageSerializerImpl.SERIALIZER_VERSION) + 26_000 == expectedSize && "v21" == EntityStorageSerializerImpl.SERIALIZER_VERSION) } @Test diff --git a/platform/workspaceModel/storage/src/com/intellij/workspaceModel/storage/bridgeEntities/bridgeModelEntities.kt b/platform/workspaceModel/storage/src/com/intellij/workspaceModel/storage/bridgeEntities/bridgeModelEntities.kt index 0880fccd8658..20b2f98712ad 100644 --- a/platform/workspaceModel/storage/src/com/intellij/workspaceModel/storage/bridgeEntities/bridgeModelEntities.kt +++ b/platform/workspaceModel/storage/src/com/intellij/workspaceModel/storage/bridgeEntities/bridgeModelEntities.kt @@ -761,7 +761,7 @@ class FacetEntity( companion object { val moduleDelegate = ManyToOne.NotNull(ModuleEntity::class.java) - val facetDelegate = OneToOneChild.Nullable(FacetEntity::class.java, true) + val facetDelegate = ManyToOne.Nullable(FacetEntity::class.java) } override fun persistentId(): FacetId = FacetId(name, facetType, moduleId) diff --git a/platform/workspaceModel/storage/src/com/intellij/workspaceModel/storage/bridgeEntities/bridgeModelModifiableEntities.kt b/platform/workspaceModel/storage/src/com/intellij/workspaceModel/storage/bridgeEntities/bridgeModelModifiableEntities.kt index b3db0cf27588..467e0a90cc34 100644 --- a/platform/workspaceModel/storage/src/com/intellij/workspaceModel/storage/bridgeEntities/bridgeModelModifiableEntities.kt +++ b/platform/workspaceModel/storage/src/com/intellij/workspaceModel/storage/bridgeEntities/bridgeModelModifiableEntities.kt @@ -256,7 +256,7 @@ class ModifiableFacetEntity : ModifiableWorkspaceEntityBase() { var moduleId: ModuleId by EntityDataDelegation() var module: ModuleEntity by MutableManyToOne.NotNull(FacetEntity::class.java, ModuleEntity::class.java) - var underlyingFacet: FacetEntity? by MutableOneToOneChild.Nullable(FacetEntity::class.java, FacetEntity::class.java, true) + var underlyingFacet: FacetEntity? by MutableManyToOne.Nullable(FacetEntity::class.java, FacetEntity::class.java) } fun WorkspaceEntityStorageDiffBuilder.addFacetEntity(name: String, facetType: String, configurationXmlTag: String?, module: ModuleEntity, diff --git a/platform/workspaceModel/storage/src/com/intellij/workspaceModel/storage/impl/EntityStorageSerializerImpl.kt b/platform/workspaceModel/storage/src/com/intellij/workspaceModel/storage/impl/EntityStorageSerializerImpl.kt index 22d6ffaefba6..8e7821fa3cc9 100644 --- a/platform/workspaceModel/storage/src/com/intellij/workspaceModel/storage/impl/EntityStorageSerializerImpl.kt +++ b/platform/workspaceModel/storage/src/com/intellij/workspaceModel/storage/impl/EntityStorageSerializerImpl.kt @@ -43,7 +43,7 @@ class EntityStorageSerializerImpl( private val versionsContributor: () -> Map = { emptyMap() }, ) : EntityStorageSerializer { companion object { - const val SERIALIZER_VERSION = "v20" + const val SERIALIZER_VERSION = "v21" } private val KRYO_BUFFER_SIZE = 64 * 1024