mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[platform] common code for reading project name
Fixes NPE (in JPS( and weird names (like 'W') GitOrigin-RevId: 54837027fffe7c1bcc55067511af54d9ee6bc2cd
This commit is contained in:
committed by
intellij-monorepo-bot
parent
a9329dce96
commit
c9d5bcb40c
@@ -9,7 +9,11 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
@@ -84,4 +88,20 @@ public class JpsPathUtil {
|
||||
public static boolean isJrtUrl(@NotNull String url) {
|
||||
return url.startsWith("jrt://");
|
||||
}
|
||||
|
||||
public static @Nullable String readProjectName(@NotNull Path projectDir) {
|
||||
try (Stream<String> stream = Files.lines(projectDir.resolve(".name"))) {
|
||||
return stream.findFirst().map(String::trim).orElse(null);
|
||||
}
|
||||
catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static final String UNNAMED_PROJECT = "<unnamed>";
|
||||
|
||||
public static @NotNull String getDefaultProjectName(@NotNull Path projectDir) {
|
||||
Path parent = projectDir.getParent();
|
||||
return parent != null ? parent.getFileName().toString() : UNNAMED_PROJECT;
|
||||
}
|
||||
}
|
||||
+3
-10
@@ -33,6 +33,7 @@ import org.jetbrains.jps.model.serialization.module.JpsModulePropertiesSerialize
|
||||
import org.jetbrains.jps.model.serialization.module.JpsModuleRootModelSerializer;
|
||||
import org.jetbrains.jps.model.serialization.runConfigurations.JpsRunConfigurationSerializer;
|
||||
import org.jetbrains.jps.service.SharedThreadPool;
|
||||
import org.jetbrains.jps.util.JpsPathUtil;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@@ -43,7 +44,6 @@ import java.nio.file.Paths;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
@@ -101,15 +101,8 @@ public class JpsProjectLoader extends JpsLoaderBase {
|
||||
|
||||
@NotNull
|
||||
public static String getDirectoryBaseProjectName(@NotNull Path dir) {
|
||||
try (Stream<String> stream = Files.lines(dir.resolve(".name"))) {
|
||||
String value = stream.findFirst().map(String::trim).orElse(null);
|
||||
if (value != null) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
catch (IOException ignored) { }
|
||||
Path parent = dir.getParent();
|
||||
return (parent == null ? dir : parent).getFileName().toString();
|
||||
String name = JpsPathUtil.readProjectName(dir);
|
||||
return name != null ? name : JpsPathUtil.getDefaultProjectName(dir);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -19,12 +19,15 @@ import com.intellij.openapi.vfs.ReadonlyStatusHandler
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.util.PathUtilRt
|
||||
import com.intellij.util.SmartList
|
||||
import com.intellij.util.containers.computeIfAny
|
||||
import com.intellij.util.io.*
|
||||
import com.intellij.util.io.delete
|
||||
import com.intellij.util.io.isDirectory
|
||||
import com.intellij.util.io.systemIndependentPath
|
||||
import com.intellij.util.io.write
|
||||
import kotlinx.coroutines.coroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import org.jetbrains.annotations.CalledInAny
|
||||
import org.jetbrains.jps.util.JpsPathUtil
|
||||
import java.nio.file.AccessDeniedException
|
||||
import java.nio.file.Path
|
||||
import java.nio.file.Paths
|
||||
@@ -53,18 +56,18 @@ open class ProjectStoreImpl(project: Project) : ProjectStoreBase(project) {
|
||||
return PathUtilRt.getFileName(projectFilePath).removeSuffix(ProjectFileType.DOT_DEFAULT_EXTENSION)
|
||||
}
|
||||
|
||||
val baseDir = projectBasePath
|
||||
val nameFile = nameFile
|
||||
if (nameFile.exists()) {
|
||||
LOG.runAndLogException { readProjectNameFile(nameFile) }?.let {
|
||||
lastSavedProjectName = it
|
||||
return it
|
||||
}
|
||||
val projectDir = nameFile.parent
|
||||
val storedName = JpsPathUtil.readProjectName(projectDir)
|
||||
if (storedName != null) {
|
||||
lastSavedProjectName = storedName
|
||||
return storedName
|
||||
}
|
||||
|
||||
return ProjectNameProvider.EP_NAME.extensionList.computeIfAny {
|
||||
LOG.runAndLogException { it.getDefaultName(project) }
|
||||
} ?: PathUtilRt.getFileName(baseDir).replace(":", "")
|
||||
val computedName = ProjectNameProvider.EP_NAME.iterable.asSequence()
|
||||
.map { LOG.runAndLogException { it.getDefaultName(project) } }
|
||||
.find { it != null }
|
||||
|
||||
return computedName ?: JpsPathUtil.getDefaultProjectName(projectDir)
|
||||
}
|
||||
|
||||
private suspend fun saveProjectName() {
|
||||
|
||||
@@ -20,7 +20,6 @@ import com.intellij.openapi.ui.Messages
|
||||
import com.intellij.openapi.vfs.LocalFileSystem
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.util.io.createDirectories
|
||||
import com.intellij.util.io.inputStream
|
||||
import com.intellij.util.io.systemIndependentPath
|
||||
import gnu.trove.THashSet
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
@@ -149,10 +148,4 @@ inline fun <T> runAsWriteActionIfNeeded(crossinline runnable: () -> T): T {
|
||||
ApplicationManager.getApplication().isWriteAccessAllowed -> runnable()
|
||||
else -> runWriteAction(runnable)
|
||||
}
|
||||
}
|
||||
|
||||
@Throws(IOException::class)
|
||||
@ApiStatus.Internal
|
||||
fun readProjectNameFile(nameFile: Path): String? {
|
||||
return nameFile.inputStream().reader().useLines { line -> line.firstOrNull { !it.isEmpty() }?.trim() }
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.ide
|
||||
|
||||
import com.intellij.configurationStore.readProjectNameFile
|
||||
import com.intellij.ide.impl.OpenProjectTask
|
||||
import com.intellij.ide.impl.ProjectUtil
|
||||
import com.intellij.ide.ui.UISettings
|
||||
@@ -19,7 +18,6 @@ import com.intellij.openapi.diagnostic.runAndLogException
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.project.ProjectManager
|
||||
import com.intellij.openapi.project.ProjectManagerListener
|
||||
import com.intellij.openapi.project.impl.ProjectImpl
|
||||
import com.intellij.openapi.util.ModificationTracker
|
||||
import com.intellij.openapi.util.SystemInfo
|
||||
import com.intellij.openapi.util.io.FileUtilRt
|
||||
@@ -42,10 +40,13 @@ import com.intellij.util.ui.UIUtil
|
||||
import gnu.trove.THashMap
|
||||
import gnu.trove.THashSet
|
||||
import org.jetbrains.annotations.ApiStatus.Internal
|
||||
import org.jetbrains.jps.util.JpsPathUtil
|
||||
import java.awt.image.BufferedImage
|
||||
import java.io.IOException
|
||||
import java.nio.ByteBuffer
|
||||
import java.nio.file.*
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Path
|
||||
import java.nio.file.Paths
|
||||
import java.nio.file.StandardCopyOption
|
||||
import java.util.*
|
||||
import java.util.concurrent.atomic.AtomicLong
|
||||
import javax.imageio.IIOImage
|
||||
@@ -573,17 +574,9 @@ private fun readProjectName(path: String): String {
|
||||
return FileUtilRt.getNameWithoutExtension(file.fileName.toString())
|
||||
}
|
||||
|
||||
val nameFile = file.resolve(Project.DIRECTORY_STORE_FOLDER).resolve(ProjectImpl.NAME_FILE)
|
||||
try {
|
||||
val result = readProjectNameFile(nameFile)
|
||||
if (result != null) {
|
||||
return result
|
||||
}
|
||||
}
|
||||
catch (ignore: NoSuchFileException) { }
|
||||
catch (ignored: IOException) { }
|
||||
|
||||
return file.fileName?.toString() ?: "<unknown>"
|
||||
val projectDir = file.resolve(Project.DIRECTORY_STORE_FOLDER)
|
||||
return JpsPathUtil.readProjectName(projectDir) ?:
|
||||
JpsPathUtil.getDefaultProjectName(projectDir)
|
||||
}
|
||||
|
||||
private fun getLastProjectFrameInfoFile() = appSystemDir.resolve("lastProjectFrameInfo")
|
||||
Reference in New Issue
Block a user