mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IJPL-194103 Formatting Widget does not update its icon after manipulations with .editorconfig
- join the caches and remove redundant code GitOrigin-RevId: d78ea7b69c6de7be81492545c43cca71f13e9d52
This commit is contained in:
committed by
intellij-monorepo-bot
parent
c5505db04c
commit
0d6cde7d67
@@ -3,42 +3,27 @@ package org.editorconfig.configmanagement;
|
||||
|
||||
import com.intellij.application.options.CodeStyle;
|
||||
import com.intellij.editorconfig.common.EditorConfigBundle;
|
||||
import com.intellij.ide.actions.ShowSettingsUtilImpl;
|
||||
import com.intellij.ide.actions.searcheverywhere.SearchEverywhereManager;
|
||||
import com.intellij.ide.actions.searcheverywhere.SearchEverywhereManagerImpl;
|
||||
import com.intellij.notification.Notification;
|
||||
import com.intellij.notification.NotificationGroup;
|
||||
import com.intellij.notification.NotificationGroupManager;
|
||||
import com.intellij.notification.NotificationType;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.application.ApplicationBundle;
|
||||
import com.intellij.openapi.project.DumbAwareAction;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import org.editorconfig.Utils;
|
||||
import org.editorconfig.settings.EditorConfigSettings;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public final class EditorConfigActionUtil {
|
||||
|
||||
public static AnAction[] createNavigationActions(@NotNull PsiFile file) {
|
||||
EditorConfigNavigationActionsFactory navigationActionsFactory =
|
||||
EditorConfigNavigationActionsFactory.Companion.getInstance(file);
|
||||
if (navigationActionsFactory == null) {
|
||||
return AnAction.EMPTY_ARRAY;
|
||||
}
|
||||
List<AnAction> actions = new ArrayList<>(navigationActionsFactory.getNavigationActions(file.getProject(), file.getVirtualFile()));
|
||||
return actions.toArray(AnAction.EMPTY_ARRAY);
|
||||
public static AnAction @NotNull [] createNavigationActions(@NotNull PsiFile file) {
|
||||
return EditorConfigNavigationActionsFactory
|
||||
.INSTANCE
|
||||
.getNavigationActions(file.getProject(), file.getVirtualFile())
|
||||
.toArray(AnAction.EMPTY_ARRAY);
|
||||
}
|
||||
|
||||
@Contract("_, _ -> new")
|
||||
|
||||
+26
-51
@@ -1,7 +1,6 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.editorconfig.configmanagement
|
||||
|
||||
import com.intellij.application.options.codeStyle.cache.CodeStyleCachingService
|
||||
import com.intellij.editorconfig.common.EditorConfigBundle.message
|
||||
import com.intellij.openapi.actionSystem.ActionGroup
|
||||
import com.intellij.openapi.actionSystem.AnAction
|
||||
@@ -9,33 +8,29 @@ import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager
|
||||
import com.intellij.openapi.project.DumbAwareAction
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.Key
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.util.containers.toArray
|
||||
import org.editorconfig.Utils
|
||||
import org.editorconfig.configmanagement.editor.EditorConfigPreviewManager
|
||||
import org.editorconfig.language.util.EditorConfigPresentationUtil.getFileName
|
||||
import org.jetbrains.annotations.Nls
|
||||
|
||||
class EditorConfigNavigationActionsFactory private constructor() {
|
||||
private val myEditorConfigFilePaths: MutableList<String> = ArrayList()
|
||||
|
||||
object EditorConfigNavigationActionsFactory {
|
||||
fun getNavigationActions(project: Project, sourceFile: VirtualFile): List<AnAction> {
|
||||
val actions = synchronized(myEditorConfigFilePaths) {
|
||||
val editorConfigFiles = Utils.pathsToFiles(myEditorConfigFilePaths)
|
||||
editorConfigFiles.map { file ->
|
||||
DumbAwareAction.create(getActionName(file, editorConfigFiles.size > 1)) { openEditorConfig(project, sourceFile, file) }
|
||||
val editorConfigFiles = Utils.relatedEditorConfigFiles(sourceFile)
|
||||
if (editorConfigFiles.isEmpty()) return emptyList()
|
||||
|
||||
val withFolder = editorConfigFiles.size > 1
|
||||
val navigationActions = editorConfigFiles.map { editorConfigFile ->
|
||||
DumbAwareAction.create(getActionName(editorConfigFile, withFolder)) {
|
||||
openEditorConfig(project, sourceFile, editorConfigFile)
|
||||
}
|
||||
}
|
||||
return if (actions.size <= 1) actions else listOf(NavigationActionGroup(actions.toArray(AnAction.EMPTY_ARRAY)))
|
||||
}
|
||||
|
||||
fun updateEditorConfigFilePaths(editorConfigFilePaths: List<String>) {
|
||||
synchronized(myEditorConfigFilePaths) {
|
||||
myEditorConfigFilePaths.clear()
|
||||
myEditorConfigFilePaths.addAll(editorConfigFilePaths)
|
||||
}
|
||||
|
||||
return if (withFolder)
|
||||
listOf(NavigationActionGroup(navigationActions.toArray(AnAction.EMPTY_ARRAY)))
|
||||
else
|
||||
navigationActions
|
||||
}
|
||||
|
||||
private class NavigationActionGroup(private val myChildActions: Array<AnAction>) : ActionGroup(
|
||||
@@ -44,39 +39,19 @@ class EditorConfigNavigationActionsFactory private constructor() {
|
||||
return myChildActions
|
||||
}
|
||||
}
|
||||
|
||||
private fun getActionName(file: VirtualFile, withFolder: Boolean): @Nls String =
|
||||
if (!withFolder)
|
||||
message("action.open.file")
|
||||
else
|
||||
getFileName(file, withFolder)
|
||||
|
||||
companion object {
|
||||
private val NAVIGATION_FACTORY_KEY = Key.create<EditorConfigNavigationActionsFactory>("editor.config.navigation.factory")
|
||||
private val INSTANCE_LOCK = Any()
|
||||
private fun openEditorConfig(project: Project, sourceFile: VirtualFile, editorConfigFile: VirtualFile) {
|
||||
val fileEditorManager = FileEditorManager.getInstance(project)
|
||||
if (fileEditorManager.isFileOpen(editorConfigFile)) {
|
||||
fileEditorManager.closeFile(editorConfigFile)
|
||||
}
|
||||
EditorConfigPreviewManager.getInstance(project).associateWithPreviewFile(editorConfigFile, sourceFile)
|
||||
fileEditorManager.openFile(editorConfigFile, true)
|
||||
}
|
||||
|
||||
private fun getActionName(file: VirtualFile, withFolder: Boolean): @Nls String {
|
||||
val fileName = getFileName(file, withFolder)
|
||||
return if (!withFolder) message("action.open.file") else fileName
|
||||
}
|
||||
|
||||
fun getInstance(psiFile: PsiFile): EditorConfigNavigationActionsFactory? {
|
||||
val project = psiFile.project
|
||||
val file = psiFile.virtualFile
|
||||
synchronized(INSTANCE_LOCK) {
|
||||
val dataHolder = CodeStyleCachingService.getInstance(project).getDataHolder(file)
|
||||
var instance: EditorConfigNavigationActionsFactory? = null
|
||||
if (dataHolder != null) {
|
||||
instance = dataHolder.getUserData(NAVIGATION_FACTORY_KEY)
|
||||
if (instance == null) {
|
||||
instance = EditorConfigNavigationActionsFactory()
|
||||
dataHolder.putUserData(NAVIGATION_FACTORY_KEY, instance)
|
||||
}
|
||||
}
|
||||
return instance
|
||||
}
|
||||
private fun openEditorConfig(project: Project, sourceFile: VirtualFile, editorConfigFile: VirtualFile) {
|
||||
val fileEditorManager = FileEditorManager.getInstance(project)
|
||||
if (fileEditorManager.isFileOpen(editorConfigFile)) {
|
||||
fileEditorManager.closeFile(editorConfigFile)
|
||||
}
|
||||
EditorConfigPreviewManager.getInstance(project).associateWithPreviewFile(editorConfigFile, sourceFile)
|
||||
fileEditorManager.openFile(editorConfigFile, true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-5
@@ -36,7 +36,6 @@ import org.ec4j.core.ResourceProperties
|
||||
import org.editorconfig.EditorConfigNotifier
|
||||
import org.editorconfig.Utils
|
||||
import org.editorconfig.configmanagement.EditorConfigActionUtil
|
||||
import org.editorconfig.configmanagement.EditorConfigNavigationActionsFactory
|
||||
import org.editorconfig.configmanagement.EditorConfigUsagesCollector.logEditorConfigUsed
|
||||
import org.editorconfig.plugincomponents.EditorConfigPropertiesService
|
||||
import org.editorconfig.settings.EditorConfigSettings
|
||||
@@ -81,10 +80,7 @@ class EditorConfigCodeStyleSettingsModifier : CodeStyleSettingsModifier {
|
||||
|
||||
settings.setModifier(this)
|
||||
settings.addDependency(EditorConfigPropertiesService.getInstance(project))
|
||||
|
||||
val navigationFactory = EditorConfigNavigationActionsFactory.getInstance(psiFile)
|
||||
navigationFactory?.updateEditorConfigFilePaths(editorConfigs.map { it.path })
|
||||
|
||||
|
||||
// Apply editorconfig settings for the current editor
|
||||
if (applyCodeStyleSettings(settings, properties, psiFile)) {
|
||||
LOG.debug { "Modified for ${psiFile.name}" }
|
||||
|
||||
Reference in New Issue
Block a user