From 9ab192acf2ded1d41d65261691b243673edb72eb Mon Sep 17 00:00:00 2001 From: bohdan-harniuk Date: Fri, 17 Dec 2021 22:51:06 +0200 Subject: [PATCH 1/3] 760: Code refactoring --- .../util/FileFromTemplateGenerator.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FileFromTemplateGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FileFromTemplateGenerator.java index a7aad6da3..c7be35ea9 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FileFromTemplateGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FileFromTemplateGenerator.java @@ -31,9 +31,10 @@ import org.jetbrains.annotations.Nullable; public class FileFromTemplateGenerator { - private final Project project; - public FileFromTemplateGenerator(final Project project) { + private final @NotNull Project project; + + public FileFromTemplateGenerator(final @NotNull Project project) { this.project = project; } @@ -56,10 +57,12 @@ public PsiFile generate( final Ref fileRef = new Ref<>(null); final Ref exceptionRef = new Ref<>(null); final String filePath = baseDir.getText().concat("/").concat(moduleFile.getFileName()); + CommandProcessor.getInstance().executeCommand(project, () -> { final Runnable run = () -> { try { - PsiFile file = createFile(moduleFile, filePath, baseDir, attributes); + final PsiFile file = createFile(moduleFile, filePath, baseDir, attributes); + if (file != null) { fileRef.set(file); } @@ -89,13 +92,19 @@ private PsiFile createFile( final String fileName = path.get(path.size() - 1); final PsiFile fileTemplate = createFileFromTemplate( getTemplateManager(), - baseDir, moduleFile.getTemplate(), attributes, fileName, moduleFile.getLanguage()); + baseDir, + moduleFile.getTemplate(), + attributes, + fileName, + moduleFile.getLanguage() + ); + if (fileTemplate == null) { throw new IncorrectOperationException("Template not found!"); } else { PsiElement file; - file = baseDir.add(fileTemplate); + if (file instanceof PsiFile) { return (PsiFile)file; } else { @@ -125,6 +134,7 @@ public PsiFile createFileFromTemplate( final @NotNull Language language ) throws IOException { FileTemplate fileTemplate; + try { fileTemplate = templateManager.getInternalTemplate(templateName); } catch (IllegalStateException e) { @@ -140,6 +150,7 @@ public PsiFile createFileFromTemplate( true, false ); + if (fileTemplate.isReformatCode()) { CodeStyleManager.getInstance(project).reformat(file); } From 49afbf2567af38e5df0df4046e92826b53abab27 Mon Sep 17 00:00:00 2001 From: bohdan-harniuk Date: Fri, 17 Dec 2021 23:37:56 +0200 Subject: [PATCH 2/3] 760: Fixed bug --- resources/magento2/validation.properties | 1 + .../generator/PluginClassGenerator.java | 45 ++++++++++++------- .../util/FileFromTemplateGenerator.java | 22 ++++++--- 3 files changed, 47 insertions(+), 21 deletions(-) diff --git a/resources/magento2/validation.properties b/resources/magento2/validation.properties index 2b1a894d8..9e7a095d5 100644 --- a/resources/magento2/validation.properties +++ b/resources/magento2/validation.properties @@ -22,6 +22,7 @@ validator.command.isNotValid=The {0} field does not contain a valid Magento 2 CL validator.module.noSuchModule=No such module {0} validator.file.alreadyExists={0} already exists validator.file.cantBeCreated={0} can't be created +validator.file.cantBeCreatedWithException=The ''{0}'' cannot be created. Original message was: ''{1}'' validator.file.isNotWritable=%s file is binary or has no document associations validator.file.noDocumentAssociations={0} file is binary or has no document associations validator.class.alreadyDeclared={0} already declared in the target module diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java index 2977b6b9c..5930bbc4c 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java @@ -5,6 +5,7 @@ package com.magento.idea.magento2plugin.actions.generation.generator; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.editor.Document; import com.intellij.openapi.project.Project; @@ -88,7 +89,7 @@ public PluginClassGenerator( * * @return PsiFile */ - @SuppressWarnings("PMD.CognitiveComplexity") + @SuppressWarnings({"PMD.CognitiveComplexity", "PMD.ExcessiveMethodLength"}) @Override public PsiFile generate(final String actionName) { final PsiFile[] pluginFile = {null}; @@ -100,15 +101,27 @@ public PsiFile generate(final String actionName) { pluginClass = createPluginClass(actionName); } if (pluginClass == null) { - final String errorMessage = validatorBundle.message( - "validator.file.cantBeCreated", - "Plugin Class" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE + String errorMessage; + + if (fileFromTemplateGenerator.getLastExceptionMessage() == null) { + errorMessage = validatorBundle.message( + "validator.file.cantBeCreated", + "Plugin Class" + ); + } else { + errorMessage = validatorBundle.message( + "validator.file.cantBeCreatedWithException", + "Plugin Class", + fileFromTemplateGenerator.getLastExceptionMessage() + ); + } + ApplicationManager.getApplication().invokeLater( + () -> JOptionPane.showMessageDialog( + null, + errorMessage, + errorTitle, + JOptionPane.ERROR_MESSAGE + ) ); return; @@ -132,11 +145,13 @@ public PsiFile generate(final String actionName) { "validator.file.alreadyExists", "Plugin Class" ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE + ApplicationManager.getApplication().invokeLater( + () -> JOptionPane.showMessageDialog( + null, + errorMessage, + errorTitle, + JOptionPane.ERROR_MESSAGE + ) ); return; diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FileFromTemplateGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FileFromTemplateGenerator.java index c7be35ea9..7a2610632 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FileFromTemplateGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FileFromTemplateGenerator.java @@ -12,7 +12,6 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiDirectory; @@ -33,6 +32,7 @@ public class FileFromTemplateGenerator { private final @NotNull Project project; + private @Nullable String exceptionMessage; public FileFromTemplateGenerator(final @NotNull Project project) { this.project = project; @@ -45,10 +45,10 @@ public FileFromTemplateGenerator(final @NotNull Project project) { * @param attributes Properties * @param baseDir PsiDirectory * @param actionName String + * * @return PsiFile */ - @Nullable - public PsiFile generate( + public @Nullable PsiFile generate( final @NotNull ModuleFileInterface moduleFile, final @NotNull Properties attributes, final @NotNull PsiDirectory baseDir, @@ -56,6 +56,7 @@ public PsiFile generate( ) { final Ref fileRef = new Ref<>(null); final Ref exceptionRef = new Ref<>(null); + exceptionMessage = null; final String filePath = baseDir.getText().concat("/").concat(moduleFile.getFileName()); CommandProcessor.getInstance().executeCommand(project, () -> { @@ -66,8 +67,8 @@ public PsiFile generate( if (file != null) { fileRef.set(file); } - } catch (IncorrectOperationException | IOException var9) { - exceptionRef.set(var9.getMessage()); + } catch (IncorrectOperationException | IOException exception) { + exceptionRef.set(exception.getMessage()); } }; ApplicationManager.getApplication().runWriteAction(run); @@ -76,11 +77,20 @@ public PsiFile generate( if (exceptionRef.isNull()) { return fileRef.get(); } + exceptionMessage = exceptionRef.get(); - Messages.showErrorDialog(exceptionRef.get(), actionName); return null; } + /** + * Get last thrown exception message if exists. + * + * @return String + */ + public @Nullable String getLastExceptionMessage() { + return exceptionMessage; + } + @Nullable private PsiFile createFile( final @NotNull ModuleFileInterface moduleFile, From e5109ad09d3b6b64265b9e0a5cbb0a02504444f7 Mon Sep 17 00:00:00 2001 From: bohdan-harniuk Date: Fri, 17 Dec 2021 23:53:04 +0200 Subject: [PATCH 3/3] 760: Eliminated code style check --- .../generation/generator/util/FileFromTemplateGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FileFromTemplateGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FileFromTemplateGenerator.java index 7a2610632..8aac17670 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FileFromTemplateGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FileFromTemplateGenerator.java @@ -56,7 +56,7 @@ public FileFromTemplateGenerator(final @NotNull Project project) { ) { final Ref fileRef = new Ref<>(null); final Ref exceptionRef = new Ref<>(null); - exceptionMessage = null; + exceptionMessage = null;//NOPMD final String filePath = baseDir.getText().concat("/").concat(moduleFile.getFileName()); CommandProcessor.getInstance().executeCommand(project, () -> {