From 5b91b5364418fbb36a7a86e90149676c6a6e389e Mon Sep 17 00:00:00 2001 From: vitaliy Date: Sun, 23 Feb 2025 18:52:53 +0200 Subject: [PATCH 1/4] 1658: Improve null safety and refactor UI interaction handling. Replaced direct string equality checks with `Objects.equals` for better null safety. Refactored popup and navigation logic using `invokeLater` to improve UI interaction handling and avoid potential threading issues. Added PMD suppression for clarity without affecting standards compliance. --- .../OverrideTemplateInThemeGenerator.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java b/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java index 6520bc601..38235853c 100644 --- a/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java +++ b/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java @@ -19,6 +19,7 @@ import com.magento.idea.magento2plugin.util.magento.GetComponentNameByDirectoryUtil; import com.magento.idea.magento2plugin.util.magento.GetMagentoModuleUtil; import java.util.List; +import java.util.Objects; public class OverrideTemplateInThemeGenerator extends OverrideInThemeGenerator { @@ -41,10 +42,10 @@ public void execute(final PsiFile baseFile, final String themeName) { final GetMagentoModuleUtil.MagentoModuleData moduleData = GetMagentoModuleUtil.getByContext(baseFile.getContainingDirectory(), project); - List pathComponents; + List pathComponents; //NOPMD if (moduleData == null) { - if (baseFile.getVirtualFile().getExtension().equals(OverridableFileType.JS.getType())) { + if (Objects.equals(baseFile.getVirtualFile().getExtension(), OverridableFileType.JS.getType())) { pathComponents = getLibPathComponets(baseFile); } else { return; @@ -75,15 +76,19 @@ public void execute(final PsiFile baseFile, final String themeName) { directory = getTargetDirectory(directory, pathComponents); if (directory.findFile(baseFile.getName()) != null) { - JBPopupFactory.getInstance() - .createMessage( - validatorBundle.message("validator.file.alreadyExists", baseFile.getName()) - ) - .showCenteredInCurrentWindow(project); - directory.findFile(baseFile.getName()).navigate(true); + PsiDirectory finalDirectory1 = directory; + ApplicationManager.getApplication().invokeLater(() -> { + JBPopupFactory.getInstance() + .createMessage(validatorBundle.message("validator.file.alreadyExists", baseFile.getName())) + .showCenteredInCurrentWindow(project); + ApplicationManager.getApplication().invokeLater(() -> { + Objects.requireNonNull(finalDirectory1.findFile(baseFile.getName())).navigate(true); + }); + }); return; } + final PsiDirectory finalDirectory = directory; ApplicationManager.getApplication().runWriteAction(() -> { finalDirectory.copyFileFrom(baseFile.getName(), baseFile); From 7dd090148cd8f431966e3524ed76242918828f27 Mon Sep 17 00:00:00 2001 From: vitaliy Date: Sun, 23 Feb 2025 18:56:32 +0200 Subject: [PATCH 2/4] 1658: Fix null handling in file navigation and enhance readability. Improved null safety by ensuring proper checks around file navigation logic. Refactored UI interaction and popup messaging to adhere to threading best practices, enhancing code clarity and preventing race conditions. Updated changelog to reflect the fixed issue. --- CHANGELOG.md | 1 + .../OverrideTemplateInThemeGenerator.java | 14 ++++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e476da1d..36edcc350 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0). - "Copy Path/Reference" does not show the preview value [#2497](https://github.com/magento/magento2-phpstorm-plugin/pull/2497) - Must not start write action from within read action in the other thread [#2498](https://github.com/magento/magento2-phpstorm-plugin/pull/2498) - URN map generation during indexing [#2499](https://github.com/magento/magento2-phpstorm-plugin/pull/2499) +- Cannot invoke "com.intellij.psi.PsiDirectory.getName() [#2500](https://github.com/magento/magento2-phpstorm-plugin/pull/2500) ## 2025.0.0 diff --git a/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java b/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java index 38235853c..f5c38e3e9 100644 --- a/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java +++ b/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java @@ -76,13 +76,19 @@ public void execute(final PsiFile baseFile, final String themeName) { directory = getTargetDirectory(directory, pathComponents); if (directory.findFile(baseFile.getName()) != null) { - PsiDirectory finalDirectory1 = directory; + final PsiDirectory finalDirectory1 = directory; ApplicationManager.getApplication().invokeLater(() -> { JBPopupFactory.getInstance() - .createMessage(validatorBundle.message("validator.file.alreadyExists", baseFile.getName())) - .showCenteredInCurrentWindow(project); + .createMessage( + validatorBundle.message( + "validator.file.alreadyExists", + baseFile.getName() + ) + ).showCenteredInCurrentWindow(project); ApplicationManager.getApplication().invokeLater(() -> { - Objects.requireNonNull(finalDirectory1.findFile(baseFile.getName())).navigate(true); + Objects.requireNonNull( + finalDirectory1.findFile(baseFile.getName()) + ).navigate(true); }); }); return; From d6fa5132c7d98e11bafa097fac728ff4aa333345 Mon Sep 17 00:00:00 2001 From: vitaliy Date: Sun, 23 Feb 2025 18:57:40 +0200 Subject: [PATCH 3/4] 1658: Remove redundant blank lines to improve code readability. Cleaned up unnecessary blank lines in the class to enhance code structure and maintain consistency. This minor adjustment makes the codebase easier to navigate and adhere to styling conventions. --- .../generation/generator/OverrideTemplateInThemeGenerator.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java b/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java index f5c38e3e9..5b6fe707d 100644 --- a/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java +++ b/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java @@ -22,7 +22,6 @@ import java.util.Objects; public class OverrideTemplateInThemeGenerator extends OverrideInThemeGenerator { - /** * OverrideTemplateInThemeGenerator constructor. * @@ -94,7 +93,6 @@ public void execute(final PsiFile baseFile, final String themeName) { return; } - final PsiDirectory finalDirectory = directory; ApplicationManager.getApplication().runWriteAction(() -> { finalDirectory.copyFileFrom(baseFile.getName(), baseFile); From 1282dda73428b022663834913a2d5cc76bc575e3 Mon Sep 17 00:00:00 2001 From: vitaliy Date: Sun, 23 Feb 2025 19:02:25 +0200 Subject: [PATCH 4/4] 1658: Refactor conditional formatting for better readability. Reformatted the conditional statement to improve code structure and align with styling conventions. This change enhances code clarity and maintainability, ensuring consistency in the codebase. --- .../generator/OverrideTemplateInThemeGenerator.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java b/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java index 5b6fe707d..82d41be6d 100644 --- a/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java +++ b/src/main/java/com/magento/idea/magento2plugin/actions/generation/generator/OverrideTemplateInThemeGenerator.java @@ -44,7 +44,10 @@ public void execute(final PsiFile baseFile, final String themeName) { List pathComponents; //NOPMD if (moduleData == null) { - if (Objects.equals(baseFile.getVirtualFile().getExtension(), OverridableFileType.JS.getType())) { + if (Objects.equals( + baseFile.getVirtualFile().getExtension(), + OverridableFileType.JS.getType()) + ) { pathComponents = getLibPathComponets(baseFile); } else { return;