From 60877cd63eaaf54012551dc7a82b7bafac9b204f Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 4 May 2017 14:42:24 +0200 Subject: [PATCH] move getProjectCachePath to ProjectUtil --- .../openapi/compiler/CompilerPaths.java | 40 ++---------------- .../testDiscovery/TestDiscoveryExtension.java | 4 +- .../impl/DetectedFrameworksData.java | 4 +- .../intellij/openapi/project/ProjectUtil.kt | 41 ++++++++++++------- .../com/intellij/ide/impl/ProjectUtil.java | 2 +- .../src/com/intellij/project/project.kt | 27 +----------- 6 files changed, 36 insertions(+), 82 deletions(-) diff --git a/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerPaths.java b/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerPaths.java index d0d493a1f045..96556edf88ca 100644 --- a/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerPaths.java +++ b/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerPaths.java @@ -18,7 +18,6 @@ package com.intellij.openapi.compiler; import com.intellij.compiler.CompilerConfiguration; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.PathManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; @@ -29,7 +28,6 @@ import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; -import com.intellij.util.PathUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.model.java.compiler.AnnotationProcessingConfiguration; @@ -43,16 +41,7 @@ import java.util.Comparator; */ public class CompilerPaths { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.compiler.CompilerPaths"); - private static volatile String ourSystemPath; private static final Comparator URLS_COMPARATOR = (o1, o2) -> o1.compareTo(o2); - /** - * Returns a directory - * @return a directory where compiler may generate files. All generated files are not deleted when the application exits - */ - public static File getGeneratedDataDirectory(Project project, Compiler compiler) { - //noinspection HardCodedStringLiteral - return new File(getGeneratedDataDirectory(project), compiler.getDescription().replaceAll("\\s+", "_")); - } /** * @return a root directory where generated files for various compilers are stored @@ -70,35 +59,12 @@ public class CompilerPaths { return new File(getCompilerSystemDirectory(project), ".caches"); } - public static File getCacheStoreDirectory(String compilerProjectDirName) { - //noinspection HardCodedStringLiteral - return new File(getCompilerSystemDirectory(compilerProjectDirName), ".caches"); - } - - public static File getRebuildMarkerFile(Project project) { - return new File(getCompilerSystemDirectory(project), "rebuild_required"); - } - /** * @return a directory under IDEA "system" directory where all files related to compiler subsystem are stored (such as compiler caches or generated files) */ - public static File getCompilerSystemDirectory(Project project) { - return getCompilerSystemDirectory(getCompilerSystemDirectoryName(project)); - } - - public static File getCompilerSystemDirectory(String compilerProjectDirName) { - return new File(getCompilerSystemDirectory(), compilerProjectDirName); - } - - public static String getCompilerSystemDirectoryName(Project project) { - // todo: use ProjectKt.getSystemCacheFileName() - return ProjectUtil.getPresentableName(project) + "." + project.getLocationHash(); - } - - public static File getCompilerSystemDirectory() { - //noinspection HardCodedStringLiteral - final String systemPath = ourSystemPath != null? ourSystemPath : (ourSystemPath = PathUtil.getCanonicalPath(PathManager.getSystemPath())); - return new File(systemPath, "compiler"); + @NotNull + public static File getCompilerSystemDirectory(@NotNull Project project) { + return ProjectUtil.getProjectCachePath(project, "compiler", false, ".").toFile(); } /** diff --git a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryExtension.java b/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryExtension.java index 47ff31c507fe..88fe252c8832 100644 --- a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryExtension.java +++ b/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryExtension.java @@ -29,13 +29,13 @@ import com.intellij.execution.testframework.sm.runner.SMTestProxy; import com.intellij.openapi.Disposable; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.ProjectUtil; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.project.ProjectKt; import com.intellij.rt.coverage.data.ProjectData; import com.intellij.util.Alarm; import com.intellij.util.ArrayUtil; @@ -145,7 +145,7 @@ public class TestDiscoveryExtension extends RunConfigurationExtension { @NotNull public static Path baseTestDiscoveryPathForProject(Project project) { - return ProjectKt.getProjectCachePath(project, "testDiscovery", true, "."); + return ProjectUtil.getProjectCachePath(project, "testDiscovery", true, "."); } private static final Object ourTracesLock = new Object(); diff --git a/platform/lang-impl/src/com/intellij/framework/detection/impl/DetectedFrameworksData.java b/platform/lang-impl/src/com/intellij/framework/detection/impl/DetectedFrameworksData.java index ec906ee51d2b..c64cdee9e123 100644 --- a/platform/lang-impl/src/com/intellij/framework/detection/impl/DetectedFrameworksData.java +++ b/platform/lang-impl/src/com/intellij/framework/detection/impl/DetectedFrameworksData.java @@ -18,8 +18,8 @@ package com.intellij.framework.detection.impl; import com.intellij.framework.detection.DetectedFrameworkDescription; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.ProjectUtil; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.project.ProjectKt; import com.intellij.util.containers.MultiMap; import com.intellij.util.indexing.FileBasedIndex; import com.intellij.util.io.DataExternalizer; @@ -50,7 +50,7 @@ public class DetectedFrameworksData { public DetectedFrameworksData(Project project) { myDetectedFrameworks = new MultiMap<>(); - File file = ProjectKt.getProjectCachePath(project, FrameworkDetectorRegistryImpl.getDetectionDirPath(), true, ".").resolve("files").toFile(); + File file = ProjectUtil.getProjectCachePath(project, FrameworkDetectorRegistryImpl.getDetectionDirPath(), true, ".").resolve("files").toFile(); myNewFiles = new TIntObjectHashMap<>(); try { myExistentFrameworkFiles = new PersistentHashMap<>(file, EnumeratorIntegerDescriptor.INSTANCE, new TIntHashSetExternalizer()); diff --git a/platform/platform-api/src/com/intellij/openapi/project/ProjectUtil.kt b/platform/platform-api/src/com/intellij/openapi/project/ProjectUtil.kt index f936b9307f31..8fb65f4d3643 100644 --- a/platform/platform-api/src/com/intellij/openapi/project/ProjectUtil.kt +++ b/platform/platform-api/src/com/intellij/openapi/project/ProjectUtil.kt @@ -19,6 +19,7 @@ package com.intellij.openapi.project import com.intellij.ide.DataManager import com.intellij.ide.highlighter.ProjectFileType import com.intellij.openapi.actionSystem.CommonDataKeys +import com.intellij.openapi.application.appSystemDir import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.fileEditor.UniqueVFilePathBuilder import com.intellij.openapi.fileTypes.FileType @@ -29,10 +30,13 @@ import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.util.io.FileUtil +import com.intellij.openapi.util.io.FileUtilRt import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFilePathWrapper +import com.intellij.util.PathUtil import com.intellij.util.io.exists import java.nio.file.InvalidPathException +import java.nio.file.Path import java.nio.file.Paths import java.util.* import javax.swing.JComponent @@ -134,23 +138,32 @@ fun Project.guessProjectDir() : VirtualFile { return this.baseDir!! } -fun getPresentableName(project: Project): String? { - if (project.isDefault) { - return project.name +private fun Project.getPresentableFileName(): String { + if (isDefault) { + return name } - val location = project.presentableUrl ?: return null + val location = presentableUrl!! + val projectName = PathUtil.getFileName(FileUtilRt.toSystemIndependentName(location)) + .toLowerCase(Locale.US) + .removeSuffix(ProjectFileType.DOT_DEFAULT_EXTENSION) + return FileUtil.sanitizeFileName(projectName, false) +} - var projectName = FileUtil.toSystemIndependentName(location).trimEnd('/') - val lastSlash = projectName.lastIndexOf('/') - if (lastSlash >= 0 && lastSlash + 1 < projectName.length) { - projectName = projectName.substring(lastSlash + 1) - } +private fun Project.getProjectCacheFileName(forceNameUse: Boolean, hashSeparator: String): String { + val name = if (!forceNameUse) getPresentableFileName() else name + return "$name$hashSeparator$locationHash" +} - if (projectName.endsWith(ProjectFileType.DOT_DEFAULT_EXTENSION, ignoreCase = true)) { - projectName = projectName.substring(0, projectName.length - ProjectFileType.DOT_DEFAULT_EXTENSION.length) - } +@JvmOverloads +fun Project.getProjectCachePath(cacheName: String, forceNameUse: Boolean = false, hashSeparator: String = "-"): Path { + return getProjectCachePath(appSystemDir.resolve(cacheName), forceNameUse, hashSeparator) +} - // replace ':' from windows drive names - return projectName.toLowerCase(Locale.US).replace(':', '_') +/** + * Use parameters only for migration purposes, once all usages will be migrated, parameters will be removed + */ +@JvmOverloads +fun Project.getProjectCachePath(baseDir: Path, forceNameUse: Boolean = false, hashSeparator: String = "-"): Path { + return baseDir.resolve(getProjectCacheFileName(forceNameUse, hashSeparator)) } \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java b/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java index 5a1c1d2ebcee..549ad9fe14c7 100644 --- a/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java +++ b/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java @@ -56,7 +56,7 @@ import java.io.IOException; * @author Eugene Belyaev */ public class ProjectUtil { - private static final Logger LOG = Logger.getInstance("#com.intellij.ide.impl.ProjectUtil"); + private static final Logger LOG = Logger.getInstance(ProjectUtil.class); private ProjectUtil() { } diff --git a/platform/projectModel-impl/src/com/intellij/project/project.kt b/platform/projectModel-impl/src/com/intellij/project/project.kt index b184df8319c6..c1638abad25a 100644 --- a/platform/projectModel-impl/src/com/intellij/project/project.kt +++ b/platform/projectModel-impl/src/com/intellij/project/project.kt @@ -16,19 +16,15 @@ package com.intellij.project import com.intellij.ide.highlighter.ProjectFileType -import com.intellij.openapi.application.appSystemDir import com.intellij.openapi.components.StorageScheme import com.intellij.openapi.components.impl.stores.IComponentStore import com.intellij.openapi.components.impl.stores.IProjectStore import com.intellij.openapi.project.Project import com.intellij.openapi.util.SystemInfo -import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.vfs.VirtualFile -import com.intellij.util.PathUtilRt import com.intellij.util.io.basicAttributesIfExists import com.intellij.util.io.exists import java.nio.file.InvalidPathException -import java.nio.file.Path import java.nio.file.Paths val Project.stateStore: IProjectStore @@ -60,26 +56,5 @@ fun isValidProjectPath(path: String, anyRegularFileIsValid: Boolean = false): Bo } fun isEqualToProjectFileStorePath(project: Project, filePath: String, storePath: String): Boolean { - if (!project.isDirectoryBased) { - return false - } - return filePath.equals(project.stateStore.stateStorageManager.expandMacros(storePath), !SystemInfo.isFileSystemCaseSensitive) -} - -private fun Project.getProjectCacheFileName(forceNameUse: Boolean, hashSeparator: String): String { - val name = if (!forceNameUse && isDirectoryBased) FileUtil.sanitizeFileName(PathUtilRt.getFileName(basePath), false) else name - return "$name$hashSeparator$locationHash" -} - -@JvmOverloads -fun Project.getProjectCachePath(cacheName: String, forceNameUse: Boolean = false, hashSeparator: String = "-"): Path { - return getProjectCachePath(appSystemDir.resolve(cacheName), forceNameUse, hashSeparator) -} - -/** - * Use parameters only for migration purposes, once all usages will be migrated, parameters will be removed - */ -@JvmOverloads -fun Project.getProjectCachePath(baseDir: Path, forceNameUse: Boolean = false, hashSeparator: String = "-"): Path { - return baseDir.resolve(getProjectCacheFileName(forceNameUse, hashSeparator)) + return project.isDirectoryBased && filePath.equals(project.stateStore.stateStorageManager.expandMacros(storePath), !SystemInfo.isFileSystemCaseSensitive) } \ No newline at end of file