From 35a9f9cbc7fd66a1c5cee92f7dc875e70a77e4a7 Mon Sep 17 00:00:00 2001 From: Nikolay Chashnikov Date: Mon, 1 Jul 2024 10:17:51 +0200 Subject: [PATCH] [jps model] make JpsLibraryCollectionBridge a real JpsElement (IJPL-409) We have code that invokes `jpsLibrary.getParent().getParent()` to get a JpsModule instance for a module-level library. To keep such code working, we need to have JpsModule and JpsProject as super-parents (not direct parents) of JpsLibrary instances in the new implementation as well. GitOrigin-RevId: a5f944d152229275b05efdfc686afa091c3fd963 --- .../model/serialization/JpsProjectSerializationTest.java | 7 ++++++- .../jps/bridge/impl/library/JpsLibraryCollectionBridge.kt | 8 +++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsProjectSerializationTest.java b/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsProjectSerializationTest.java index 2c6cff5e0b29..ff3135315cd3 100644 --- a/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsProjectSerializationTest.java +++ b/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsProjectSerializationTest.java @@ -7,6 +7,7 @@ import com.intellij.testFramework.UsefulTestCase; import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.model.*; import org.jetbrains.jps.model.artifact.JpsArtifactService; +import org.jetbrains.jps.model.ex.JpsElementBase; import org.jetbrains.jps.model.java.*; import org.jetbrains.jps.model.library.JpsLibrary; import org.jetbrains.jps.model.library.JpsOrderRootType; @@ -59,6 +60,7 @@ public class JpsProjectSerializationTest { List libraries = project.getLibraryCollection().getLibraries(); assertEquals(3, libraries.size()); + assertEquals(project, ((JpsElementBase)libraries.get(0)).getParent().getParent()); List dependencies = util.getDependenciesList().getDependencies(); assertEquals(4, dependencies.size()); @@ -69,7 +71,10 @@ public class JpsProjectSerializationTest { assertEquals("1.5", reference.getSdkName()); assertInstanceOf(dependencies.get(1), JpsModuleSourceDependency.class); assertInstanceOf(dependencies.get(2), JpsLibraryDependency.class); - assertInstanceOf(dependencies.get(3), JpsLibraryDependency.class); + JpsLibraryDependency moduleLibraryDependency = assertInstanceOf(dependencies.get(3), JpsLibraryDependency.class); + JpsLibrary moduleLibrary = moduleLibraryDependency.getLibrary(); + assertEquals("log4j", moduleLibrary.getName()); + assertEquals(util, ((JpsElementBase)moduleLibrary).getParent().getParent()); assertEquals(projectData.getUrl(""), assertOneElement(main.getContentRootsList().getUrls())); assertEquals(projectData.getUrl("src"), assertOneElement(main.getSourceRoots()).getUrl()); diff --git a/platform/workspace/jps/src/com/intellij/platform/workspace/jps/bridge/impl/library/JpsLibraryCollectionBridge.kt b/platform/workspace/jps/src/com/intellij/platform/workspace/jps/bridge/impl/library/JpsLibraryCollectionBridge.kt index beacf10f2e54..3e8ce2d63dc5 100644 --- a/platform/workspace/jps/src/com/intellij/platform/workspace/jps/bridge/impl/library/JpsLibraryCollectionBridge.kt +++ b/platform/workspace/jps/src/com/intellij/platform/workspace/jps/bridge/impl/library/JpsLibraryCollectionBridge.kt @@ -13,13 +13,15 @@ import org.jetbrains.jps.model.library.JpsLibraryCollection import org.jetbrains.jps.model.library.JpsLibraryType import org.jetbrains.jps.model.library.JpsTypedLibrary -internal class JpsLibraryCollectionBridge(entities: List, sdkEntities: List?, parentElement: JpsElementBase<*>) : JpsLibraryCollection { +internal class JpsLibraryCollectionBridge(entities: List, sdkEntities: List?, parentElement: JpsElementBase<*>) + : JpsElementBase(), JpsLibraryCollection { private val libraries: List> init { + parent = parentElement val entitiesList = ArrayList>() - entities.mapTo(entitiesList) { entity -> JpsLibraryBridge(entity, parentElement) } - sdkEntities?.mapTo(entitiesList) { entity -> JpsSdkLibraryBridge(entity, parentElement) } + entities.mapTo(entitiesList) { entity -> JpsLibraryBridge(entity, this) } + sdkEntities?.mapTo(entitiesList) { entity -> JpsSdkLibraryBridge(entity, this) } libraries = entitiesList }