[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
This commit is contained in:
Nikolay Chashnikov
2024-07-01 10:17:51 +02:00
committed by intellij-monorepo-bot
parent 968ae2429c
commit 35a9f9cbc7
2 changed files with 11 additions and 4 deletions

View File

@@ -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<JpsLibrary> libraries = project.getLibraryCollection().getLibraries();
assertEquals(3, libraries.size());
assertEquals(project, ((JpsElementBase<?>)libraries.get(0)).getParent().getParent());
List<JpsDependencyElement> 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());

View File

@@ -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<LibraryEntity>, sdkEntities: List<SdkEntity>?, parentElement: JpsElementBase<*>) : JpsLibraryCollection {
internal class JpsLibraryCollectionBridge(entities: List<LibraryEntity>, sdkEntities: List<SdkEntity>?, parentElement: JpsElementBase<*>)
: JpsElementBase<JpsLibraryCollectionBridge>(), JpsLibraryCollection {
private val libraries: List<JpsLibraryBridgeBase<*>>
init {
parent = parentElement
val entitiesList = ArrayList<JpsLibraryBridgeBase<*>>()
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
}