diff --git a/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/PhpFileGenerator.java b/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/PhpFileGenerator.java index 21bc5bdc6..f38a63e30 100644 --- a/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/PhpFileGenerator.java +++ b/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/PhpFileGenerator.java @@ -5,7 +5,8 @@ package com.magento.idea.magento2plugin.actions.generation.generator; -import com.intellij.openapi.application.ReadAction; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.util.Computable; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiFile; @@ -68,7 +69,7 @@ public PhpFileGenerator( public PsiFile generate(final @NotNull String actionName) { file = getFile(); - final PhpClass phpClass = ReadAction.compute(() -> + final PhpClass phpClass = ApplicationManager.getApplication().runReadAction((Computable) () -> GetPhpClassByFQN.getInstance(project).execute(file.getClassFqn()) ); @@ -78,7 +79,7 @@ public PsiFile generate(final @NotNull String actionName) { return phpClass.getContainingFile(); } - final PsiDirectory moduleDirectory = ReadAction.compute(() -> + final PsiDirectory moduleDirectory = ApplicationManager.getApplication().runReadAction((Computable) () -> moduleIndex.getModuleDirectoryByModuleName(file.getModuleName()) ); diff --git a/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/util/DirectoryGenerator.java b/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/util/DirectoryGenerator.java index b2ac27768..ec40fbc44 100644 --- a/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/util/DirectoryGenerator.java +++ b/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/util/DirectoryGenerator.java @@ -6,8 +6,8 @@ package com.magento.idea.magento2plugin.actions.generation.generator.util; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.application.WriteAction; +import com.intellij.openapi.util.Computable; import com.intellij.psi.PsiDirectory; import com.magento.idea.magento2plugin.actions.generation.generator.data.ModuleDirectoriesData; import com.magento.idea.magento2plugin.magento.packages.File; @@ -64,7 +64,9 @@ public PsiDirectory findOrCreateSubdirectory( final @NotNull PsiDirectory parent, final @NotNull String subdirName ) { - final PsiDirectory sub = ReadAction.compute(() -> parent.findSubdirectory(subdirName)); + final PsiDirectory sub = ApplicationManager.getApplication().runReadAction( + (Computable) () -> parent.findSubdirectory(subdirName) + ); return sub == null ? createSubdirectoryOnEdt(parent, subdirName) : sub; } @@ -85,7 +87,9 @@ public PsiDirectory findOrCreateSubdirectories( for (final String directory : Arrays.asList(directories)) { if (lastDirectory == null) { - final PsiDirectory subDir = ReadAction.compute(() -> parent.findSubdirectory(directory)); + final PsiDirectory subDir = ApplicationManager.getApplication().runReadAction( + (Computable) () -> parent.findSubdirectory(directory) + ); if (subDir == null) { lastDirectory = createSubdirectoryOnEdt(parent, directory); @@ -94,8 +98,9 @@ public PsiDirectory findOrCreateSubdirectories( } } else { final PsiDirectory currentDirectory = lastDirectory; - final PsiDirectory subDir = ReadAction.compute(() -> - currentDirectory.findSubdirectory(directory)); + final PsiDirectory subDir = ApplicationManager.getApplication().runReadAction( + (Computable) () -> currentDirectory.findSubdirectory(directory) + ); if (subDir == null) { final PsiDirectory finalLastDirectory = lastDirectory; diff --git a/src/main/java/com/magento/idea/magento2plugin/highlighting/MagentoInitJsonErrorFilter.java b/src/main/java/com/magento/idea/magento2plugin/highlighting/MagentoInitJsonErrorFilter.java index 9038189eb..363ab47d8 100644 --- a/src/main/java/com/magento/idea/magento2plugin/highlighting/MagentoInitJsonErrorFilter.java +++ b/src/main/java/com/magento/idea/magento2plugin/highlighting/MagentoInitJsonErrorFilter.java @@ -41,8 +41,11 @@ public boolean shouldHighlightErrorElement(final @NotNull PsiErrorElement elemen } @Override - public boolean accept(final @NotNull HighlightInfo highlightInfo, final PsiFile file) { - if (!highlightInfo.isFromInjection() || !HighlightSeverity.ERROR.equals(highlightInfo.getSeverity())) { + public boolean accept(final @NotNull HighlightInfo highlightInfo, final @Nullable PsiFile file) { + if (!HighlightSeverity.ERROR.equals(highlightInfo.getSeverity())) { + return true; + } + if (file == null) { return true; } final PsiLanguageInjectionHost host = findInjectedJsonHost(file, highlightInfo.getStartOffset()); diff --git a/src/main/java/com/magento/idea/magento2plugin/indexes/ModuleIndex.java b/src/main/java/com/magento/idea/magento2plugin/indexes/ModuleIndex.java index 24b6a9b8d..5c9b67bc5 100644 --- a/src/main/java/com/magento/idea/magento2plugin/indexes/ModuleIndex.java +++ b/src/main/java/com/magento/idea/magento2plugin/indexes/ModuleIndex.java @@ -5,7 +5,8 @@ package com.magento.idea.magento2plugin.indexes; -import com.intellij.openapi.application.ReadAction; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.util.Computable; import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectRootManager; @@ -81,7 +82,7 @@ private List getNames( final ID indexKey, final boolean withinProject ) { - return ReadAction.compute(() -> { + return ApplicationManager.getApplication().runReadAction((Computable>) () -> { final Set names = new LinkedHashSet<>(); final FileBasedIndex index = FileBasedIndex.getInstance(); final Collection allNames = index.getAllKeys(indexKey, project); @@ -122,7 +123,7 @@ private List getNames( * @return PsiDirectory */ public @Nullable PsiDirectory getModuleDirectoryByModuleName(final String moduleName) { - return ReadAction.compute(() -> { + return ApplicationManager.getApplication().runReadAction((Computable) () -> { final VirtualFile moduleDirectory = getModuleDirectoryVirtualFileByModuleName(moduleName); if (moduleDirectory == null) { return null; @@ -140,7 +141,7 @@ private List getNames( * @return VirtualFile */ public @Nullable VirtualFile getModuleDirectoryVirtualFileByModuleName(final String moduleName) { - return ReadAction.compute(() -> { + return ApplicationManager.getApplication().runReadAction((Computable) () -> { if (moduleName == null) { return null; } diff --git a/src/main/java/com/magento/idea/magento2plugin/linemarker/js/JsMixinLineMarkerProvider.java b/src/main/java/com/magento/idea/magento2plugin/linemarker/js/JsMixinLineMarkerProvider.java index f80ca285b..fd8275a38 100644 --- a/src/main/java/com/magento/idea/magento2plugin/linemarker/js/JsMixinLineMarkerProvider.java +++ b/src/main/java/com/magento/idea/magento2plugin/linemarker/js/JsMixinLineMarkerProvider.java @@ -8,7 +8,6 @@ import com.intellij.codeInsight.daemon.LineMarkerInfo; import com.intellij.codeInsight.daemon.LineMarkerProvider; import com.intellij.icons.AllIcons; -import com.intellij.lang.ASTNode; import com.intellij.lang.javascript.JavaScriptFileType; import com.intellij.lang.javascript.psi.JSExpression; import com.intellij.lang.javascript.psi.JSFile; @@ -497,10 +496,10 @@ private int getFirstCodeOffset(final @NotNull String text) { if (!isFunctionProperty(property)) { continue; } - final ASTNode nameIdentifier = property.findNameIdentifier(); + final PsiElement nameIdentifier = property.getNameIdentifier(); if (nameIdentifier != null) { - result.add(new MixinOverride(property.getName(), nameIdentifier.getPsi())); + result.add(new MixinOverride(property.getName(), nameIdentifier)); } } } @@ -532,10 +531,10 @@ private int getFirstCodeOffset(final @NotNull String text) { if (!isFunctionProperty(property)) { continue; } - final ASTNode nameIdentifier = property.findNameIdentifier(); + final PsiElement nameIdentifier = property.getNameIdentifier(); if (nameIdentifier != null) { - result.add(nameIdentifier.getPsi()); + result.add(nameIdentifier); } } @@ -556,10 +555,10 @@ private int getFirstCodeOffset(final @NotNull String text) { if (!isFunctionProperty(property)) { continue; } - final ASTNode nameIdentifier = property.findNameIdentifier(); + final PsiElement nameIdentifier = property.getNameIdentifier(); if (nameIdentifier != null) { - result.add(nameIdentifier.getPsi()); + result.add(nameIdentifier); } } diff --git a/src/main/java/com/magento/idea/magento2plugin/linemarker/js/KnockoutTemplateLineMarkerProvider.java b/src/main/java/com/magento/idea/magento2plugin/linemarker/js/KnockoutTemplateLineMarkerProvider.java index 6a38a5d54..d0ee750a0 100644 --- a/src/main/java/com/magento/idea/magento2plugin/linemarker/js/KnockoutTemplateLineMarkerProvider.java +++ b/src/main/java/com/magento/idea/magento2plugin/linemarker/js/KnockoutTemplateLineMarkerProvider.java @@ -10,7 +10,6 @@ import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder; import com.intellij.ide.highlighter.HtmlFileType; import com.intellij.ide.highlighter.XmlFileType; -import com.intellij.lang.ASTNode; import com.intellij.lang.javascript.JavaScriptFileType; import com.intellij.lang.javascript.psi.JSFile; import com.intellij.lang.javascript.psi.JSProperty; @@ -160,8 +159,6 @@ private void addXmlComponentLineMarker( .create(JavaScriptFileType.INSTANCE.getIcon()) .setTargets(preparedTargets) .setNamer(LineMarkerTargetPresentationUtil::getPresentableTargetName) - .setTargetRenderer(LineMarkerTargetPresentationUtil.TARGET_RENDERER) - .setCellRenderer(LineMarkerTargetPresentationUtil.CELL_RENDERER) .setTooltipText(MAGENTO_UI_COMPONENT_TOOLTIP_TEXT) .createLineMarkerInfo( anchor, @@ -197,8 +194,6 @@ private void addXmlTemplateLineMarker( .create(HtmlFileType.INSTANCE.getIcon()) .setTargets(preparedTargets) .setNamer(LineMarkerTargetPresentationUtil::getPresentableTargetName) - .setTargetRenderer(LineMarkerTargetPresentationUtil.TARGET_RENDERER) - .setCellRenderer(LineMarkerTargetPresentationUtil.CELL_RENDERER) .setTooltipText(MAGENTO_TEMPLATE_TOOLTIP_TEXT) .createLineMarkerInfo( anchor, @@ -244,8 +239,6 @@ private void addLayoutTemplateLineMarker( .create(HtmlFileType.INSTANCE.getIcon()) .setTargets(LineMarkerTargetPresentationUtil.prepareTargets(targets)) .setNamer(LineMarkerTargetPresentationUtil::getPresentableTargetName) - .setTargetRenderer(LineMarkerTargetPresentationUtil.TARGET_RENDERER) - .setCellRenderer(LineMarkerTargetPresentationUtil.CELL_RENDERER) .setTooltipText(TEMPLATE_TOOLTIP_TEXT) .createLineMarkerInfo(anchor)); } @@ -276,8 +269,6 @@ private void addLayoutDisplayAreaLineMarker( .create(HtmlFileType.INSTANCE.getIcon()) .setTargets(preparedTargets) .setNamer(LineMarkerTargetPresentationUtil::getPresentableTargetName) - .setTargetRenderer(LineMarkerTargetPresentationUtil.TARGET_RENDERER) - .setCellRenderer(LineMarkerTargetPresentationUtil.CELL_RENDERER) .setTooltipText(REGION_TEMPLATE_TOOLTIP_TEXT) .createLineMarkerInfo( anchor, @@ -333,8 +324,6 @@ private void addGetRegionLineMarkers( .create(HtmlFileType.INSTANCE.getIcon()) .setTargets(preparedTargets) .setNamer(LineMarkerTargetPresentationUtil::getPresentableTargetName) - .setTargetRenderer(LineMarkerTargetPresentationUtil.TARGET_RENDERER) - .setCellRenderer(LineMarkerTargetPresentationUtil.CELL_RENDERER) .setTooltipText(REGION_DISPLAY_AREA_TOOLTIP_TEXT) .createLineMarkerInfo( anchor, @@ -375,8 +364,6 @@ private boolean addLegacyGetRegionLineMarker( .create(HtmlFileType.INSTANCE.getIcon()) .setTargets(preparedChildTemplates) .setNamer(LineMarkerTargetPresentationUtil::getPresentableTargetName) - .setTargetRenderer(LineMarkerTargetPresentationUtil.TARGET_RENDERER) - .setCellRenderer(LineMarkerTargetPresentationUtil.CELL_RENDERER) .setTooltipText(REGION_CHILD_TEMPLATE_TOOLTIP_TEXT) .createLineMarkerInfo( anchor, @@ -393,8 +380,6 @@ private boolean addLegacyGetRegionLineMarker( .create(JavaScriptFileType.INSTANCE.getIcon()) .setTargets(preparedComponentTargets) .setNamer(LineMarkerTargetPresentationUtil::getPresentableTargetName) - .setTargetRenderer(LineMarkerTargetPresentationUtil.TARGET_RENDERER) - .setCellRenderer(LineMarkerTargetPresentationUtil.CELL_RENDERER) .setTooltipText(REGION_COMPONENT_TOOLTIP_TEXT) .createLineMarkerInfo( anchor, @@ -425,16 +410,14 @@ private void addDisplayAreaLineMarkers( if (targets.isEmpty()) { continue; } - final ASTNode nameIdentifier = property.findNameIdentifier(); - final PsiElement anchor = nameIdentifier == null ? property : nameIdentifier.getPsi(); + final PsiElement nameIdentifier = property.getNameIdentifier(); + final PsiElement anchor = nameIdentifier == null ? property : nameIdentifier; final List preparedTargets = LineMarkerTargetPresentationUtil.prepareTargets(targets); collection.add(NavigationGutterIconBuilder .create(HtmlFileType.INSTANCE.getIcon()) .setTargets(preparedTargets) .setNamer(LineMarkerTargetPresentationUtil::getPresentableTargetName) - .setTargetRenderer(LineMarkerTargetPresentationUtil.TARGET_RENDERER) - .setCellRenderer(LineMarkerTargetPresentationUtil.CELL_RENDERER) .setTooltipText(REGION_TEMPLATE_TOOLTIP_TEXT) .createLineMarkerInfo( anchor, @@ -495,8 +478,6 @@ private void addDisplayAreaLineMarkers( : XmlFileType.INSTANCE.getIcon()) .setTargets(preparedTargets) .setNamer(LineMarkerTargetPresentationUtil::getPresentableTargetName) - .setTargetRenderer(LineMarkerTargetPresentationUtil.TARGET_RENDERER) - .setCellRenderer(LineMarkerTargetPresentationUtil.CELL_RENDERER) .setTooltipText(tooltip) .createLineMarkerInfo( anchor, @@ -525,8 +506,6 @@ private void addDisplayAreaLineMarkers( : XmlFileType.INSTANCE.getIcon()) .setTargets(preparedTargets) .setNamer(LineMarkerTargetPresentationUtil::getPresentableTargetName) - .setTargetRenderer(LineMarkerTargetPresentationUtil.TARGET_RENDERER) - .setCellRenderer(LineMarkerTargetPresentationUtil.CELL_RENDERER) .setTooltipText(tooltip) .createLineMarkerInfo( anchor, diff --git a/src/main/java/com/magento/idea/magento2plugin/linemarker/js/LineMarkerTargetPresentationUtil.java b/src/main/java/com/magento/idea/magento2plugin/linemarker/js/LineMarkerTargetPresentationUtil.java index 81f414b07..2ecceb83e 100644 --- a/src/main/java/com/magento/idea/magento2plugin/linemarker/js/LineMarkerTargetPresentationUtil.java +++ b/src/main/java/com/magento/idea/magento2plugin/linemarker/js/LineMarkerTargetPresentationUtil.java @@ -8,10 +8,8 @@ import com.intellij.codeInsight.daemon.GutterIconNavigationHandler; import com.intellij.codeInsight.navigation.NavigationUtil; import com.intellij.codeInsight.navigation.PsiTargetNavigator; -import com.intellij.codeInsight.navigation.impl.PsiTargetPresentationRenderer; -import com.intellij.ide.util.PsiElementListCellRenderer; -import com.intellij.openapi.util.Iconable; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Iconable; import com.intellij.openapi.ui.popup.JBPopup; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.platform.backend.presentation.TargetPresentation; @@ -23,49 +21,10 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.function.Supplier; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public final class LineMarkerTargetPresentationUtil { - static final Supplier> TARGET_RENDERER = - () -> new PsiTargetPresentationRenderer<>() { - @Override - public String getElementText(final PsiElement element) { - return getPresentableTargetName(element); - } - - @Override - public String getContainerText(final PsiElement element) { - return null; - } - }; - - static final PsiElementListCellRenderer CELL_RENDERER = new PsiElementListCellRenderer<>() { - @Override - public String getElementText(final PsiElement element) { - return getPresentableTargetName(element); - } - - @Override - protected String getContainerText(final PsiElement element, final String name) { - return null; - } - - @Override - protected int getIconFlags() { - return Iconable.ICON_FLAG_VISIBILITY; - } - - @Override - public Comparator getComparator() { - return Comparator - .comparingInt(LineMarkerTargetPresentationUtil::getPriority) - .thenComparing(LineMarkerTargetPresentationUtil::getPresentableTargetName) - .thenComparing(LineMarkerTargetPresentationUtil::getStableKey); - } - }; - private LineMarkerTargetPresentationUtil() { } diff --git a/src/main/java/com/magento/idea/magento2plugin/project/SettingsForm.java b/src/main/java/com/magento/idea/magento2plugin/project/SettingsForm.java index 8d2705588..166698c85 100644 --- a/src/main/java/com/magento/idea/magento2plugin/project/SettingsForm.java +++ b/src/main/java/com/magento/idea/magento2plugin/project/SettingsForm.java @@ -150,7 +150,12 @@ private void reindexFromForm() { NotificationType.INFORMATION ); } catch (final ConfigurationException exception) { - Messages.showErrorDialog(project, exception.getMessage(), "Magento Reindex"); + final String message = exception.getLocalizedMessage(); + Messages.showErrorDialog( + project, + message == null ? "Invalid Magento settings." : message, + "Magento Reindex" + ); } } @@ -174,7 +179,7 @@ private void installMagentoSkill(final Skill skill) { ); } catch (final IOException | IllegalStateException exception) { final String errorMessage = StringUtil.notNullize( - exception.getMessage(), + exception.getLocalizedMessage(), exception.getClass().getSimpleName() ); MagentoNotificationUtil.notifyGlobally( diff --git a/src/main/java/com/magento/idea/magento2plugin/project/indexing/MagentoAdditionalLibraryRootsProvider.java b/src/main/java/com/magento/idea/magento2plugin/project/indexing/MagentoAdditionalLibraryRootsProvider.java index c40a53d0f..ac47ed367 100644 --- a/src/main/java/com/magento/idea/magento2plugin/project/indexing/MagentoAdditionalLibraryRootsProvider.java +++ b/src/main/java/com/magento/idea/magento2plugin/project/indexing/MagentoAdditionalLibraryRootsProvider.java @@ -7,6 +7,7 @@ import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.RootsChangeRescanningInfo; import com.intellij.openapi.roots.AdditionalLibraryRootsProvider; import com.intellij.openapi.roots.SyntheticLibrary; import com.intellij.openapi.roots.ex.ProjectRootManagerEx; @@ -49,11 +50,15 @@ public class MagentoAdditionalLibraryRootsProvider extends AdditionalLibraryRoot } public static void refreshRoots(final @NotNull Project project) { - WriteAction.run(() -> ProjectRootManagerEx.getInstanceEx(project).makeRootsChange( - () -> { }, - false, - true - )); + WriteAction.run(() -> { + try (AutoCloseable ignored = ProjectRootManagerEx + .getInstanceEx(project) + .withRootsChange(RootsChangeRescanningInfo.TOTAL_RESCAN)) { + // The roots are provided from settings; closing this scope publishes the refresh. + } catch (final Exception exception) { + throw new IllegalStateException("Unable to refresh Magento index roots.", exception); + } + }); } private @NotNull Collection getMagentoIndexRoots(final @NotNull Project project) { diff --git a/src/main/java/com/magento/idea/magento2plugin/util/GetPhpClassByFQN.java b/src/main/java/com/magento/idea/magento2plugin/util/GetPhpClassByFQN.java index a8224f133..707f138bc 100644 --- a/src/main/java/com/magento/idea/magento2plugin/util/GetPhpClassByFQN.java +++ b/src/main/java/com/magento/idea/magento2plugin/util/GetPhpClassByFQN.java @@ -4,8 +4,9 @@ */ package com.magento.idea.magento2plugin.util; -import com.intellij.openapi.application.ReadAction; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Computable; import com.jetbrains.php.PhpIndex; import com.jetbrains.php.lang.psi.elements.PhpClass; @@ -24,7 +25,7 @@ public static GetPhpClassByFQN getInstance(Project project) { } public PhpClass execute(String targetClassName) { - return ReadAction.compute(() -> { + return ApplicationManager.getApplication().runReadAction((Computable) () -> { final PhpIndex phpIndex = PhpIndex.getInstance(project); final Collection interfaces = phpIndex.getInterfacesByFQN(targetClassName); if (!interfaces.isEmpty()) { diff --git a/src/main/java/com/magento/idea/magento2plugin/util/magento/MagentoVersionUtil.java b/src/main/java/com/magento/idea/magento2plugin/util/magento/MagentoVersionUtil.java index c8928ac52..107a4a4a5 100644 --- a/src/main/java/com/magento/idea/magento2plugin/util/magento/MagentoVersionUtil.java +++ b/src/main/java/com/magento/idea/magento2plugin/util/magento/MagentoVersionUtil.java @@ -7,8 +7,9 @@ import com.intellij.json.psi.JsonFile; import com.intellij.json.psi.JsonObject; -import com.intellij.openapi.application.ReadAction; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; @@ -53,7 +54,7 @@ public static Pair getVersionData( final Project project, final String magentoPath ) { - return ReadAction.compute(() -> { + return ApplicationManager.getApplication().runReadAction((Computable>) () -> { final VirtualFile file = LocalFileSystem.getInstance().findFileByPath( getFilePath(magentoPath) ); diff --git a/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoCliToolQueries.kt b/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoCliToolQueries.kt index e56e19183..b6484d359 100644 --- a/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoCliToolQueries.kt +++ b/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoCliToolQueries.kt @@ -381,7 +381,7 @@ internal object MagentoCliToolQueries { } } - val projectRootName = (project.baseDir ?: project.projectFile?.parent)?.name + val projectRootName = project.projectFile?.parent?.name val configuredSegments = normalizedConfiguredPath .removePrefix("/") .removePrefix("./") @@ -469,7 +469,7 @@ internal object MagentoCliToolQueries { } private fun projectRootPath(project: Project): Path? { - val projectBasePath = project.basePath ?: project.baseDir?.path ?: return null + val projectBasePath = project.basePath ?: project.projectFile?.parent?.path ?: return null return Path.of(projectBasePath).toAbsolutePath().normalize() } diff --git a/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoMcpCreateSupport.kt b/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoMcpCreateSupport.kt index c7cf44a1e..5b7fb3228 100644 --- a/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoMcpCreateSupport.kt +++ b/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoMcpCreateSupport.kt @@ -6,7 +6,6 @@ package com.magento.idea.magento2plugin.mcp import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.application.ReadAction import com.intellij.openapi.command.WriteCommandAction import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.LocalFileSystem @@ -25,11 +24,7 @@ internal object MagentoMcpCreateSupport { private val DIRECTORY_PATTERN = Regex(RegExUtil.DIRECTORY) fun runReadAction(action: () -> T): T { - return if (ApplicationManager.getApplication().isDispatchThread) { - ApplicationManager.getApplication().runReadAction { action() } - } else { - ReadAction.computeCancellable(action) - } + return ApplicationManager.getApplication().runReadAction { action() } } fun requireEditableModule( diff --git a/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoMcpToolsetSupport.kt b/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoMcpToolsetSupport.kt index 1625f9905..1b2d940ab 100644 --- a/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoMcpToolsetSupport.kt +++ b/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoMcpToolsetSupport.kt @@ -6,7 +6,6 @@ package com.magento.idea.magento2plugin.mcp import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.application.ReadAction import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.Project import com.magento.idea.magento2plugin.project.Settings @@ -48,7 +47,7 @@ internal object MagentoMcpToolsetSupport { ): String = withProjectAction(validateProject, requireSmartMode) { project -> try { MagentoMcpReadActionSupport.retryOnCancellation { - ReadAction.computeCancellable { + ApplicationManager.getApplication().runReadAction { query(project) } } diff --git a/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoModuleCommands.kt b/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoModuleCommands.kt index e12ff2d84..950dbb372 100644 --- a/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoModuleCommands.kt +++ b/src/main/kotlin/com/magento/idea/magento2plugin/mcp/MagentoModuleCommands.kt @@ -5,7 +5,6 @@ package com.magento.idea.magento2plugin.mcp -import com.intellij.openapi.application.ReadAction import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.WriteAction import com.intellij.openapi.project.Project @@ -75,7 +74,7 @@ internal object MagentoModuleCommands { val moduleFullName = "${normalizedPackage}_${normalizedModule}" - val existingModuleDirectory = ReadAction.compute { + val existingModuleDirectory = ApplicationManager.getApplication().runReadAction { magentoRootDirectory.findSubdirectory("app") ?.findSubdirectory("code") ?.findSubdirectory(normalizedPackage) @@ -233,7 +232,7 @@ internal object MagentoModuleCommands { name: String, directoryGenerator: DirectoryGenerator ): DirectoryCreationResult { - val existing = ReadAction.compute { + val existing = ApplicationManager.getApplication().runReadAction { parent.findSubdirectory(name) } if (existing != null) { @@ -274,7 +273,7 @@ internal object MagentoModuleCommands { } private fun resolveMagentoRootDirectory(project: Project, configuredRoot: String): PsiDirectory? { - return ReadAction.compute { + return ApplicationManager.getApplication().runReadAction { val fileSystem = LocalFileSystem.getInstance() val normalizedConfiguredRoot = FileUtil.toSystemIndependentName(configuredRoot.trim()) @@ -282,7 +281,7 @@ internal object MagentoModuleCommands { val absoluteVirtualFile = fileSystem.refreshAndFindFileByPath(normalizedConfiguredRoot) ?: fileSystem.findFileByPath(normalizedConfiguredRoot) if (absoluteVirtualFile != null && absoluteVirtualFile.isDirectory) { - return@compute PsiManager.getInstance(project).findDirectory(absoluteVirtualFile) + return@runReadAction PsiManager.getInstance(project).findDirectory(absoluteVirtualFile) } } @@ -296,14 +295,14 @@ internal object MagentoModuleCommands { val resolvedRoot = moduleDirectory.parentDirectory(levels = 4) ?: continue val resolvedRootPath = resolvedRoot.virtualFile.path.replace('\\', '/') if (modulePath.startsWith(configuredPrefix)) { - return@compute resolvedRoot + return@runReadAction resolvedRoot } if (!isAbsolutePath(normalizedConfiguredRoot) && configuredRootTrimmed.isNotEmpty() && resolvedRootPath.endsWith("/$configuredRootTrimmed") ) { - return@compute resolvedRoot + return@runReadAction resolvedRoot } } @@ -319,7 +318,7 @@ internal object MagentoModuleCommands { .mapNotNull { path -> fileSystem.refreshAndFindFileByPath(path) ?: fileSystem.findFileByPath(path) } .firstOrNull { it.isDirectory } if (virtualFile != null) { - return@compute PsiManager.getInstance(project).findDirectory(virtualFile) + return@runReadAction PsiManager.getInstance(project).findDirectory(virtualFile) } null