[platform] guess project name from the base directory, not from store parent

GitOrigin-RevId: ab007154993a116b4b2b3f6a8d8d9e66f6cfbdf0
This commit is contained in:
Ivan Semenov
2024-12-10 16:41:19 +01:00
committed by intellij-monorepo-bot
parent 61f14e59e0
commit 7006eabbce
6 changed files with 17 additions and 26 deletions

View File

@@ -94,13 +94,16 @@ public final class Utils {
}
else {
Path directoryBased;
String rawName;
if (rootFile.endsWith(PathMacroUtil.DIRECTORY_STORE_NAME)) {
directoryBased = rootFile;
rawName = JpsProjectConfigurationLoading.getDirectoryBaseProjectName(rootFile.getParent(), directoryBased);
}
else {
directoryBased = rootFile.resolve(PathMacroUtil.DIRECTORY_STORE_NAME);
rawName = JpsProjectConfigurationLoading.getDirectoryBaseProjectName(rootFile, directoryBased);
}
name = PathUtilRt.suggestFileName(JpsProjectConfigurationLoading.getDirectoryBaseProjectName(directoryBased));
name = PathUtilRt.suggestFileName(rawName);
locationHash = hashFunction.apply(directoryBased.toString());
}

View File

@@ -97,16 +97,4 @@ public final class JpsPathUtil {
}
private static final String UNNAMED_PROJECT = "<unnamed>";
@ApiStatus.Internal
public static @NotNull String getDefaultProjectName(@NotNull Path projectDir) {
Path parent = projectDir.getParent();
if (parent != null) {
Path name = parent.getFileName(); // `null` when parent is a Windows disk root
return name != null ? name.toString() : parent.toString();
}
else {
return UNNAMED_PROJECT;
}
}
}

View File

@@ -4,16 +4,17 @@ package org.jetbrains.jps.model.serialization;
import com.intellij.openapi.util.JDOMUtil;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.io.FileUtilRt;
import com.intellij.openapi.util.io.NioFiles;
import com.intellij.util.containers.ContainerUtil;
import org.jdom.Element;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.Unmodifiable;
import org.jetbrains.jps.model.serialization.impl.TimingLog;
import org.jetbrains.jps.model.JpsProject;
import org.jetbrains.jps.model.serialization.artifact.JpsArtifactSerializer;
import org.jetbrains.jps.model.serialization.impl.JpsProjectSerializationDataExtensionImpl;
import org.jetbrains.jps.model.serialization.impl.TimingLog;
import org.jetbrains.jps.model.serialization.runConfigurations.JpsRunConfigurationSerializer;
import org.jetbrains.jps.util.JpsPathUtil;
@@ -48,9 +49,9 @@ public final class JpsProjectConfigurationLoading {
? Path.of(externalProjectConfigDir) : null;
}
public static @NotNull String getDirectoryBaseProjectName(@NotNull Path dir) {
String name = JpsPathUtil.readProjectName(dir);
return name != null ? name : JpsPathUtil.getDefaultProjectName(dir);
public static @NotNull String getDirectoryBaseProjectName(@NotNull Path basePath, @NotNull Path storeDir) {
String name = JpsPathUtil.readProjectName(storeDir);
return name != null ? name : NioFiles.getFileName(basePath);
}
public static void loadRunConfigurationsFromDirectory(@NotNull JpsProject project,

View File

@@ -11,7 +11,6 @@ import org.jdom.Element;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.serialization.impl.TimingLog;
import org.jetbrains.jps.model.JpsDummyElement;
import org.jetbrains.jps.model.JpsElement;
import org.jetbrains.jps.model.JpsElementFactory;
@@ -22,6 +21,7 @@ import org.jetbrains.jps.model.module.JpsModule;
import org.jetbrains.jps.model.serialization.facet.JpsFacetSerializer;
import org.jetbrains.jps.model.serialization.impl.JpsModuleSerializationDataExtensionImpl;
import org.jetbrains.jps.model.serialization.impl.JpsSerializationFormatException;
import org.jetbrains.jps.model.serialization.impl.TimingLog;
import org.jetbrains.jps.model.serialization.library.JpsLibraryTableSerializer;
import org.jetbrains.jps.model.serialization.library.JpsSdkTableSerializer;
import org.jetbrains.jps.model.serialization.module.JpsModuleClasspathSerializer;
@@ -140,7 +140,7 @@ public final class JpsProjectLoader {
}
private void loadFromDirectory(@NotNull Path dir, @NotNull Executor executor) {
myProject.setName(JpsProjectConfigurationLoading.getDirectoryBaseProjectName(dir));
myProject.setName(JpsProjectConfigurationLoading.getDirectoryBaseProjectName(dir.getParent(), dir));
Path defaultConfigFile = dir.resolve("misc.xml");
JpsSdkType<?> projectSdkType = loadProjectRoot(myComponentLoader.loadRootElement(defaultConfigFile));
for (JpsModelSerializerExtension extension : JpsModelSerializerExtension.getExtensions()) {

View File

@@ -122,7 +122,7 @@ open class ProjectStoreImpl(final override val project: Project) : ComponentStor
}
}
else {
val dotIdea = file.resolve(Project.DIRECTORY_STORE_FOLDER)
val dotIdea = ProjectCoreUtil.getProjectStoreDirectory(file)
this.dotIdea = dotIdea
// PROJECT_CONFIG_DIR must be the first macro
@@ -307,14 +307,13 @@ open class ProjectStoreImpl(final override val project: Project) : ComponentStor
return storageManager.expandMacro(PROJECT_FILE).fileName.toString().removeSuffix(ProjectFileType.DOT_DEFAULT_EXTENSION)
}
val projectDir = directoryStorePath!!
val storedName = JpsPathUtil.readProjectName(projectDir)
val storedName = JpsPathUtil.readProjectName(directoryStorePath!!)
if (storedName != null) {
lastSavedProjectName = storedName
return storedName
}
return JpsPathUtil.getDefaultProjectName(projectDir)
return NioFiles.getFileName(projectBasePath)
}
private suspend fun saveProjectName() {

View File

@@ -6,6 +6,7 @@ import com.intellij.openapi.util.io.FileUtil
import com.intellij.platform.workspace.jps.JpsProjectConfigLocation
import com.intellij.platform.workspace.jps.JpsProjectFileEntitySource
import com.intellij.platform.workspace.jps.UnloadedModulesNameHolder
import com.intellij.platform.workspace.jps.bridge.JpsModuleExtensionBridge
import com.intellij.platform.workspace.jps.bridge.impl.JpsModelBridge
import com.intellij.platform.workspace.jps.bridge.impl.JpsProjectAdditionalData
import com.intellij.platform.workspace.jps.bridge.impl.JpsProjectBridge
@@ -14,7 +15,6 @@ import com.intellij.platform.workspace.jps.bridge.impl.module.JpsModuleBridge
import com.intellij.platform.workspace.jps.entities.SdkId
import com.intellij.platform.workspace.jps.entities.customImlData
import com.intellij.platform.workspace.jps.entities.exModuleOptions
import com.intellij.platform.workspace.jps.bridge.JpsModuleExtensionBridge
import com.intellij.platform.workspace.jps.serialization.impl.*
import com.intellij.platform.workspace.storage.EntityStorage
import com.intellij.platform.workspace.storage.MutableEntityStorage
@@ -32,7 +32,6 @@ import org.jetbrains.jps.model.serialization.*
import org.jetbrains.jps.model.serialization.JpsProjectConfigurationLoading.*
import org.jetbrains.jps.model.serialization.impl.JpsModuleSerializationDataExtensionImpl
import org.jetbrains.jps.model.serialization.impl.JpsSerializationViaWorkspaceModel
import org.jetbrains.jps.plugin.JpsPluginManager
import org.jetbrains.jps.service.JpsServiceManager
import java.nio.file.Path
import kotlin.io.path.invariantSeparatorsPathString
@@ -106,7 +105,8 @@ internal class JpsSerializationViaWorkspaceModelImpl : JpsSerializationViaWorksp
componentLoader: JpsComponentLoader,
): JpsProjectAdditionalData {
val projectName = when (configLocation) {
is JpsProjectConfigLocation.DirectoryBased -> getDirectoryBaseProjectName(configLocation.ideaFolder.toPath())
is JpsProjectConfigLocation.DirectoryBased -> getDirectoryBaseProjectName(configLocation.projectDir.toPath(),
configLocation.ideaFolder.toPath())
is JpsProjectConfigLocation.FileBased -> FileUtil.getNameWithoutExtension(configLocation.iprFile.fileName)
}
val projectRootComponentFileElement = when (configLocation) {