From 9d94b3b97cef00dc669974340321dd16233fde97 Mon Sep 17 00:00:00 2001 From: bohdan-harniuk Date: Mon, 14 Mar 2022 12:49:56 +0200 Subject: [PATCH 01/11] 613: Initialize mainline branch --- .github/workflows/gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 94244ea64..d62a7384f 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -5,7 +5,7 @@ name: Run automated tests on: pull_request: - branches: [ master, 4.3.0-develop ] + branches: [ master, '*-develop', 'mainline*' ] jobs: build-linux: From b71ea51f06bf868ced61f843a043b37c2b835ee6 Mon Sep 17 00:00:00 2001 From: Alexandr Tereshkov Date: Wed, 16 Mar 2022 19:12:41 +0300 Subject: [PATCH 02/11] 613-diff-overridden-template --- resources/META-INF/plugin.xml | 3 + .../comparator/CompareTemplateAction.java | 149 ++++++++++++++++++ .../idea/magento2plugin/util/RegExUtil.java | 5 + 3 files changed, 157 insertions(+) create mode 100644 src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml index b0cc5b59f..4d03e93b0 100644 --- a/resources/META-INF/plugin.xml +++ b/resources/META-INF/plugin.xml @@ -130,6 +130,9 @@ + + + Date: Wed, 16 Mar 2022 19:26:39 +0300 Subject: [PATCH 03/11] 613-diff-overridden-template --- .github/workflows/gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index d62a7384f..94244ea64 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -5,7 +5,7 @@ name: Run automated tests on: pull_request: - branches: [ master, '*-develop', 'mainline*' ] + branches: [ master, 4.3.0-develop ] jobs: build-linux: From 756c8f409d1aca9299de9e1294340899123f5135 Mon Sep 17 00:00:00 2001 From: Alexandr Tereshkov Date: Thu, 17 Mar 2022 08:14:07 +0300 Subject: [PATCH 04/11] code style --- .../comparator/CompareTemplateAction.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java b/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java index eabacf1c5..d020c0bcf 100644 --- a/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java +++ b/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java @@ -1,3 +1,8 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + package com.magento.idea.magento2plugin.actions.comparator; import com.intellij.diff.DiffContentFactory; @@ -25,6 +30,7 @@ import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; + import java.nio.file.Path; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -72,7 +78,8 @@ public void update(final @NotNull AnActionEvent event) { final String fullPath = selectedFile.getPath(); final String area = getArea(fullPath); final String originalModuleName = getOriginalModuleName(project, psiFile); - final PsiDirectory originalModuleDirectory = new ModuleIndex(project).getModuleDirectoryByModuleName(originalModuleName); + final PsiDirectory originalModuleDirectory = + new ModuleIndex(project).getModuleDirectoryByModuleName(originalModuleName); if (originalModuleDirectory == null || area == null @@ -123,9 +130,11 @@ private String getOriginalModuleName(Project project, PsiFile psiFile) { } @NotNull - private MutableDiffRequestChain createMutableChainFromFiles(@Nullable Project project, - @NotNull VirtualFile file1, - @NotNull VirtualFile file2) { + private MutableDiffRequestChain createMutableChainFromFiles( + @Nullable Project project, + @NotNull VirtualFile file1, + @NotNull VirtualFile file2 + ) { DiffContentFactory contentFactory = DiffContentFactory.getInstance(); DiffRequestFactory requestFactory = DiffRequestFactory.getInstance(); From 2a675e4d7e8618fbd2a9ea075223074a3d5d2c9f Mon Sep 17 00:00:00 2001 From: Alexandr Tereshkov Date: Thu, 17 Mar 2022 08:34:53 +0300 Subject: [PATCH 05/11] code style --- .../actions/comparator/CompareTemplateAction.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java b/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java index d020c0bcf..aeadbd771 100644 --- a/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java +++ b/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java @@ -28,12 +28,11 @@ import com.magento.idea.magento2plugin.util.RegExUtil; import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil; import org.apache.commons.lang3.StringUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - import java.nio.file.Path; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class CompareTemplateAction extends AnAction { From 7858e9a68c4a3738dbc5ea2434ac905043c9b353 Mon Sep 17 00:00:00 2001 From: Alexandr Tereshkov Date: Thu, 17 Mar 2022 08:38:49 +0300 Subject: [PATCH 06/11] code style --- .../actions/comparator/CompareTemplateAction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java b/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java index aeadbd771..ffb836c5e 100644 --- a/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java +++ b/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java @@ -27,10 +27,10 @@ import com.magento.idea.magento2plugin.project.Settings; import com.magento.idea.magento2plugin.util.RegExUtil; import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil; -import org.apache.commons.lang3.StringUtils; import java.nio.file.Path; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; From ecc5da48c937db9fefa0a4c22bf0262751987128 Mon Sep 17 00:00:00 2001 From: Alexandr Tereshkov Date: Thu, 17 Mar 2022 08:52:29 +0300 Subject: [PATCH 07/11] code style --- .../comparator/CompareTemplateAction.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java b/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java index ffb836c5e..6508410ad 100644 --- a/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java +++ b/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java @@ -65,7 +65,7 @@ public void update(final @NotNull AnActionEvent event) { return; } final PsiFile psiFile = event.getData(PlatformDataKeys.PSI_FILE); - selectedFile = psiFile != null ? psiFile.getVirtualFile() : null; + selectedFile = psiFile != null ? psiFile.getVirtualFile() : null;//NOPMD if (selectedFile != null && !PHTML_EXTENSION.equals(selectedFile.getExtension()) @@ -103,15 +103,15 @@ public void update(final @NotNull AnActionEvent event) { } @Override - public void actionPerformed(@NotNull AnActionEvent e) { - Project project = e.getProject(); - DiffRequestChain chain = createMutableChainFromFiles(project, selectedFile, originalFile); + public void actionPerformed(final @NotNull AnActionEvent event) { + final Project project = event.getProject(); + final DiffRequestChain chain = createMutableChainFromFiles(project, selectedFile, originalFile); DiffManager.getInstance().showDiff(project, chain, DiffDialogHints.DEFAULT); } @Nullable - private String getArea(String fullPath) { + private String getArea(final String fullPath) { final Pattern pattern = Pattern.compile(RegExUtil.ViewArea.AREA); final Matcher matcher = pattern.matcher(fullPath); String areaName = null; @@ -122,7 +122,7 @@ private String getArea(String fullPath) { return areaName; } - private String getOriginalModuleName(Project project, PsiFile psiFile) { + private String getOriginalModuleName(final Project project, final PsiFile psiFile) { final PsiDirectory directory = psiFile.getContainingDirectory(); return GetModuleNameByDirectoryUtil.execute(directory, project); @@ -130,17 +130,17 @@ private String getOriginalModuleName(Project project, PsiFile psiFile) { @NotNull private MutableDiffRequestChain createMutableChainFromFiles( - @Nullable Project project, - @NotNull VirtualFile file1, - @NotNull VirtualFile file2 + final @Nullable Project project, + final @NotNull VirtualFile file1, + final @NotNull VirtualFile file2 ) { - DiffContentFactory contentFactory = DiffContentFactory.getInstance(); - DiffRequestFactory requestFactory = DiffRequestFactory.getInstance(); + final DiffContentFactory contentFactory = DiffContentFactory.getInstance(); + final DiffRequestFactory requestFactory = DiffRequestFactory.getInstance(); - DiffContent content1 = contentFactory.create(project, file1); - DiffContent content2 = contentFactory.create(project, file2); + final DiffContent content1 = contentFactory.create(project, file1); + final DiffContent content2 = contentFactory.create(project, file2); - MutableDiffRequestChain chain = BlankDiffWindowUtil.createBlankDiffRequestChain( + final MutableDiffRequestChain chain = BlankDiffWindowUtil.createBlankDiffRequestChain( (DocumentContent)content1, (DocumentContent)content2, null From bf340149c1062a64f2f8624bd11f9cb2911c022d Mon Sep 17 00:00:00 2001 From: Alexandr Tereshkov Date: Thu, 17 Mar 2022 08:56:10 +0300 Subject: [PATCH 08/11] code style --- .../actions/comparator/CompareTemplateAction.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java b/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java index 6508410ad..e09e024a8 100644 --- a/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java +++ b/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java @@ -105,7 +105,8 @@ public void update(final @NotNull AnActionEvent event) { @Override public void actionPerformed(final @NotNull AnActionEvent event) { final Project project = event.getProject(); - final DiffRequestChain chain = createMutableChainFromFiles(project, selectedFile, originalFile); + final DiffRequestChain chain = + createMutableChainFromFiles(project, selectedFile, originalFile); DiffManager.getInstance().showDiff(project, chain, DiffDialogHints.DEFAULT); } From be1d5134ded8ee396dbd01bbab44062d4cfa4095 Mon Sep 17 00:00:00 2001 From: bohdan-harniuk Date: Thu, 17 Mar 2022 16:09:00 +0200 Subject: [PATCH 09/11] 613: Bug fixing, code refactoring --- .../comparator/CompareTemplateAction.java | 120 ++++++++---------- .../comparator/util/DiffRequestChainUtil.java | 55 ++++++++ .../idea/magento2plugin/util/RegExUtil.java | 5 - .../util/magento/area/AreaResolverUtil.java | 59 +++++++++ 4 files changed, 166 insertions(+), 73 deletions(-) create mode 100644 src/com/magento/idea/magento2plugin/actions/comparator/util/DiffRequestChainUtil.java create mode 100644 src/com/magento/idea/magento2plugin/util/magento/area/AreaResolverUtil.java diff --git a/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java b/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java index e09e024a8..bef91821f 100644 --- a/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java +++ b/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java @@ -5,15 +5,9 @@ package com.magento.idea.magento2plugin.actions.comparator; -import com.intellij.diff.DiffContentFactory; import com.intellij.diff.DiffDialogHints; import com.intellij.diff.DiffManager; -import com.intellij.diff.DiffRequestFactory; -import com.intellij.diff.actions.BlankDiffWindowUtil; -import com.intellij.diff.actions.impl.MutableDiffRequestChain; import com.intellij.diff.chains.DiffRequestChain; -import com.intellij.diff.contents.DiffContent; -import com.intellij.diff.contents.DocumentContent; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.PlatformDataKeys; @@ -23,28 +17,28 @@ import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiFile; import com.magento.idea.magento2plugin.MagentoIcons; +import com.magento.idea.magento2plugin.actions.comparator.util.DiffRequestChainUtil; import com.magento.idea.magento2plugin.indexes.ModuleIndex; +import com.magento.idea.magento2plugin.magento.packages.Areas; import com.magento.idea.magento2plugin.project.Settings; -import com.magento.idea.magento2plugin.util.RegExUtil; import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil; +import com.magento.idea.magento2plugin.util.magento.area.AreaResolverUtil; import java.nio.file.Path; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class CompareTemplateAction extends AnAction { - public static final String ACTION_NAME = "Compare Template with Original"; - public static final String ACTION_DESCRIPTION = "Compare Template with Original"; + public static final String ACTION_NAME = "Compare overridden template with the original one"; + public static final String ACTION_DESCRIPTION = "The Magento 2 overridden template comparing"; private static final String PHTML_EXTENSION = "phtml"; protected VirtualFile selectedFile; protected VirtualFile originalFile; /** - * Inject constructor argument action constructor. + * Compare template action constructor. */ public CompareTemplateAction() { super(ACTION_NAME, ACTION_DESCRIPTION, MagentoIcons.MODULE); @@ -52,107 +46,97 @@ public CompareTemplateAction() { /** * Updates the state of action. + * + * @param event AnActionEvent */ + @SuppressWarnings("PMD.NPathComplexity") @Override public void update(final @NotNull AnActionEvent event) { + setStatus(event, false); final Project project = event.getData(PlatformDataKeys.PROJECT); + if (project == null) { return; } if (!Settings.isEnabled(project)) { - this.setStatus(event, false); return; } final PsiFile psiFile = event.getData(PlatformDataKeys.PSI_FILE); - selectedFile = psiFile != null ? psiFile.getVirtualFile() : null;//NOPMD - if (selectedFile != null - && !PHTML_EXTENSION.equals(selectedFile.getExtension()) - ) { - this.setStatus(event, false); + if (psiFile == null) { + return; + } + final VirtualFile targetFileCandidate = psiFile.getVirtualFile(); + + if (targetFileCandidate == null) { + return; + } + + if (!PHTML_EXTENSION.equals(targetFileCandidate.getExtension())) { return; } + final Areas area = AreaResolverUtil.getForFileInCustomTheme(targetFileCandidate); - final String fullPath = selectedFile.getPath(); - final String area = getArea(fullPath); + if (area == null) { + return; + } final String originalModuleName = getOriginalModuleName(project, psiFile); final PsiDirectory originalModuleDirectory = new ModuleIndex(project).getModuleDirectoryByModuleName(originalModuleName); - if (originalModuleDirectory == null - || area == null - ) { - this.setStatus(event, false); + if (originalModuleDirectory == null) { return; } - final String originalFilePath = originalModuleDirectory.getVirtualFile().getPath() + "/view/" + area - + StringUtils.substringAfter(fullPath, originalModuleName); + + StringUtils.substringAfter(targetFileCandidate.getPath(), originalModuleName); - originalFile = VfsUtil.findFile(Path.of(originalFilePath), false); + final VirtualFile origFileCandidate = VfsUtil.findFile(Path.of(originalFilePath), false); - if (originalFile != null) { - this.setStatus(event, true); + if (origFileCandidate == null) { return; } - - this.setStatus(event, false); + selectedFile = targetFileCandidate; + originalFile = origFileCandidate; + this.setStatus(event, true); } @Override public void actionPerformed(final @NotNull AnActionEvent event) { final Project project = event.getProject(); - final DiffRequestChain chain = - createMutableChainFromFiles(project, selectedFile, originalFile); - - DiffManager.getInstance().showDiff(project, chain, DiffDialogHints.DEFAULT); - } - @Nullable - private String getArea(final String fullPath) { - final Pattern pattern = Pattern.compile(RegExUtil.ViewArea.AREA); - final Matcher matcher = pattern.matcher(fullPath); - String areaName = null; - if (matcher.find()) { - areaName = matcher.group(1); + if (project == null || selectedFile == null || originalFile == null) { + return; } + final DiffRequestChain chain = DiffRequestChainUtil.createMutableChain( + project, + selectedFile, + originalFile + ); - return areaName; + if (chain == null) { + return; + } + DiffManager.getInstance().showDiff( + project, + chain, + DiffDialogHints.DEFAULT + ); } - private String getOriginalModuleName(final Project project, final PsiFile psiFile) { + private @Nullable String getOriginalModuleName( + final @NotNull Project project, + final @NotNull PsiFile psiFile + ) { final PsiDirectory directory = psiFile.getContainingDirectory(); return GetModuleNameByDirectoryUtil.execute(directory, project); } - @NotNull - private MutableDiffRequestChain createMutableChainFromFiles( - final @Nullable Project project, - final @NotNull VirtualFile file1, - final @NotNull VirtualFile file2 - ) { - final DiffContentFactory contentFactory = DiffContentFactory.getInstance(); - final DiffRequestFactory requestFactory = DiffRequestFactory.getInstance(); - - final DiffContent content1 = contentFactory.create(project, file1); - final DiffContent content2 = contentFactory.create(project, file2); - - final MutableDiffRequestChain chain = BlankDiffWindowUtil.createBlankDiffRequestChain( - (DocumentContent)content1, - (DocumentContent)content2, - null - ); - chain.setWindowTitle(requestFactory.getTitle(file1, file2)); - - return chain; - } - private void setStatus(final AnActionEvent event, final boolean status) { event.getPresentation().setVisible(status); event.getPresentation().setEnabled(status); } -} \ No newline at end of file +} diff --git a/src/com/magento/idea/magento2plugin/actions/comparator/util/DiffRequestChainUtil.java b/src/com/magento/idea/magento2plugin/actions/comparator/util/DiffRequestChainUtil.java new file mode 100644 index 000000000..428fcdff0 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/comparator/util/DiffRequestChainUtil.java @@ -0,0 +1,55 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.actions.comparator.util; + +import com.intellij.diff.DiffContentFactory; +import com.intellij.diff.DiffRequestFactory; +import com.intellij.diff.actions.BlankDiffWindowUtil; +import com.intellij.diff.actions.impl.MutableDiffRequestChain; +import com.intellij.diff.contents.DiffContent; +import com.intellij.diff.contents.DocumentContent; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public final class DiffRequestChainUtil { + + private DiffRequestChainUtil() {} + + /** + * Create mutable chain for files comparing. + * + * @param project Project + * @param targetFile VirtualFile + * @param baseFile VirtualFile + * + * @return MutableDiffRequestChain + */ + public static @Nullable MutableDiffRequestChain createMutableChain( + final @NotNull Project project, + final @NotNull VirtualFile targetFile, + final @NotNull VirtualFile baseFile + ) { + final DiffContentFactory contentFactory = DiffContentFactory.getInstance(); + final DiffContent targetContent = contentFactory.create(project, targetFile); + final DiffContent baseContent = contentFactory.create(project, baseFile); + + if (!(targetContent instanceof DocumentContent) + || !(baseContent instanceof DocumentContent)) { + return null; + } + + final MutableDiffRequestChain chain = BlankDiffWindowUtil.createBlankDiffRequestChain( + (DocumentContent) targetContent, + (DocumentContent) baseContent, + null + ); + chain.setWindowTitle(DiffRequestFactory.getInstance().getTitle(targetFile, baseFile)); + + return chain; + } +} diff --git a/src/com/magento/idea/magento2plugin/util/RegExUtil.java b/src/com/magento/idea/magento2plugin/util/RegExUtil.java index 75b2e7331..2603d8b4b 100644 --- a/src/com/magento/idea/magento2plugin/util/RegExUtil.java +++ b/src/com/magento/idea/magento2plugin/util/RegExUtil.java @@ -107,9 +107,4 @@ public static class CustomTheme { public static final String MODULE_NAME = "app\\/design\\/(adminhtml|frontend)\\/\\w*\\/\\w*\\/\\w*"; } - - public static class ViewArea { - public static final String AREA = - "\\/(adminhtml|frontend)\\/"; - } } diff --git a/src/com/magento/idea/magento2plugin/util/magento/area/AreaResolverUtil.java b/src/com/magento/idea/magento2plugin/util/magento/area/AreaResolverUtil.java new file mode 100644 index 000000000..db1bab75e --- /dev/null +++ b/src/com/magento/idea/magento2plugin/util/magento/area/AreaResolverUtil.java @@ -0,0 +1,59 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.util.magento.area; + +import com.intellij.openapi.vfs.VirtualFile; +import com.magento.idea.magento2plugin.magento.packages.Areas; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public final class AreaResolverUtil { + + private static final String CUSTOM_THEME_AREA = "\\/design\\/(adminhtml|frontend)\\/"; + private static final String MODULE_AREA = + "\\/view\\/(adminhtml|frontend|base|crontab|webapi_rest|webapi_soap|graphql)\\/"; + + private AreaResolverUtil() {} + + /** + * Get Magento 2 area for the specified file (file should be in the custom theme). + * + * @param virtualFile VirtualFile + * + * @return Areas or null if file does not belong to the custom (editable) theme. + */ + public static @Nullable Areas getForFileInCustomTheme(final @NotNull VirtualFile virtualFile) { + return getArea(virtualFile.getPath(), CUSTOM_THEME_AREA); + } + + /** + * Get Magento 2 area for the specified file (file should be in the Magento 2 module). + * + * @param virtualFile VirtualFile + * + * @return Areas or null if file does not belong to the Magento 2 module. + */ + public static @Nullable Areas getForFileInModule(final @NotNull VirtualFile virtualFile) { + return getArea(virtualFile.getPath(), MODULE_AREA); + } + + private static @Nullable Areas getArea( + final @NotNull String filePath, + final @NotNull String searchingRegex + ) { + final Pattern pattern = Pattern.compile(searchingRegex); + final Matcher matcher = pattern.matcher(filePath); + String areaName = null; + + if (matcher.find()) { + areaName = matcher.group(1); + } + + return areaName == null ? null : Areas.getAreaByString(areaName); + } +} From 2806588cc4377f5ab66560d84543e806595acdf3 Mon Sep 17 00:00:00 2001 From: bohdan-harniuk Date: Thu, 17 Mar 2022 16:17:22 +0200 Subject: [PATCH 10/11] 613: Bug fixing --- .../magento2plugin/indexes/ModuleIndex.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/indexes/ModuleIndex.java b/src/com/magento/idea/magento2plugin/indexes/ModuleIndex.java index e87fcbb31..072f90e29 100644 --- a/src/com/magento/idea/magento2plugin/indexes/ModuleIndex.java +++ b/src/com/magento/idea/magento2plugin/indexes/ModuleIndex.java @@ -12,6 +12,7 @@ import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiManager; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.util.SlowOperations; import com.intellij.util.indexing.FileBasedIndex; import com.jetbrains.php.lang.PhpFileType; import com.magento.idea.magento2plugin.magento.packages.Package; @@ -116,6 +117,7 @@ private List getNames( * Returns PSI directory of the certain module. * * @param moduleName String + * * @return PsiDirectory */ public @Nullable PsiDirectory getModuleDirectoryByModuleName(final String moduleName) { @@ -124,14 +126,20 @@ private List getNames( } final FileBasedIndex index = FileBasedIndex .getInstance(); - - final Collection files = index.getContainingFiles( - ModuleNameIndex.KEY, - moduleName, - GlobalSearchScope.getScopeRestrictedByFileTypes( - GlobalSearchScope.allScope(project), - PhpFileType.INSTANCE - )); + final Collection files = new ArrayList<>(); + + SlowOperations.allowSlowOperations(() -> { + files.addAll( + index.getContainingFiles( + ModuleNameIndex.KEY, + moduleName, + GlobalSearchScope.getScopeRestrictedByFileTypes( + GlobalSearchScope.allScope(project), + PhpFileType.INSTANCE + ) + ) + ); + }); if (files.isEmpty()) { return null; From 4cee5c5be02ec010db1f5513185dcc23d1dfc006 Mon Sep 17 00:00:00 2001 From: bohdan-harniuk Date: Thu, 17 Mar 2022 17:33:19 +0200 Subject: [PATCH 11/11] 613: Code refactoring --- .../magento2plugin/actions/comparator/CompareTemplateAction.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java b/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java index bef91821f..715cbf101 100644 --- a/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java +++ b/src/com/magento/idea/magento2plugin/actions/comparator/CompareTemplateAction.java @@ -82,6 +82,7 @@ public void update(final @NotNull AnActionEvent event) { return; } final String originalModuleName = getOriginalModuleName(project, psiFile); + final PsiDirectory originalModuleDirectory = new ModuleIndex(project).getModuleDirectoryByModuleName(originalModuleName);