Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.intellij.openapi.util.text.Strings;
import com.intellij.platform.workspace.jps.entities.ModuleId;
import com.intellij.platform.workspace.storage.EntityStorage;
import com.intellij.platform.workspace.storage.ImmutableEntityStorage;
import com.intellij.util.ConcurrencyUtil;
import com.intellij.util.PathUtilRt;
import com.intellij.util.SmartList;
Expand Down Expand Up @@ -199,6 +200,27 @@ public static String getDefaultModuleTypeId() {
@NotNull ExternalProject externalProject,
@Nullable String sourceSetName,
@NotNull ProjectResolverContext resolverCtx) {
if (resolverCtx.isPhasedSyncEnabled()) {
if (sourceSetName == null) {
return getHolderModuleName(
resolverCtx,
gradleModule.getGradleProject().getProjectIdentifier().getBuildIdentifier().getRootDir().toPath(),
// Build name is derived from the root project's name
getRootProject(gradleModule.getGradleProject()).getName(),
externalProject
);
} else {
return resolveSourceSetModuleName(
resolverCtx,
gradleModule.getGradleProject().getProjectIdentifier().getBuildIdentifier().getRootDir().toPath(),
// Build name is derived from the root project's name
getRootProject(gradleModule.getGradleProject()).getName(),
externalProject,
sourceSetName
);
}
}

String delimiter;
StringBuilder moduleName = new StringBuilder();
String rootName = gradleModule.getProject().getName();
Expand Down Expand Up @@ -240,11 +262,25 @@ public static String getDefaultModuleTypeId() {
@NotNull GradleLightProject projectModel,
// TODO: replace with GradleLightProject#identityPath
@NotNull ExternalProject externalProject
) {
return getHolderModuleName(
context,
projectModel.getBuild().getBuildIdentifier().getRootDir().toPath(),
projectModel.getBuild().getName(),
externalProject
);
}

private static @NotNull String getHolderModuleName(
@NotNull ProjectResolverContext context,
@NotNull Path buildPath,
@NotNull String buildName,
// TODO: replace with GradleLightProject#identityPath
@NotNull ExternalProject externalProject
) {
var rootBuildPath = context.getRootBuild().getBuildIdentifier().getRootDir().toPath();
var rootBuildName = context.getRootBuild().getName();
var buildPath = projectModel.getBuild().getBuildIdentifier().getRootDir().toPath();
var buildName = projectModel.getBuild().getName();

var identityPath = externalProject.getIdentityPath();

var moduleName = Strings.trimStart(identityPath, ":");
Expand Down Expand Up @@ -285,16 +321,32 @@ public static String getDefaultModuleTypeId() {
@NotNull ExternalProject externalProject,
@NotNull String sourceSetName
) {
var holderModuleName = getHolderModuleName(context, projectModel, externalProject);
var sourceSetModuleName = holderModuleName + "." + escapeModuleNameElement(sourceSetName);

var sourceSetModuleName = resolveSourceSetModuleName(
context,
projectModel.getBuild().getBuildIdentifier().getRootDir().toPath(),
projectModel.getBuild().getName(),
externalProject,
sourceSetName
);
if (storage.contains(new ModuleId(sourceSetModuleName))) {
// Related issue: IDEA-169388
// The user can create the 'test' holder module that conflicts with the `test` source set module.
return sourceSetModuleName + "~1";
} else {
return sourceSetModuleName;
}
}

return sourceSetModuleName;
private static @NotNull String resolveSourceSetModuleName(
@NotNull ProjectResolverContext context,
@NotNull Path buildPath,
@NotNull String buildName,
// TODO: replace with GradleLightProject#identityPath
@NotNull ExternalProject externalProject,
@NotNull String sourceSetName
) {
var holderModuleName = getHolderModuleName(context, buildPath, buildName, externalProject);
return holderModuleName + "." + escapeModuleNameElement(sourceSetName);
}

/**
Expand Down