mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-CR-58091: light edit: avoid instantiating LightEditService in a regular IDE, drop persisting overridden files types
Also, don't show "Register New File Type Association" dialog when opening files in Light Edit. (cherry picked from commit 0971d55c01ea255a81343df992209b928099af94) GitOrigin-RevId: 798b7da8681c8d08c91d4a282f67d30c87ac459b
This commit is contained in:
committed by
intellij-monorepo-bot
parent
6330b3fd05
commit
5376e6e8c9
@@ -2,7 +2,6 @@
|
||||
package com.intellij.ide.lightEdit;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
@@ -39,8 +38,5 @@ public interface LightEditService {
|
||||
@Nullable
|
||||
VirtualFile getSelectedFile();
|
||||
|
||||
@Nullable
|
||||
FileType getExplicitFileType(@NotNull VirtualFile virtualFile);
|
||||
|
||||
void updateFileStatus(@NotNull Collection<VirtualFile> files);
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.intellij.ide.highlighter.ProjectFileType;
|
||||
import com.intellij.ide.impl.OpenProjectTask;
|
||||
import com.intellij.ide.impl.ProjectUtil;
|
||||
import com.intellij.ide.lightEdit.LightEdit;
|
||||
import com.intellij.ide.lightEdit.LightEditUtil;
|
||||
import com.intellij.ide.util.PsiNavigationSupport;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
@@ -119,6 +120,7 @@ public class OpenFileAction extends AnAction implements DumbAware {
|
||||
return;
|
||||
}
|
||||
}
|
||||
LightEditUtil.markUnknownFileTypeAsPlainTextIfNeeded(project, file);
|
||||
|
||||
FileType type = FileTypeChooser.getKnownFileTypeOrAssociate(file, project);
|
||||
if (type == null) return;
|
||||
|
||||
@@ -1,10 +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.lightEdit;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
class LightEditConfiguration {
|
||||
public boolean autosaveMode = false;
|
||||
public Map<String, String> pathToExtensionMap = new HashMap<>();
|
||||
}
|
||||
|
||||
+19
-1
@@ -2,14 +2,32 @@
|
||||
package com.intellij.ide.lightEdit;
|
||||
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.FileTypes;
|
||||
import com.intellij.openapi.fileTypes.PlainTextFileType;
|
||||
import com.intellij.openapi.fileTypes.impl.FileTypeOverrider;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.newvfs.impl.CachedFileType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class LightEditFileTypeOverrider implements FileTypeOverrider {
|
||||
|
||||
private static final Key<Boolean> KEY = Key.create("LightEdit.PlainText");
|
||||
|
||||
@Override
|
||||
public @Nullable FileType getOverriddenFileType(@NotNull VirtualFile file) {
|
||||
return LightEditService.getInstance().getExplicitFileType(file);
|
||||
return isPlainText(file) ? PlainTextFileType.INSTANCE : null;
|
||||
}
|
||||
|
||||
private static boolean isPlainText(@NotNull VirtualFile file) {
|
||||
return file.getUserData(KEY) == Boolean.TRUE;
|
||||
}
|
||||
|
||||
static void markUnknownFileTypeAsPlainText(@NotNull VirtualFile file) {
|
||||
if (file.getFileType() == FileTypes.UNKNOWN) {
|
||||
file.putUserData(KEY, Boolean.TRUE);
|
||||
CachedFileType.clearCache(); // refresh com.intellij.openapi.vfs.newvfs.impl.VirtualFileSystemEntry.getFileType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,19 +13,12 @@ import com.intellij.openapi.components.State;
|
||||
import com.intellij.openapi.components.Storage;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.FileTypeManager;
|
||||
import com.intellij.openapi.fileTypes.PlainTextFileType;
|
||||
import com.intellij.openapi.fileTypes.UnknownFileType;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.encoding.EncodingManager;
|
||||
import com.intellij.openapi.vfs.encoding.EncodingManagerImpl;
|
||||
import com.intellij.openapi.vfs.newvfs.impl.CachedFileType;
|
||||
import com.intellij.openapi.vfs.newvfs.impl.StubVirtualFile;
|
||||
import com.intellij.openapi.wm.impl.welcomeScreen.WelcomeFrame;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.concurrency.NonUrgentExecutor;
|
||||
@@ -50,8 +43,6 @@ public class LightEditServiceImpl implements LightEditService,
|
||||
PersistentStateComponent<LightEditConfiguration> {
|
||||
private static final Logger LOG = Logger.getInstance(LightEditServiceImpl.class);
|
||||
|
||||
private static final String ENABLED_FILE_OPEN_KEY = "light.edit.file.open.enabled";
|
||||
|
||||
private LightEditFrameWrapper myFrameWrapper;
|
||||
private final LightEditorManagerImpl myEditorManager;
|
||||
private final LightEditConfiguration myConfiguration = new LightEditConfiguration();
|
||||
@@ -112,7 +103,7 @@ public class LightEditServiceImpl implements LightEditService,
|
||||
|
||||
@Override
|
||||
public boolean openFile(@NotNull VirtualFile file) {
|
||||
if (Registry.is(ENABLED_FILE_OPEN_KEY)) {
|
||||
if (LightEditUtil.isLightEditEnabled()) {
|
||||
doWhenActionManagerInitialized(() -> {
|
||||
doOpenFile(file);
|
||||
});
|
||||
@@ -324,29 +315,6 @@ public class LightEditServiceImpl implements LightEditService,
|
||||
myLightEditProjectManager.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public FileType getExplicitFileType(@NotNull VirtualFile virtualFile) {
|
||||
if (virtualFile instanceof StubVirtualFile) return null;
|
||||
final String url = virtualFile.getPresentableUrl();
|
||||
if (myConfiguration.pathToExtensionMap.containsKey(url)) {
|
||||
String name = virtualFile.getNameWithoutExtension();
|
||||
return FileTypeManager.getInstance().getFileTypeByFileName(name + "." + myConfiguration.pathToExtensionMap.get(url));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
void overrideUnknownFileType(@NotNull VirtualFile virtualFile) {
|
||||
if (virtualFile.getFileType() instanceof UnknownFileType) {
|
||||
registerFileType(virtualFile, PlainTextFileType.INSTANCE);
|
||||
CachedFileType.clearCache();
|
||||
}
|
||||
}
|
||||
|
||||
void registerFileType(@NotNull VirtualFile virtualFile, @NotNull FileType fileType) {
|
||||
myConfiguration.pathToExtensionMap.put(virtualFile.getPresentableUrl(), fileType.getDefaultExtension());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void appClosing() {
|
||||
((EncodingManagerImpl)EncodingManager.getInstance()).clearDocumentQueue();
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.intellij.openapi.fileChooser.FileSaverDialog;
|
||||
import com.intellij.openapi.fileTypes.FileTypeManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileWrapper;
|
||||
@@ -21,6 +22,7 @@ import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class LightEditUtil {
|
||||
private static final String ENABLED_FILE_OPEN_KEY = "light.edit.file.open.enabled";
|
||||
|
||||
private LightEditUtil() {
|
||||
}
|
||||
@@ -95,4 +97,17 @@ public class LightEditUtil {
|
||||
private static String getCloseCancel() {
|
||||
return ApplicationBundle.message("light.edit.close.cancel");
|
||||
}
|
||||
|
||||
public static void markUnknownFileTypeAsPlainTextIfNeeded(@Nullable Project project, @NotNull VirtualFile file) {
|
||||
if (project != null && !project.isDefault() && !LightEdit.owns(project)) {
|
||||
return;
|
||||
}
|
||||
if (isLightEditEnabled()) {
|
||||
LightEditFileTypeOverrider.markUnknownFileTypeAsPlainText(file);
|
||||
}
|
||||
}
|
||||
|
||||
static boolean isLightEditEnabled() {
|
||||
return Registry.is(ENABLED_FILE_OPEN_KEY);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ public class LightEditorManagerImpl implements LightEditorManager, Disposable {
|
||||
@Override
|
||||
@Nullable
|
||||
public LightEditorInfo createEditor(@NotNull VirtualFile file) {
|
||||
myLightEditService.overrideUnknownFileType(file);
|
||||
LightEditFileTypeOverrider.markUnknownFileTypeAsPlainText(file);
|
||||
Document document = FileDocumentManager.getInstance().getDocument(file);
|
||||
if (document != null) {
|
||||
document.putUserData(NO_IMPLICIT_SAVE, true);
|
||||
|
||||
Reference in New Issue
Block a user