From 3e08f9d7b1fa6bb484e420447ac5f62d7b3cbaa3 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Mon, 30 May 2016 18:03:50 +0300 Subject: [PATCH] gradle: include tests from dependent modules to test classpath if merged structure used --- .../model/JpsGradleExtensionService.java | 3 ++- .../model/JpsGradleModuleExtension.java | 3 +++ ...sGradleDependenciesEnumerationHandler.java | 20 ++++++++++++----- .../impl/JpsGradleExtensionServiceImpl.java | 5 +++-- .../JpsGradleModelSerializationExtension.java | 2 +- .../impl/JpsGradleModuleExtensionImpl.java | 14 ++++++++++-- .../GradleOrderEnumeratorHandler.java | 22 ++++++++++++++----- 7 files changed, 53 insertions(+), 16 deletions(-) diff --git a/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/JpsGradleExtensionService.java b/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/JpsGradleExtensionService.java index 126cf5758ac1..cab448e8fcaf 100644 --- a/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/JpsGradleExtensionService.java +++ b/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/JpsGradleExtensionService.java @@ -15,6 +15,7 @@ */ package org.jetbrains.jps.gradle.model; +import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.builders.storage.BuildDataPaths; @@ -36,7 +37,7 @@ public abstract class JpsGradleExtensionService { public abstract JpsGradleModuleExtension getExtension(@NotNull JpsModule module); @NotNull - public abstract JpsGradleModuleExtension getOrCreateExtension(@NotNull JpsModule module); + public abstract JpsGradleModuleExtension getOrCreateExtension(@NotNull JpsModule module, Element rootElement); public abstract void setProductionOnTestDependency(@NotNull JpsDependencyElement dependency, boolean value); diff --git a/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/JpsGradleModuleExtension.java b/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/JpsGradleModuleExtension.java index c673e4c0d27c..1db31cf51b93 100644 --- a/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/JpsGradleModuleExtension.java +++ b/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/JpsGradleModuleExtension.java @@ -15,6 +15,7 @@ */ package org.jetbrains.jps.gradle.model; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.model.JpsElement; /** @@ -22,4 +23,6 @@ import org.jetbrains.jps.model.JpsElement; * @since 7/10/2014 */ public interface JpsGradleModuleExtension extends JpsElement { + @Nullable + String getModuleType(); } diff --git a/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleDependenciesEnumerationHandler.java b/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleDependenciesEnumerationHandler.java index bbf28f77dc64..3a1cf0768b86 100644 --- a/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleDependenciesEnumerationHandler.java +++ b/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleDependenciesEnumerationHandler.java @@ -18,6 +18,7 @@ package org.jetbrains.jps.gradle.model.impl; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.gradle.model.JpsGradleExtensionService; +import org.jetbrains.jps.gradle.model.JpsGradleModuleExtension; import org.jetbrains.jps.model.java.impl.JpsJavaDependenciesEnumerationHandler; import org.jetbrains.jps.model.module.JpsDependencyElement; import org.jetbrains.jps.model.module.JpsModule; @@ -29,11 +30,19 @@ import java.util.Collection; * @since 7/10/2014 */ public class JpsGradleDependenciesEnumerationHandler extends JpsJavaDependenciesEnumerationHandler { - private static final JpsGradleDependenciesEnumerationHandler INSTANCE = new JpsGradleDependenciesEnumerationHandler(); + private static final JpsGradleDependenciesEnumerationHandler SOURCE_SET_TYPE_INSTANCE = new JpsGradleDependenciesEnumerationHandler(true); + private static final JpsGradleDependenciesEnumerationHandler NON_SOURCE_SET_TYPE_INSTANCE = + new JpsGradleDependenciesEnumerationHandler(false); + + private final boolean myResolveModulePerSourceSet; + + public JpsGradleDependenciesEnumerationHandler(boolean resolveModulePerSourceSet) { + myResolveModulePerSourceSet = resolveModulePerSourceSet; + } @Override public boolean shouldAddRuntimeDependenciesToTestCompilationClasspath() { - return true; + return myResolveModulePerSourceSet; } @Override @@ -43,7 +52,7 @@ public class JpsGradleDependenciesEnumerationHandler extends JpsJavaDependencies @Override public boolean shouldIncludeTestsFromDependentModulesToTestClasspath() { - return false; + return !myResolveModulePerSourceSet; } @Override @@ -57,8 +66,9 @@ public class JpsGradleDependenciesEnumerationHandler extends JpsJavaDependencies public JpsJavaDependenciesEnumerationHandler createHandler(@NotNull Collection modules) { JpsGradleExtensionService service = JpsGradleExtensionService.getInstance(); for (JpsModule module : modules) { - if (service.getExtension(module) != null) { - return INSTANCE; + JpsGradleModuleExtension gradleModuleExtension = service.getExtension(module); + if (gradleModuleExtension != null) { + return "sourceSet".equals(gradleModuleExtension.getModuleType()) ? SOURCE_SET_TYPE_INSTANCE : NON_SOURCE_SET_TYPE_INSTANCE; } } return null; diff --git a/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleExtensionServiceImpl.java b/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleExtensionServiceImpl.java index 477213d7a033..37b4f40a86d3 100644 --- a/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleExtensionServiceImpl.java +++ b/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleExtensionServiceImpl.java @@ -22,6 +22,7 @@ import com.intellij.util.containers.ConcurrentFactoryMap; import com.intellij.util.containers.FactoryMap; import com.intellij.util.xmlb.XmlSerializer; import gnu.trove.THashMap; +import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.builders.storage.BuildDataPaths; @@ -75,10 +76,10 @@ public class JpsGradleExtensionServiceImpl extends JpsGradleExtensionService { @NotNull @Override - public JpsGradleModuleExtension getOrCreateExtension(@NotNull JpsModule module) { + public JpsGradleModuleExtension getOrCreateExtension(@NotNull JpsModule module, Element rootElement) { JpsGradleModuleExtension extension = module.getContainer().getChild(JpsGradleModuleExtensionImpl.ROLE); if (extension == null) { - extension = new JpsGradleModuleExtensionImpl(); + extension = new JpsGradleModuleExtensionImpl(rootElement.getAttributeValue("external.system.module.type")); module.getContainer().setChild(JpsGradleModuleExtensionImpl.ROLE, extension); } return extension; diff --git a/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleModelSerializationExtension.java b/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleModelSerializationExtension.java index cebd00878b19..741ed2b2a06b 100644 --- a/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleModelSerializationExtension.java +++ b/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleModelSerializationExtension.java @@ -32,7 +32,7 @@ public class JpsGradleModelSerializationExtension extends JpsModelSerializerExte @Override public void loadModuleOptions(@NotNull JpsModule module, @NotNull Element rootElement) { if ("GRADLE".equals(rootElement.getAttributeValue("external.system.id"))) { - JpsGradleExtensionService.getInstance().getOrCreateExtension(module); + JpsGradleExtensionService.getInstance().getOrCreateExtension(module, rootElement); } } diff --git a/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleModuleExtensionImpl.java b/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleModuleExtensionImpl.java index ecdd04fce10e..297a3ada3bda 100644 --- a/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleModuleExtensionImpl.java +++ b/plugins/gradle/jps-plugin/src/org/jetbrains/jps/gradle/model/impl/JpsGradleModuleExtensionImpl.java @@ -16,6 +16,7 @@ package org.jetbrains.jps.gradle.model.impl; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.gradle.model.JpsGradleModuleExtension; import org.jetbrains.jps.model.JpsElementChildRole; import org.jetbrains.jps.model.ex.JpsElementBase; @@ -28,13 +29,22 @@ import org.jetbrains.jps.model.ex.JpsElementChildRoleBase; public class JpsGradleModuleExtensionImpl extends JpsElementBase implements JpsGradleModuleExtension { public static final JpsElementChildRole ROLE = JpsElementChildRoleBase.create("gradle"); - public JpsGradleModuleExtensionImpl() { + private String myModuleType; + + public JpsGradleModuleExtensionImpl(String moduleType) { + myModuleType = moduleType; + } + + @Nullable + @Override + public String getModuleType() { + return myModuleType; } @NotNull @Override public JpsGradleModuleExtensionImpl createCopy() { - return new JpsGradleModuleExtensionImpl(); + return new JpsGradleModuleExtensionImpl(myModuleType); } @Override diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/GradleOrderEnumeratorHandler.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/GradleOrderEnumeratorHandler.java index 3025ed342a4f..bcd4ff0fd1c4 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/GradleOrderEnumeratorHandler.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/GradleOrderEnumeratorHandler.java @@ -37,6 +37,8 @@ import org.jetbrains.plugins.gradle.model.ExternalProject; import org.jetbrains.plugins.gradle.model.ExternalSourceDirectorySet; import org.jetbrains.plugins.gradle.model.ExternalSourceSet; import org.jetbrains.plugins.gradle.service.project.data.ExternalProjectDataCache; +import org.jetbrains.plugins.gradle.settings.GradleProjectSettings; +import org.jetbrains.plugins.gradle.settings.GradleSettings; import org.jetbrains.plugins.gradle.util.GradleConstants; import java.io.File; @@ -45,6 +47,18 @@ import java.util.Map; public class GradleOrderEnumeratorHandler extends OrderEnumerationHandler { private static final Logger LOG = Logger.getInstance(GradleOrderEnumeratorHandler.class); + private final boolean myResolveModulePerSourceSet; + + public GradleOrderEnumeratorHandler(@NotNull Module module) { + String rootProjectPath = ExternalSystemApiUtil.getExternalRootProjectPath(module); + if (rootProjectPath != null) { + GradleProjectSettings settings = GradleSettings.getInstance(module.getProject()).getLinkedProjectSettings(rootProjectPath); + myResolveModulePerSourceSet = settings != null && settings.isResolveModulePerSourceSet(); + } + else { + myResolveModulePerSourceSet = false; + } + } public static class FactoryImpl extends Factory { @Override @@ -56,20 +70,18 @@ public class GradleOrderEnumeratorHandler extends OrderEnumerationHandler { @Override public OrderEnumerationHandler createHandler(@NotNull Module module) { - return INSTANCE; + return new GradleOrderEnumeratorHandler(module); } } - private static final GradleOrderEnumeratorHandler INSTANCE = new GradleOrderEnumeratorHandler(); - @Override public boolean shouldAddRuntimeDependenciesToTestCompilationClasspath() { - return true; + return myResolveModulePerSourceSet; } @Override public boolean shouldIncludeTestsFromDependentModulesToTestClasspath() { - return false; + return !myResolveModulePerSourceSet; } @Override