diff --git a/CHANGELOG.md b/CHANGELOG.md index ffffd0d59..8fb02a1e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0). ## 5.1.0 +## 5.0.1 + +### Fixed + +- Throwable: Stub index points to a file without PSI [#1232](https://github.com/magento/magento2-phpstorm-plugin/pull/1232) +- Create an entity - The delete button is displayed in a new entity form [#1268](https://github.com/magento/magento2-phpstorm-plugin/pull/1268) +- Create an entity - The translation function is not call on the buttons label [#1273](https://github.com/magento/magento2-phpstorm-plugin/pull/1273) +- Covered possible NullPointerException in InjectAViewModelDialog.java [#1213](https://github.com/magento/magento2-phpstorm-plugin/pull/1213) +- AWT events are not allowed inside write action [#1271](https://github.com/magento/magento2-phpstorm-plugin/pull/1271) +- MapReduceIndexMappingException: java.lang.NumberFormatException: For input string: "" [#1235](https://github.com/magento/magento2-phpstorm-plugin/pull/1235) + ## 5.0.0 ### Added diff --git a/resources/fileTemplates/internal/Magento Form Button Block Class.php.ft b/resources/fileTemplates/internal/Magento Form Button Block Class.php.ft index 89897c75a..1323c07e7 100644 --- a/resources/fileTemplates/internal/Magento Form Button Block Class.php.ft +++ b/resources/fileTemplates/internal/Magento Form Button Block Class.php.ft @@ -20,8 +20,14 @@ class ${NAME} extends ${GENERIC_BUTTON} implements ${DATA_PROVIDER_TYPE} */ public function getButtonData(): array { +#if (${GET_ID}) + if (!$this->${GET_ID}) { + return []; + } + +#end return $this->wrapButtonSettings( - '${LABEL}', + __('${LABEL}')->getText(), '${CLASS}', ${ON_CLICK}, ${DATA_ATTRS}, diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.java index 19bd8b1ec..c51c5ecca 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.java @@ -141,6 +141,12 @@ protected void onOK() { exit(); return; } + + if (targetBlockTag.getContainingFile() == null + || targetBlockTag.getContainingFile().getParent() == null) { + return; + } + final String moduleName = GetModuleNameByDirectoryUtil.execute( targetBlockTag.getContainingFile().getParent(), project diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleGraphQlResolverClassGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleGraphQlResolverClassGenerator.java index c9e734284..ce7f43848 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleGraphQlResolverClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleGraphQlResolverClassGenerator.java @@ -64,35 +64,38 @@ public ModuleGraphQlResolverClassGenerator( @Override public PsiFile generate(final String actionName) { - final PsiFile[] graphQlFile = {null}; - WriteCommandAction.runWriteCommandAction(project, () -> { - PhpClass graphQlResolverClass = GetPhpClassByFQN.getInstance(project) - .execute(graphQlResolverFileData.getGraphQlResolverClassFqn()); - if (graphQlResolverClass == null) { - graphQlResolverClass = createGraphQlResolverClass(actionName); - } + final PhpClass[] graphQlResolverClass = {GetPhpClassByFQN.getInstance(project) + .execute(graphQlResolverFileData.getGraphQlResolverClassFqn())}; - if (graphQlResolverClass == null) { - final String errorMessage = validatorBundle.message( - "validator.file.cantBeCreated", - "GraphQL Resolver Class" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - commonBundle.message("common.error"), - JOptionPane.ERROR_MESSAGE - ); - - return; - } + if (graphQlResolverClass[0] == null) { + WriteCommandAction.runWriteCommandAction(project, () -> { + graphQlResolverClass[0] = createGraphQlResolverClass(actionName); + }); + } + + if (graphQlResolverClass[0] == null) { + final String errorMessage = validatorBundle.message( + "validator.file.cantBeCreated", + "GraphQL Resolver Class" + ); + JOptionPane.showMessageDialog( + null, + errorMessage, + commonBundle.message("common.error"), + JOptionPane.ERROR_MESSAGE + ); + + return null; + } + final PsiFile[] graphQlFile = {null}; + WriteCommandAction.runWriteCommandAction(project, () -> { final Properties attributes = new Properties(); final String methodTemplate = PhpCodeUtil.getCodeTemplate( GraphQlResolverPhp.GRAPHQL_RESOLVER_TEMPLATE_NAME, attributes, project); - graphQlFile[0] = graphQlResolverClass.getContainingFile(); + graphQlFile[0] = graphQlResolverClass[0].getContainingFile(); final CodeStyleSettings codeStyleSettings = new CodeStyleSettings( (PhpFile) graphQlFile[0] ); @@ -100,13 +103,14 @@ public PsiFile generate(final String actionName) { final PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(project); final Document document = psiDocumentManager.getDocument(graphQlFile[0]); - final int insertPos = getInsertPos(graphQlResolverClass); + final int insertPos = getInsertPos(graphQlResolverClass[0]); document.insertString(insertPos, methodTemplate); final int endPos = insertPos + methodTemplate.length() + 1; CodeStyleManager.getInstance(project).reformatText(graphQlFile[0], insertPos, endPos); psiDocumentManager.commitDocument(document); codeStyleSettings.restore(); }); + return graphQlFile[0]; } @@ -116,7 +120,7 @@ private int getInsertPos(final PhpClass graphQlResolverClass) { graphQlResolverClass, LeafPsiElement.class ); - for (final LeafPsiElement leafPsiElement: leafElements) { + for (final LeafPsiElement leafPsiElement : leafElements) { if (!MagentoPhpClass.CLOSING_TAG.equals(leafPsiElement.getText())) { continue; } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormButtonBlockGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormButtonBlockGenerator.java index 164d0153f..ecec1c5c7 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormButtonBlockGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormButtonBlockGenerator.java @@ -208,6 +208,9 @@ protected void fillAttributes(final @NotNull Properties attributes) { attributes.setProperty("SORT_ORDER", String.valueOf(buttonTypeSettings.getSortOrder())); attributes.setProperty("ENTITY_NAME", Strings.toLowerCase(entityName)); attributes.setProperty("ENTITY_ID", entityIdField); + if (buttonData.getButtonType().equals(FormButtonBlockFile.TYPE_DELETE)) { + attributes.setProperty("GET_ID", entityIdAccessor); + } attributes.setProperty("USES", PhpClassGeneratorUtil.formatUses(uses)); } diff --git a/src/com/magento/idea/magento2plugin/stubs/indexes/PluginIndex.java b/src/com/magento/idea/magento2plugin/stubs/indexes/PluginIndex.java index b4cc23cb2..4cb2837d6 100644 --- a/src/com/magento/idea/magento2plugin/stubs/indexes/PluginIndex.java +++ b/src/com/magento/idea/magento2plugin/stubs/indexes/PluginIndex.java @@ -96,7 +96,7 @@ private Set getPluginsForType(final XmlTag typeNode) { final String pluginType = pluginTag.getAttributeValue(ModuleDiXml.TYPE_ATTR); final String pluginSortOrder = pluginTag.getAttributeValue(ModuleDiXml.SORT_ORDER_ATTR); - if (pluginType != null) { + if (pluginType != null && !pluginType.isEmpty()) { final PluginData pluginData = getPluginDataObject(pluginType, getIntegerOrZeroValue(pluginSortOrder)); results.add(pluginData); } @@ -121,7 +121,7 @@ private PluginData getPluginDataObject( final String pluginType, final Integer sortOrder ) { - return new PluginData(pluginType, sortOrder); + return new PluginData(pluginType, sortOrder); } }; } diff --git a/testData/actions/generation/generator/FormButtonBlockGenerator/generateBackButtonBlock/MyBackButton.php b/testData/actions/generation/generator/FormButtonBlockGenerator/generateBackButtonBlock/MyBackButton.php index ecec3e16a..3f302c820 100644 --- a/testData/actions/generation/generator/FormButtonBlockGenerator/generateBackButtonBlock/MyBackButton.php +++ b/testData/actions/generation/generator/FormButtonBlockGenerator/generateBackButtonBlock/MyBackButton.php @@ -17,7 +17,7 @@ class MyBackButton extends GenericButton implements ButtonProviderInterface public function getButtonData(): array { return $this->wrapButtonSettings( - 'Back To Grid', + __('Back To Grid')->getText(), 'back', sprintf("location.href = '%s';", $this->getUrl('*/*/')), [], diff --git a/testData/actions/generation/generator/FormButtonBlockGenerator/generateCustomButtonBlock/MyCustom.php b/testData/actions/generation/generator/FormButtonBlockGenerator/generateCustomButtonBlock/MyCustom.php index 2e49feeea..bf393de79 100644 --- a/testData/actions/generation/generator/FormButtonBlockGenerator/generateCustomButtonBlock/MyCustom.php +++ b/testData/actions/generation/generator/FormButtonBlockGenerator/generateCustomButtonBlock/MyCustom.php @@ -17,7 +17,7 @@ class MyCustom extends GenericButton implements ButtonProviderInterface public function getButtonData(): array { return $this->wrapButtonSettings( - 'Custom Button', + __('Custom Button')->getText(), 'custom', '', [], diff --git a/testData/actions/generation/generator/FormButtonBlockGenerator/generateDeleteButtonBlock/DeleteBlock.php b/testData/actions/generation/generator/FormButtonBlockGenerator/generateDeleteButtonBlock/DeleteBlock.php index 6c172f538..57218dbac 100644 --- a/testData/actions/generation/generator/FormButtonBlockGenerator/generateDeleteButtonBlock/DeleteBlock.php +++ b/testData/actions/generation/generator/FormButtonBlockGenerator/generateDeleteButtonBlock/DeleteBlock.php @@ -17,8 +17,12 @@ class DeleteBlock extends GenericButton implements ButtonProviderInterface */ public function getButtonData(): array { + if (!$this->getBookId()) { + return []; + } + return $this->wrapButtonSettings( - 'Delete', + __('Delete')->getText(), 'delete', sprintf("deleteConfirm('%s', '%s')", __('Are you sure you want to delete this book?'), diff --git a/testData/actions/generation/generator/FormButtonBlockGenerator/generateSaveButtonBlock/SaveBlock.php b/testData/actions/generation/generator/FormButtonBlockGenerator/generateSaveButtonBlock/SaveBlock.php index dece3a69c..7e3cc17d4 100644 --- a/testData/actions/generation/generator/FormButtonBlockGenerator/generateSaveButtonBlock/SaveBlock.php +++ b/testData/actions/generation/generator/FormButtonBlockGenerator/generateSaveButtonBlock/SaveBlock.php @@ -17,7 +17,7 @@ class SaveBlock extends GenericButton implements ButtonProviderInterface public function getButtonData(): array { return $this->wrapButtonSettings( - 'Save', + __('Save')->getText(), 'save primary', '', [