gradle: include tests from dependent modules to test classpath if merged structure used

This commit is contained in:
Vladislav.Soroka
2016-05-30 18:10:59 +03:00
parent d4b14d9e9b
commit 3e08f9d7b1
7 changed files with 53 additions and 16 deletions
@@ -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);
@@ -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();
}
@@ -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<JpsModule> 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;
@@ -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;
@@ -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);
}
}
@@ -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<JpsGradleModuleExtensionImpl> implements JpsGradleModuleExtension {
public static final JpsElementChildRole<JpsGradleModuleExtension> 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
@@ -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