mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 11:53:49 +07:00
[jps model] support TestModuleProperties and production-on-test dependencies in JpsModelBridge (IJPL-409)
GitOrigin-RevId: 0d4ba9e02e1880873fa6ffdca2b3a84b8935a962
This commit is contained in:
committed by
intellij-monorepo-bot
parent
fbcba43905
commit
1f2aea5493
@@ -9,6 +9,7 @@ import org.jetbrains.jps.model.java.JpsJavaDependencyExtension;
|
||||
import org.jetbrains.jps.model.java.JpsJavaModuleExtension;
|
||||
import org.jetbrains.jps.model.module.JpsDependencyElement;
|
||||
import org.jetbrains.jps.model.module.JpsModule;
|
||||
import org.jetbrains.jps.model.module.JpsTestModuleProperties;
|
||||
|
||||
/**
|
||||
* Temporary interface which provides access to custom implementation of Java-related properties in JPS Model.
|
||||
@@ -16,5 +17,10 @@ import org.jetbrains.jps.model.module.JpsModule;
|
||||
@ApiStatus.Internal
|
||||
public interface JpsJavaAwareProject extends JpsProject {
|
||||
@Nullable JpsJavaModuleExtension getJavaModuleExtension(@NotNull JpsModule module);
|
||||
|
||||
@Nullable JpsJavaDependencyExtension getJavaDependencyExtension(@NotNull JpsDependencyElement element);
|
||||
|
||||
@Nullable JpsTestModuleProperties getTestModuleProperties(@NotNull JpsModule module);
|
||||
|
||||
boolean isProductionOnTestDependency(@NotNull JpsDependencyElement element);
|
||||
}
|
||||
|
||||
@@ -154,6 +154,9 @@ public class JpsJavaExtensionServiceImpl extends JpsJavaExtensionService {
|
||||
@Nullable
|
||||
@Override
|
||||
public JpsTestModuleProperties getTestModuleProperties(@NotNull JpsModule module) {
|
||||
if (module.getProject() instanceof JpsJavaAwareProject) {
|
||||
return ((JpsJavaAwareProject)module.getProject()).getTestModuleProperties(module);
|
||||
}
|
||||
return module.getContainer().getChild(JpsTestModulePropertiesImpl.ROLE);
|
||||
}
|
||||
|
||||
|
||||
@@ -62,6 +62,14 @@ internal class JpsProjectBridge(modelBridge: JpsModelBridge,
|
||||
}
|
||||
}
|
||||
|
||||
override fun getTestModuleProperties(module: JpsModule): JpsTestModuleProperties? {
|
||||
return (module as? JpsModuleBridge)?.testModuleProperties
|
||||
}
|
||||
|
||||
override fun isProductionOnTestDependency(element: JpsDependencyElement): Boolean {
|
||||
return element is JpsModuleDependencyBridge && element.productionOnTest
|
||||
}
|
||||
|
||||
override fun <P : JpsElement?, ModuleType> addModule(name: String, moduleType: ModuleType & Any): JpsModule where ModuleType : JpsModuleType<P>?, ModuleType : JpsElementTypeWithDefaultProperties<P>? {
|
||||
reportModificationAttempt()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.platform.workspace.jps.bridge.impl.java
|
||||
|
||||
import com.intellij.platform.workspace.jps.bridge.impl.module.JpsModuleBridge
|
||||
import com.intellij.platform.workspace.jps.bridge.impl.module.JpsModuleReferenceBridge
|
||||
import com.intellij.platform.workspace.jps.entities.TestModulePropertiesEntity
|
||||
import org.jetbrains.jps.model.ex.JpsElementBase
|
||||
import org.jetbrains.jps.model.module.JpsModule
|
||||
import org.jetbrains.jps.model.module.JpsModuleReference
|
||||
import org.jetbrains.jps.model.module.JpsTestModuleProperties
|
||||
|
||||
internal class JpsTestModulePropertiesBridge(private val testModulePropertiesEntity: TestModulePropertiesEntity, parentElement: JpsModuleBridge)
|
||||
: JpsElementBase<JpsTestModulePropertiesBridge>(), JpsTestModuleProperties {
|
||||
|
||||
private val reference by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||
JpsModuleReferenceBridge(testModulePropertiesEntity.productionModuleId.name)
|
||||
}
|
||||
private val resolved by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||
productionModuleReference.resolve()
|
||||
}
|
||||
init {
|
||||
parent = parentElement
|
||||
}
|
||||
|
||||
override fun getProductionModuleReference(): JpsModuleReference = reference
|
||||
|
||||
override fun getProductionModule(): JpsModule? = resolved
|
||||
}
|
||||
@@ -35,6 +35,8 @@ internal class JpsModuleDependencyBridge(private val dependency: ModuleDependenc
|
||||
val javaExtension by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||
JpsJavaDependencyExtensionBridge(dependency.exported, dependency.scope, this)
|
||||
}
|
||||
val productionOnTest: Boolean
|
||||
get() = dependency.productionOnTest
|
||||
|
||||
override fun getModuleReference(): JpsModuleReference = moduleReference
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.intellij.java.workspace.entities.javaSettings
|
||||
import com.intellij.platform.workspace.jps.bridge.impl.JpsProjectBridge
|
||||
import com.intellij.platform.workspace.jps.bridge.impl.JpsUrlListBridge
|
||||
import com.intellij.platform.workspace.jps.bridge.impl.java.JpsJavaModuleExtensionBridge
|
||||
import com.intellij.platform.workspace.jps.bridge.impl.java.JpsTestModulePropertiesBridge
|
||||
import com.intellij.platform.workspace.jps.bridge.impl.reportModificationAttempt
|
||||
import com.intellij.platform.workspace.jps.entities.*
|
||||
import org.jetbrains.jps.model.*
|
||||
@@ -49,10 +50,13 @@ internal class JpsModuleBridge(private val project: JpsProjectBridge,
|
||||
//todo store content of custom components from *.iml file in workspace model and use them here (it's also needed for IJPL-16008)
|
||||
getSerializer(entity.type?.name).loadProperties(null)
|
||||
}
|
||||
val javaModuleExtension by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||
val javaModuleExtension: JpsJavaModuleExtensionBridge? by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||
entity.javaSettings?.let { JpsJavaModuleExtensionBridge(it, this) }
|
||||
}
|
||||
|
||||
val testModuleProperties: JpsTestModuleProperties? by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||
entity.testProperties?.let { JpsTestModulePropertiesBridge(it, this) }
|
||||
}
|
||||
|
||||
override fun getContentRootsList(): JpsUrlList = contentRoots
|
||||
|
||||
override fun getExcludeRootsList(): JpsUrlList = excludeRoots
|
||||
|
||||
@@ -15,8 +15,10 @@ import org.jetbrains.jps.incremental.resources.ResourcesBuilder;
|
||||
import org.jetbrains.jps.incremental.resources.StandardResourceBuilderEnabler;
|
||||
import org.jetbrains.jps.model.JpsElementChildRole;
|
||||
import org.jetbrains.jps.model.JpsElementFactory;
|
||||
import org.jetbrains.jps.model.JpsProject;
|
||||
import org.jetbrains.jps.model.JpsSimpleElement;
|
||||
import org.jetbrains.jps.model.ex.JpsElementChildRoleBase;
|
||||
import org.jetbrains.jps.model.java.impl.JpsJavaAwareProject;
|
||||
import org.jetbrains.jps.model.module.JpsDependencyElement;
|
||||
import org.jetbrains.jps.model.module.JpsModule;
|
||||
|
||||
@@ -72,6 +74,10 @@ public final class JpsGradleExtensionServiceImpl extends JpsGradleExtensionServi
|
||||
|
||||
@Override
|
||||
public boolean isProductionOnTestDependency(@NotNull JpsDependencyElement dependency) {
|
||||
JpsProject project = dependency.getContainingModule().getProject();
|
||||
if (project instanceof JpsJavaAwareProject) {
|
||||
return ((JpsJavaAwareProject)project).isProductionOnTestDependency(dependency);
|
||||
}
|
||||
JpsSimpleElement<Boolean> child = dependency.getContainer().getChild(PRODUCTION_ON_TEST_ROLE);
|
||||
return child != null && child.getData();
|
||||
}
|
||||
|
||||
@@ -15,8 +15,10 @@ import org.jetbrains.jps.maven.model.JpsMavenExtensionService;
|
||||
import org.jetbrains.jps.maven.model.JpsMavenModuleExtension;
|
||||
import org.jetbrains.jps.model.JpsElementChildRole;
|
||||
import org.jetbrains.jps.model.JpsElementFactory;
|
||||
import org.jetbrains.jps.model.JpsProject;
|
||||
import org.jetbrains.jps.model.JpsSimpleElement;
|
||||
import org.jetbrains.jps.model.ex.JpsElementChildRoleBase;
|
||||
import org.jetbrains.jps.model.java.impl.JpsJavaAwareProject;
|
||||
import org.jetbrains.jps.model.module.JpsDependencyElement;
|
||||
import org.jetbrains.jps.model.module.JpsModule;
|
||||
|
||||
@@ -69,6 +71,10 @@ public final class JpsMavenExtensionServiceImpl extends JpsMavenExtensionService
|
||||
|
||||
@Override
|
||||
public boolean isProductionOnTestDependency(@NotNull JpsDependencyElement dependency) {
|
||||
JpsProject project = dependency.getContainingModule().getProject();
|
||||
if (project instanceof JpsJavaAwareProject) {
|
||||
return ((JpsJavaAwareProject)project).isProductionOnTestDependency(dependency);
|
||||
}
|
||||
JpsSimpleElement<Boolean> child = dependency.getContainer().getChild(PRODUCTION_ON_TEST_ROLE);
|
||||
return child != null && child.getData();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user