diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a568a494..0ccfc0055 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). ## 3.2.0 +## 3.1.3 + +### Changed + +- Require restart on plugin update due to using native libraries + +### Fixed + +- Class completion doesn't display interfaces +- Fixed invalid check 'setup_version' in the etc/module.xml + ## 3.1.2 ### Fixed diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml index b568b4315..633c25327 100644 --- a/resources/META-INF/plugin.xml +++ b/resources/META-INF/plugin.xml @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ --> - + com.magento.idea.magento2plugin Magento PhpStorm 3.2.0 diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/CreateAPluginDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/CreateAPluginDialog.java index 944a3216e..da3e82bf8 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/CreateAPluginDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/CreateAPluginDialog.java @@ -232,7 +232,7 @@ public static void open( } private void createUIComponents() { - final List allModulesList = ModuleIndex.getInstance(project) + final List allModulesList = new ModuleIndex(project) .getEditableModuleNames(); this.pluginModule = new FilteredComboBox(allModulesList); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/CreateAnObserverDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/CreateAnObserverDialog.java index 6d6d2e4f6..519a78c77 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/CreateAnObserverDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/CreateAnObserverDialog.java @@ -192,7 +192,7 @@ public String getObserverModule() { } private void createUIComponents() { //NOPMD - final List allModulesList = ModuleIndex.getInstance(project) + final List allModulesList = new ModuleIndex(project) .getEditableModuleNames(); this.observerModule = new FilteredComboBox(allModulesList); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java index 4fdd1c4a1..2d653546f 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java @@ -123,7 +123,7 @@ public NewModuleDialog( this.project = project; this.initialBaseDir = initialBaseDir; this.camelCaseToHyphen = CamelCaseToHyphen.getInstance(); - this.moduleIndex = ModuleIndex.getInstance(project); + this.moduleIndex = new ModuleIndex(project); detectPackageName(initialBaseDir); setContentPane(contentPane); setModal(true); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/OverrideClassByAPreferenceDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/OverrideClassByAPreferenceDialog.java index 41b13c09b..4c0f7371d 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/OverrideClassByAPreferenceDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/OverrideClassByAPreferenceDialog.java @@ -235,7 +235,7 @@ public static void open(final @NotNull Project project, final PhpClass targetCla } private void createUIComponents() { - final List allModulesList = ModuleIndex.getInstance(project) + final List allModulesList = new ModuleIndex(project) .getEditableModuleNames(); this.preferenceModule = new FilteredComboBox(allModulesList); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/OverrideInThemeDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/OverrideInThemeDialog.java index e6b540d5b..a5e854c87 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/OverrideInThemeDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/OverrideInThemeDialog.java @@ -131,7 +131,7 @@ public static void open(final @NotNull Project project, final PsiFile psiFile) { } private void fillThemeOptions() { - final List themeNames = ModuleIndex.getInstance(project).getEditableThemeNames(); + final List themeNames = new ModuleIndex(project).getEditableThemeNames(); for (final String themeName: themeNames) { theme.addItem(themeName); } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/CLICommandClassGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/CLICommandClassGenerator.java index aea7d454f..7e00fe79a 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/CLICommandClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/CLICommandClassGenerator.java @@ -48,7 +48,7 @@ public CLICommandClassGenerator( this.phpClassData = phpClassData; this.dirGenerator = DirectoryGenerator.getInstance(); - this.fileGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileGenerator = new FileFromTemplateGenerator(project); this.validatorBundle = new ValidatorBundle(); this.commonBundle = new CommonBundle(); } @@ -83,7 +83,7 @@ private PhpFile createCLICommandClass(final String actionName) { private PsiDirectory getParentDirectory() { final String moduleName = this.phpClassData.getModuleName(); final String[] subDirectories = this.phpClassData.getParentDirectory().split("/"); - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(moduleName); for (final String subDirectory : subDirectories) { parentDirectory = dirGenerator.findOrCreateSubdirectory(parentDirectory, subDirectory); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/CronjobClassGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/CronjobClassGenerator.java index 5d05e808f..49010dd5e 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/CronjobClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/CronjobClassGenerator.java @@ -2,6 +2,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + package com.magento.idea.magento2plugin.actions.generation.generator; import com.intellij.openapi.project.Project; @@ -14,87 +15,98 @@ import com.magento.idea.magento2plugin.bundles.ValidatorBundle; import com.magento.idea.magento2plugin.indexes.ModuleIndex; import com.magento.idea.magento2plugin.magento.files.CronjobTemplate; -import org.jetbrains.annotations.NotNull; import java.util.Properties; +import org.jetbrains.annotations.NotNull; public class CronjobClassGenerator extends FileGenerator { - private CronjobClassData cronjobClassData; - private Project project; - private ValidatorBundle validatorBundle; + private final CronjobClassData cronjobClassData; + private final Project project; + private final ValidatorBundle validatorBundle; private final DirectoryGenerator directoryGenerator; private final FileFromTemplateGenerator fileFromTemplateGenerator; /** - * @param project - * @param cronjobClassData + * Construct generator. + * + * @param project Project + * @param cronjobClassData CronjobClassData */ - public CronjobClassGenerator(Project project, @NotNull CronjobClassData cronjobClassData) { + public CronjobClassGenerator( + final Project project, + final @NotNull CronjobClassData cronjobClassData + ) { super(project); this.project = project; this.cronjobClassData = cronjobClassData; this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.validatorBundle = new ValidatorBundle(); } /** + * Generate file from code template. * - * @param actionName + * @param actionName String * * @return void */ - public PsiFile generate(String actionName) { - PhpFile cronjobFile = createCronjobClass(actionName); + @Override + public PsiFile generate(final String actionName) { + final PhpFile cronjobFile = createCronjobClass(actionName); if (cronjobFile == null) { - String errorMessage = validatorBundle.message( - "validator.file.cantBeCreated", - "Cronjob Class" + final String errorMessage = validatorBundle.message( + "validator.file.cantBeCreated", + "Cronjob Class" ); - throw new RuntimeException(errorMessage); + throw new RuntimeException(errorMessage);//NOPMD } return cronjobFile; } /** + * Fill template attributes. * - * @param attributes + * @param attributes Properties */ - protected void fillAttributes(Properties attributes) { - String cronjobClassName = this.cronjobClassData.getClassName(); - String cronjobNamespace = this.cronjobClassData.getNamespace(); + @Override + protected void fillAttributes(final Properties attributes) { + final String cronjobClassName = this.cronjobClassData.getClassName(); + final String cronjobNamespace = this.cronjobClassData.getNamespace(); attributes.setProperty("NAME", cronjobClassName); attributes.setProperty("NAMESPACE", cronjobNamespace); } /** - * Generate Cronjob Class according to data model + * Generate Cronjob Class according to data model. * - * @param actionName + * @param actionName String * * @return PhpFile */ - private PhpFile createCronjobClass(String actionName) { - String cronjobClassName = this.cronjobClassData.getClassName(); - String moduleName = this.cronjobClassData.getModuleName(); - String[] cronjobSubDirectories = this.cronjobClassData.getDirectory().split("/"); - PsiDirectory parentDirectory = ModuleIndex.getInstance(project).getModuleDirectoryByModuleName(moduleName); - - for (String cronjobSubDirectory: cronjobSubDirectories) { - parentDirectory = directoryGenerator.findOrCreateSubdirectory(parentDirectory, cronjobSubDirectory); + private PhpFile createCronjobClass(final String actionName) { + final String cronjobClassName = this.cronjobClassData.getClassName(); + final String moduleName = this.cronjobClassData.getModuleName(); + final String[] cronjobSubDirectories = this.cronjobClassData.getDirectory().split("/"); + PsiDirectory parentDirectory = new ModuleIndex(project) + .getModuleDirectoryByModuleName(moduleName); + + for (final String cronjobSubDirectory: cronjobSubDirectories) { + parentDirectory = directoryGenerator + .findOrCreateSubdirectory(parentDirectory, cronjobSubDirectory); } - Properties attributes = getAttributes(); + final Properties attributes = getAttributes(); - PsiFile blockFile = fileFromTemplateGenerator.generate( - new CronjobTemplate(cronjobClassName), - attributes, - parentDirectory, - actionName + final PsiFile blockFile = fileFromTemplateGenerator.generate( + new CronjobTemplate(cronjobClassName), + attributes, + parentDirectory, + actionName ); if (blockFile == null) { diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java index 1fe146725..87c3dccde 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java @@ -44,7 +44,7 @@ public DataModelGenerator(final Project project, final DataModelData modelData) this.project = project; this.modelData = modelData; this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.getFirstClassOfFile = GetFirstClassOfFile.getInstance(); this.validatorBundle = new ValidatorBundle(); this.commonBundle = new CommonBundle(); @@ -122,7 +122,7 @@ private List getUses() { } private PhpClass createModel(final String actionName) { - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(modelData.getModuleName()); final PsiFile interfaceFile; final Properties attributes = getAttributes(); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java index 65865d23f..e9829199b 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java @@ -44,7 +44,7 @@ public DataModelInterfaceGenerator( this.project = project; this.interfaceData = interfaceData; this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.getFirstClassOfFile = GetFirstClassOfFile.getInstance(); this.validatorBundle = new ValidatorBundle(); this.commonBundle = new CommonBundle(); @@ -101,7 +101,7 @@ protected void fillAttributes(final Properties attributes) { } private PhpClass createInterface(final String actionName) { - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(interfaceData.getModuleName()); final PsiFile interfaceFile; final Properties attributes = getAttributes(); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/MessageQueueClassGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/MessageQueueClassGenerator.java index 02d5cf79f..52eb307dc 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/MessageQueueClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/MessageQueueClassGenerator.java @@ -50,7 +50,7 @@ public MessageQueueClassGenerator( this.messageQueueClassDataName = messageQueueClassData; this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.validatorBundle = new ValidatorBundle(); this.commonBundle = new CommonBundle(); this.getFirstClassOfFile = GetFirstClassOfFile.getInstance(); @@ -112,7 +112,7 @@ protected void fillAttributes(final Properties attributes) { } private PhpClass createHandlerClass(final String actionName) { - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(this.moduleName); final PsiFile handlerFile; final String[] handlerDirectories = messageQueueClassDataName.getPath().split( diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleBlockClassGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleBlockClassGenerator.java index a52207bc4..d6b7e31e8 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleBlockClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleBlockClassGenerator.java @@ -45,7 +45,7 @@ public ModuleBlockClassGenerator( ) { super(project); this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.blockFileData = blockFileData; this.project = project; this.validatorBundle = new ValidatorBundle(); @@ -104,7 +104,7 @@ private String getBlockFqn() { } private PhpFile createBlockClass(final String actionName) { - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(getBlockModule()); final String[] blockDirectories = blockFileData.getBlockDirectory().split(File.separator); for (final String blockDirectory: blockDirectories) { diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleCollectionGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleCollectionGenerator.java index a9cdac186..6b9c1770e 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleCollectionGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleCollectionGenerator.java @@ -51,7 +51,7 @@ public ModuleCollectionGenerator( this.project = project; this.collectionData = collectionData; this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.getFirstClassOfFile = GetFirstClassOfFile.getInstance(); this.validatorBundle = new ValidatorBundle(); this.commonBundle = new CommonBundle(); @@ -123,7 +123,7 @@ private String getCollectionModelFqn() { } private PhpClass createClass(final String actionName) { - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(getModuleName()); final PsiFile modelFile; diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleComposerJsonGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleComposerJsonGenerator.java index 1b6daac7d..736287dc4 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleComposerJsonGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleComposerJsonGenerator.java @@ -44,10 +44,10 @@ public ModuleComposerJsonGenerator( ) { super(project); this.moduleComposerJsonData = moduleComposerJsonData; - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.directoryGenerator = DirectoryGenerator.getInstance(); this.camelCaseToHyphen = CamelCaseToHyphen.getInstance(); - this.moduleIndex = ModuleIndex.getInstance(project); + this.moduleIndex = new ModuleIndex(project); } @Override diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleControllerClassGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleControllerClassGenerator.java index ff7ab2d44..dcb2ebeec 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleControllerClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleControllerClassGenerator.java @@ -57,7 +57,7 @@ public ModuleControllerClassGenerator( this.project = project; this.controllerFileData = controllerFileData; this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.getFirstClassOfFile = GetFirstClassOfFile.getInstance(); this.validatorBundle = new ValidatorBundle(); this.commonBundle = new CommonBundle(); @@ -144,7 +144,7 @@ private String getControllerFqn() { } private PhpClass createControllerClass(final String actionName) { - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(getControllerModule()); final PsiFile controllerFile; final String[] controllerDirectories = controllerFileData.getActionDirectory().split( diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleEmailTemplateHtmlGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleEmailTemplateHtmlGenerator.java index 08de0666c..babb32fa7 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleEmailTemplateHtmlGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleEmailTemplateHtmlGenerator.java @@ -40,9 +40,9 @@ public ModuleEmailTemplateHtmlGenerator( this.emailTemplateData = emailTemplateData; this.project = project; - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.directoryGenerator = DirectoryGenerator.getInstance(); - this.moduleIndex = ModuleIndex.getInstance(project); + this.moduleIndex = new ModuleIndex(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 6592c984a..beb89cef1 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleGraphQlResolverClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleGraphQlResolverClassGenerator.java @@ -2,6 +2,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + package com.magento.idea.magento2plugin.actions.generation.generator; import com.intellij.openapi.command.WriteCommandAction; @@ -21,30 +22,39 @@ import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator; import com.magento.idea.magento2plugin.actions.generation.util.CodeStyleSettings; import com.magento.idea.magento2plugin.bundles.CommonBundle; +import com.magento.idea.magento2plugin.bundles.ValidatorBundle; import com.magento.idea.magento2plugin.indexes.ModuleIndex; import com.magento.idea.magento2plugin.magento.files.GraphQlResolverPhp; +import com.magento.idea.magento2plugin.magento.packages.File; import com.magento.idea.magento2plugin.magento.packages.MagentoPhpClass; import com.magento.idea.magento2plugin.util.GetFirstClassOfFile; import com.magento.idea.magento2plugin.util.GetPhpClassByFQN; -import com.magento.idea.magento2plugin.bundles.ValidatorBundle; -import org.jetbrains.annotations.NotNull; -import javax.swing.*; -import com.magento.idea.magento2plugin.magento.packages.File; import java.util.Properties; +import javax.swing.JOptionPane; +import org.jetbrains.annotations.NotNull; public class ModuleGraphQlResolverClassGenerator extends FileGenerator { - private GraphQlResolverFileData graphQlResolverFileData; - private Project project; - private ValidatorBundle validatorBundle; - private CommonBundle commonBundle; + private final GraphQlResolverFileData graphQlResolverFileData; + private final Project project; + private final ValidatorBundle validatorBundle; + private final CommonBundle commonBundle; private final DirectoryGenerator directoryGenerator; private final FileFromTemplateGenerator fileFromTemplateGenerator; private final GetFirstClassOfFile getFirstClassOfFile; - public ModuleGraphQlResolverClassGenerator(@NotNull GraphQlResolverFileData graphQlResolverFileData, Project project) { + /** + * Construct generator. + * + * @param graphQlResolverFileData GraphQlResolverFileData + * @param project Project + */ + public ModuleGraphQlResolverClassGenerator( + final @NotNull GraphQlResolverFileData graphQlResolverFileData, + final Project project + ) { super(project); this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.getFirstClassOfFile = GetFirstClassOfFile.getInstance(); this.graphQlResolverFileData = graphQlResolverFileData; this.project = project; @@ -53,17 +63,21 @@ public ModuleGraphQlResolverClassGenerator(@NotNull GraphQlResolverFileData grap } @Override - public PsiFile generate(String actionName) { + public PsiFile generate(final String actionName) { final PsiFile[] graphQlFile = {null}; WriteCommandAction.runWriteCommandAction(project, () -> { - PhpClass graphQlResolverClass = GetPhpClassByFQN.getInstance(project).execute(graphQlResolverFileData.getGraphQlResolverClassFqn()); + PhpClass graphQlResolverClass = GetPhpClassByFQN.getInstance(project) + .execute(graphQlResolverFileData.getGraphQlResolverClassFqn()); if (graphQlResolverClass == null) { graphQlResolverClass = createGraphQlResolverClass(actionName); } if (graphQlResolverClass == null) { - String errorMessage = validatorBundle.message("validator.file.cantBeCreated", "GraphQL Resolver Class"); + final String errorMessage = validatorBundle.message( + "validator.file.cantBeCreated", + "GraphQL Resolver Class" + ); JOptionPane.showMessageDialog( null, errorMessage, @@ -74,19 +88,21 @@ public PsiFile generate(String actionName) { return; } - Properties attributes = new Properties(); - String methodTemplate = PhpCodeUtil.getCodeTemplate( + final Properties attributes = new Properties(); + final String methodTemplate = PhpCodeUtil.getCodeTemplate( GraphQlResolverPhp.GRAPHQL_RESOLVER_TEMPLATE_NAME, attributes, project); graphQlFile[0] = graphQlResolverClass.getContainingFile(); - CodeStyleSettings codeStyleSettings = new CodeStyleSettings((PhpFile) graphQlFile[0]); + final CodeStyleSettings codeStyleSettings = new CodeStyleSettings( + (PhpFile) graphQlFile[0] + ); codeStyleSettings.adjustBeforeWrite(); - PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(project); - Document document = psiDocumentManager.getDocument(graphQlFile[0]); - int insertPos = getInsertPos(graphQlResolverClass); + final PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(project); + final Document document = psiDocumentManager.getDocument(graphQlFile[0]); + final int insertPos = getInsertPos(graphQlResolverClass); document.insertString(insertPos, methodTemplate); - int endPos = insertPos + methodTemplate.length() + 1; + final int endPos = insertPos + methodTemplate.length() + 1; CodeStyleManager.getInstance(project).reformatText(graphQlFile[0], insertPos, endPos); psiDocumentManager.commitDocument(document); codeStyleSettings.restore(); @@ -94,10 +110,13 @@ public PsiFile generate(String actionName) { return graphQlFile[0]; } - private int getInsertPos(PhpClass graphQlResolverClass) { + private int getInsertPos(final PhpClass graphQlResolverClass) { int insertPos = -1; - LeafPsiElement[] leafElements = PsiTreeUtil.getChildrenOfType(graphQlResolverClass, LeafPsiElement.class); - for (LeafPsiElement leafPsiElement: leafElements) { + final LeafPsiElement[] leafElements = PsiTreeUtil.getChildrenOfType( + graphQlResolverClass, + LeafPsiElement.class + ); + for (final LeafPsiElement leafPsiElement: leafElements) { if (!leafPsiElement.getText().equals(MagentoPhpClass.CLOSING_TAG)) { continue; } @@ -106,17 +125,23 @@ private int getInsertPos(PhpClass graphQlResolverClass) { return insertPos; } - private PhpClass createGraphQlResolverClass(String actionName) { - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + private PhpClass createGraphQlResolverClass(final String actionName) { + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(graphQlResolverFileData.getGraphQlResolverModule()); - String[] graphQlResolverDirectories = graphQlResolverFileData.getGraphQlResolverDirectory().split(File.separator); - for (String graphQlResolverDirectory: graphQlResolverDirectories) { - parentDirectory = directoryGenerator.findOrCreateSubdirectory(parentDirectory, graphQlResolverDirectory); + final String[] graphQlResolverDirectories = graphQlResolverFileData + .getGraphQlResolverDirectory().split(File.separator); + for (final String graphQlResolverDirectory: graphQlResolverDirectories) { + parentDirectory = directoryGenerator.findOrCreateSubdirectory( + parentDirectory, + graphQlResolverDirectory + ); } - Properties attributes = getAttributes(); - PsiFile graphQlResolverFile = fileFromTemplateGenerator.generate( - GraphQlResolverPhp.getInstance(graphQlResolverFileData.getGraphQlResolverClassName()), + final Properties attributes = getAttributes(); + final PsiFile graphQlResolverFile = fileFromTemplateGenerator.generate( + GraphQlResolverPhp.getInstance( + graphQlResolverFileData.getGraphQlResolverClassName() + ), attributes, parentDirectory, actionName @@ -127,8 +152,10 @@ private PhpClass createGraphQlResolverClass(String actionName) { return getFirstClassOfFile.execute((PhpFile) graphQlResolverFile); } - protected void fillAttributes(Properties attributes) { - String graphQlResolverClassName = graphQlResolverFileData.getGraphQlResolverClassName(); + @Override + protected void fillAttributes(final Properties attributes) { + final String graphQlResolverClassName + = graphQlResolverFileData.getGraphQlResolverClassName(); attributes.setProperty("NAME", graphQlResolverClassName); attributes.setProperty("NAMESPACE", graphQlResolverFileData.getNamespace()); } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleModelGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleModelGenerator.java index fc9b0960d..6a7332fd4 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleModelGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleModelGenerator.java @@ -50,7 +50,7 @@ public ModuleModelGenerator( this.project = project; this.modelData = modelData; this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.getFirstClassOfFile = GetFirstClassOfFile.getInstance(); this.validatorBundle = new ValidatorBundle(); this.commonBundle = new CommonBundle(); @@ -122,7 +122,7 @@ private String getModelFqn() { } private PhpClass createModelClass(final String actionName) { - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(getModuleName()); final PsiFile modelFile; diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleRegistrationPhpGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleRegistrationPhpGenerator.java index 011093080..4cb029902 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleRegistrationPhpGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleRegistrationPhpGenerator.java @@ -2,6 +2,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + package com.magento.idea.magento2plugin.actions.generation.generator; import com.intellij.openapi.project.Project; @@ -11,8 +12,8 @@ import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator; import com.magento.idea.magento2plugin.magento.files.RegistrationPhp; -import org.jetbrains.annotations.NotNull; import java.util.Properties; +import org.jetbrains.annotations.NotNull; public class ModuleRegistrationPhpGenerator extends FileGenerator { @@ -20,22 +21,54 @@ public class ModuleRegistrationPhpGenerator extends FileGenerator { private final FileFromTemplateGenerator fileFromTemplateGenerator; private final DirectoryGenerator directoryGenerator; - public ModuleRegistrationPhpGenerator(@NotNull ModuleRegistrationPhpData moduleRegistrationPhpData, Project project) { + /** + * Construct generator. + * + * @param moduleRegistrationPhpData ModuleRegistrationPhpData + * @param project Project + */ + public ModuleRegistrationPhpGenerator( + final @NotNull ModuleRegistrationPhpData moduleRegistrationPhpData, + final Project project + ) { super(project); this.moduleRegistrationPhpData = moduleRegistrationPhpData; - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.directoryGenerator = DirectoryGenerator.getInstance(); } - public PsiFile generate(String actionName) { + /** + * Generate file. + * + * @param actionName String + * @return PsiFile + */ + @Override + public PsiFile generate(final String actionName) { if (moduleRegistrationPhpData.getCreateModuleDirs()) { - ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createOrFindModuleDirectories(moduleRegistrationPhpData.getPackageName(), moduleRegistrationPhpData.getModuleName(), moduleRegistrationPhpData.getBaseDir()); - return fileFromTemplateGenerator.generate(RegistrationPhp.getInstance(), getAttributes(), moduleDirectoriesData.getModuleDirectory(), actionName); + final ModuleDirectoriesData moduleDirectoriesData = directoryGenerator + .createOrFindModuleDirectories( + moduleRegistrationPhpData.getPackageName(), + moduleRegistrationPhpData.getModuleName(), + moduleRegistrationPhpData.getBaseDir() + ); + return fileFromTemplateGenerator.generate( + RegistrationPhp.getInstance(), + getAttributes(), + moduleDirectoriesData.getModuleDirectory(), + actionName + ); } - return fileFromTemplateGenerator.generate(RegistrationPhp.getInstance(), getAttributes(), moduleRegistrationPhpData.getBaseDir(), actionName); + return fileFromTemplateGenerator.generate( + RegistrationPhp.getInstance(), + getAttributes(), + moduleRegistrationPhpData.getBaseDir(), + actionName + ); } - protected void fillAttributes(Properties attributes) { + @Override + protected void fillAttributes(final Properties attributes) { attributes.setProperty("PACKAGE", moduleRegistrationPhpData.getPackageName()); attributes.setProperty("MODULE_NAME", moduleRegistrationPhpData.getModuleName()); } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleResourceModelGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleResourceModelGenerator.java index e1a7542ae..fb892539f 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleResourceModelGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleResourceModelGenerator.java @@ -51,7 +51,7 @@ public ModuleResourceModelGenerator( this.project = project; this.resourceModelData = resourceModelData; this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.getFirstClassOfFile = GetFirstClassOfFile.getInstance(); this.validatorBundle = new ValidatorBundle(); this.commonBundle = new CommonBundle(); @@ -123,7 +123,7 @@ private String getResourceModelFqn() { } private PhpClass createClass(final String actionName) { - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(getModuleName()); final PsiFile modelFile; diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleViewModelClassGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleViewModelClassGenerator.java index 05847e1f9..a83ba7724 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleViewModelClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleViewModelClassGenerator.java @@ -45,7 +45,7 @@ public ModuleViewModelClassGenerator( super(project); this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.viewModelFileData = viewModelFileData; this.project = project; this.validatorBundle = new ValidatorBundle(); @@ -104,7 +104,7 @@ private String getViewModelFqn() { } private PhpFile createViewModelClass(final String actionName) { - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(getViewModelModule()); final String[] viewModelDirectories = viewModelFileData.getViewModelDirectory() .split(File.separator); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleXmlGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleXmlGenerator.java index 8205a9cea..311250111 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleXmlGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleXmlGenerator.java @@ -36,7 +36,7 @@ public ModuleXmlGenerator( ) { super(project); this.moduleXmlData = moduleXmlData; - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.directoryGenerator = DirectoryGenerator.getInstance(); } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ObserverClassGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ObserverClassGenerator.java index d6abbe72e..da453a7a7 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ObserverClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ObserverClassGenerator.java @@ -56,7 +56,7 @@ public ObserverClassGenerator( this.project = project; this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.getFirstClassOfFile = GetFirstClassOfFile.getInstance(); this.validatorBundle = new ValidatorBundle(); this.commonBundle = new CommonBundle(); @@ -131,7 +131,7 @@ private int getInsertPos(final PhpClass observerClass) { } private PhpClass createObserverClass(final String actionName) { - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(observerFileData.getObserverModule()); final String[] observerDirectories = observerFileData.getObserverDirectory() .split(File.separator); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/OverrideInThemeGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/OverrideInThemeGenerator.java index a8b6c8506..4be05b573 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/OverrideInThemeGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/OverrideInThemeGenerator.java @@ -67,7 +67,7 @@ public void execute(final PsiFile baseFile, final String themeName, final boolea return; } - final ModuleIndex moduleIndex = ModuleIndex.getInstance(project); + final ModuleIndex moduleIndex = new ModuleIndex(project); PsiDirectory directory = moduleIndex.getModuleDirectoryByModuleName(themeName); directory = getTargetDirectory(directory, pathComponents); 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 eb262867c..cb80c4fdd 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java @@ -72,7 +72,7 @@ public PluginClassGenerator( ) { super(project); this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.getFirstClassOfFile = GetFirstClassOfFile.getInstance(); this.fillTextBuffer = FillTextBufferWithPluginMethods.getInstance(); this.collectInsertedMethods = CollectInsertedMethods.getInstance(); @@ -203,7 +203,7 @@ private boolean checkIfMethodExist( } private PhpClass createPluginClass(final String actionName) { - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(getPluginModule()); final String[] pluginDirectories = pluginFileData.getPluginDirectory() .split(File.separator); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/PreferenceClassGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/PreferenceClassGenerator.java index d675dc85b..9e8c2f0c6 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/PreferenceClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/PreferenceClassGenerator.java @@ -42,7 +42,7 @@ public PreferenceClassGenerator( ) { super(project); this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.getFirstClassOfFile = GetFirstClassOfFile.getInstance(); this.preferenceFileData = preferenceFileData; this.project = project; @@ -80,7 +80,7 @@ public PsiFile generate(final String actionName) { } private PhpClass createPluginClass(final String actionName) { - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(getPreferenceModule()); final String[] pluginDirectories = preferenceFileData.getPreferenceDirectory() .split(File.separator); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentDataProviderGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentDataProviderGenerator.java index 6cdd90f5c..e7f46016c 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentDataProviderGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentDataProviderGenerator.java @@ -52,7 +52,7 @@ public UiComponentDataProviderGenerator( this.uiComponentGridDataProviderData = uiComponentGridDataProviderData; this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); this.validatorBundle = new ValidatorBundle(); this.commonBundle = new CommonBundle(); this.getFirstClassOfFile = GetFirstClassOfFile.getInstance(); @@ -114,7 +114,7 @@ protected void fillAttributes(final Properties attributes) { } private PhpClass createDataProviderClass(final String actionName) { - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(this.moduleName); final PsiFile dataProviderFile; final String[] dataProviderDirectories = uiComponentGridDataProviderData.getPath().split( diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormButtonPhpClassGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormButtonPhpClassGenerator.java index a87f842b1..9fbc04109 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormButtonPhpClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormButtonPhpClassGenerator.java @@ -69,10 +69,10 @@ protected PhpClass createButton( ) { final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = - FileFromTemplateGenerator.getInstance(project); + new FileFromTemplateGenerator(project); final String moduleName = buttonData.getButtonModule(); - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(moduleName); final String[] directories = buttonData.getButtonDirectory().split(File.separator); for (final String pluginDirectory: directories) { diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGenerator.java index 473e7e833..03c104c83 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGenerator.java @@ -80,10 +80,10 @@ protected PsiFile createForm( ) { final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = - FileFromTemplateGenerator.getInstance(project); + new FileFromTemplateGenerator(project); final String moduleName = uiFormFileData.getModuleName(); - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(moduleName); final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleViewDir); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentGridXmlGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentGridXmlGenerator.java index 6a996edc6..5fb9b2bb9 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentGridXmlGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentGridXmlGenerator.java @@ -39,8 +39,8 @@ public UiComponentGridXmlGenerator( this.uiComponentGridData = uiComponentGridData; this.directoryGenerator = DirectoryGenerator.getInstance(); - this.moduleIndex = ModuleIndex.getInstance(project); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.moduleIndex = new ModuleIndex(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); } @Override 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 ed47a784d..a7aad6da3 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 @@ -2,6 +2,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + package com.magento.idea.magento2plugin.actions.generation.generator.util; import com.intellij.ide.fileTemplates.DefaultTemplatePropertiesProvider; @@ -21,38 +22,42 @@ import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.util.IncorrectOperationException; import com.magento.idea.magento2plugin.magento.files.ModuleFileInterface; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import com.magento.idea.magento2plugin.magento.packages.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.Properties; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class FileFromTemplateGenerator { - private static FileFromTemplateGenerator INSTANCE = null; - private Project project; + private final Project project; - public static FileFromTemplateGenerator getInstance(Project project) { - if (null == INSTANCE) { - INSTANCE = new FileFromTemplateGenerator(); - } - INSTANCE.project = project; - return INSTANCE; + public FileFromTemplateGenerator(final Project project) { + this.project = project; } + /** + * Generate file. + * + * @param moduleFile ModuleFileInterface + * @param attributes Properties + * @param baseDir PsiDirectory + * @param actionName String + * @return PsiFile + */ @Nullable public PsiFile generate( - @NotNull ModuleFileInterface moduleFile, - @NotNull Properties attributes, - @NotNull PsiDirectory baseDir, - @NotNull String actionName) - { - Ref fileRef = new Ref<>(null); - Ref exceptionRef = new Ref<>(null); - String filePath = baseDir.getText().concat("/").concat(moduleFile.getFileName()); + final @NotNull ModuleFileInterface moduleFile, + final @NotNull Properties attributes, + final @NotNull PsiDirectory baseDir, + final @NotNull String actionName + ) { + 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, () -> { - Runnable run = () -> { + final Runnable run = () -> { try { PsiFile file = createFile(moduleFile, filePath, baseDir, attributes); if (file != null) { @@ -65,24 +70,24 @@ public PsiFile generate( ApplicationManager.getApplication().runWriteAction(run); }, actionName, null); - if (!exceptionRef.isNull()) { - Messages.showErrorDialog(exceptionRef.get(), actionName); - return null; - } else { + if (exceptionRef.isNull()) { return fileRef.get(); } + + Messages.showErrorDialog(exceptionRef.get(), actionName); + return null; } @Nullable private PsiFile createFile( - @NotNull ModuleFileInterface moduleFile, - @NotNull String filePath, - @NotNull PsiDirectory baseDir, - @NotNull Properties attributes - ) throws IOException, IncorrectOperationException { - List path = StringUtil.split(filePath.replace(File.separator, "/"), "/"); - String fileName = path.get(path.size() - 1); - PsiFile fileTemplate = createFileFromTemplate( + final @NotNull ModuleFileInterface moduleFile, + final @NotNull String filePath, + final @NotNull PsiDirectory baseDir, + final @NotNull Properties attributes + ) throws IOException { + final List path = StringUtil.split(filePath.replace(File.separator, "/"), "/"); + final String fileName = path.get(path.size() - 1); + final PsiFile fileTemplate = createFileFromTemplate( getTemplateManager(), baseDir, moduleFile.getTemplate(), attributes, fileName, moduleFile.getLanguage()); if (fileTemplate == null) { @@ -99,13 +104,25 @@ private PsiFile createFile( } } + /** + * Create file from code template. + * + * @param templateManager FileTemplateManager + * @param directory PsiDirectory + * @param templateName String + * @param properties Properties + * @param fileName String + * @param language Language + * @return PsiFile + * @throws IOException exception + */ public PsiFile createFileFromTemplate( - @NotNull FileTemplateManager templateManager, - @NotNull PsiDirectory directory, - @NotNull String templateName, - @NotNull Properties properties, - @NotNull String fileName, - @NotNull Language language + final @NotNull FileTemplateManager templateManager, + final @NotNull PsiDirectory directory, + final @NotNull String templateName, + final @NotNull Properties properties, + final @NotNull String fileName, + final @NotNull Language language ) throws IOException { FileTemplate fileTemplate; try { @@ -115,8 +132,14 @@ public PsiFile createFileFromTemplate( } fillDefaultProperties(templateManager, properties, directory); - String fileTemplateText = fileTemplate.getText(properties); - PsiFile file = PsiFileFactory.getInstance(project).createFileFromText(fileName, language, fileTemplateText, true, false); + final String fileTemplateText = fileTemplate.getText(properties); + final PsiFile file = PsiFileFactory.getInstance(project).createFileFromText( + fileName, + language, + fileTemplateText, + true, + false + ); if (fileTemplate.isReformatCode()) { CodeStyleManager.getInstance(project).reformat(file); } @@ -124,19 +147,34 @@ public PsiFile createFileFromTemplate( return file; } - public void fillDefaultProperties(@NotNull FileTemplateManager templateManager, @NotNull Properties props, @NotNull PsiDirectory directory) { - Properties hardCodedProperties = templateManager.getDefaultProperties(); + /** + * Fill template properties. + * + * @param templateManager FileTemplateManager + * @param props Properties + * @param directory PsiDirectory + */ + public void fillDefaultProperties( + final @NotNull FileTemplateManager templateManager, + final @NotNull Properties props, + final @NotNull PsiDirectory directory + ) { + final Properties hardCodedProperties = templateManager.getDefaultProperties(); Iterator iterator = hardCodedProperties.keySet().iterator(); - while(iterator.hasNext()) { - Object propertyKey = iterator.next(); - props.setProperty((String)propertyKey, hardCodedProperties.getProperty((String)propertyKey)); + while (iterator.hasNext()) { + final Object propertyKey = iterator.next(); + props.setProperty( + (String)propertyKey, + hardCodedProperties.getProperty((String)propertyKey) + ); } iterator = DefaultTemplatePropertiesProvider.EP_NAME.getExtensionList().iterator(); - while(iterator.hasNext()) { - DefaultTemplatePropertiesProvider provider = (DefaultTemplatePropertiesProvider)iterator.next(); + while (iterator.hasNext()) { + final DefaultTemplatePropertiesProvider provider + = (DefaultTemplatePropertiesProvider)iterator.next(); provider.fillProperties(directory, props); } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateAclXml.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateAclXml.java index e74410ff5..5a76a27f4 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateAclXml.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateAclXml.java @@ -33,9 +33,9 @@ public FindOrCreateAclXml(final Project project) { public PsiFile execute(final String actionName, final String moduleName) { final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = - FileFromTemplateGenerator.getInstance(project); + new FileFromTemplateGenerator(project); - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(moduleName); parentDirectory = directoryGenerator .findOrCreateSubdirectory(parentDirectory, Package.moduleBaseAreaDir); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateCronGroupXml.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateCronGroupXml.java index 23b07b1b5..40f1bf0ac 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateCronGroupXml.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateCronGroupXml.java @@ -31,8 +31,8 @@ public class FindOrCreateCronGroupXml { public FindOrCreateCronGroupXml(final Project project) { this.project = project; this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); - this.moduleIndex = ModuleIndex.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); + this.moduleIndex = new ModuleIndex(project); } /** diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateCrontabXml.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateCrontabXml.java index ac3afa699..6a0e4800d 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateCrontabXml.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateCrontabXml.java @@ -31,8 +31,8 @@ public FindOrCreateCrontabXml(final Project project) { this.project = project; this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); - this.moduleIndex = ModuleIndex.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); + this.moduleIndex = new ModuleIndex(project); } /** diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateDbSchemaWhitelistJson.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateDbSchemaWhitelistJson.java index 4e443f3e8..01c5258a2 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateDbSchemaWhitelistJson.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateDbSchemaWhitelistJson.java @@ -39,7 +39,7 @@ public FindOrCreateDbSchemaWhitelistJson(final @NotNull Project project) { public PsiFile execute(final @NotNull String actionName, final @NotNull String moduleName) { final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = - FileFromTemplateGenerator.getInstance(project); + new FileFromTemplateGenerator(project); final ModuleDbSchemaWhitelistJson moduleDbSchemaWhitelistJson = ModuleDbSchemaWhitelistJson.getInstance(); @@ -52,7 +52,7 @@ public PsiFile execute(final @NotNull String actionName, final @NotNull String m ); if (dbSchemaWhitelistJson == null) { - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(moduleName); parentDirectory = directoryGenerator .findOrCreateSubdirectory(parentDirectory, Package.moduleBaseAreaDir); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateDbSchemaXmlUtil.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateDbSchemaXmlUtil.java index 189f2eaf5..2d70471ac 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateDbSchemaXmlUtil.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateDbSchemaXmlUtil.java @@ -33,9 +33,9 @@ public FindOrCreateDbSchemaXmlUtil(final Project project) { public PsiFile execute(final String actionName, final String moduleName) { final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = - FileFromTemplateGenerator.getInstance(project); + new FileFromTemplateGenerator(project); - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(moduleName); parentDirectory = directoryGenerator .findOrCreateSubdirectory(parentDirectory, Package.moduleBaseAreaDir); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateDiXml.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateDiXml.java index 7ea4fab42..854b59358 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateDiXml.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateDiXml.java @@ -34,9 +34,9 @@ public FindOrCreateDiXml(final Project project) { public PsiFile execute(final String actionName, final String moduleName, final String area) { final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = - FileFromTemplateGenerator.getInstance(project); + new FileFromTemplateGenerator(project); - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(moduleName); final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleBaseAreaDir); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateEmailTemplatesXml.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateEmailTemplatesXml.java index d924c4a8c..f37e0e75b 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateEmailTemplatesXml.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateEmailTemplatesXml.java @@ -31,8 +31,8 @@ public class FindOrCreateEmailTemplatesXml { public FindOrCreateEmailTemplatesXml(final Project project) { this.project = project; this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); - this.moduleIndex = ModuleIndex.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); + this.moduleIndex = new ModuleIndex(project); } /** diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateEventsXml.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateEventsXml.java index c760a1f42..23d44f2b1 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateEventsXml.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateEventsXml.java @@ -38,8 +38,8 @@ public PsiFile execute( ) { final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = - FileFromTemplateGenerator.getInstance(project); - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + new FileFromTemplateGenerator(project); + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(moduleName); final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleBaseAreaDir); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateLayoutXml.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateLayoutXml.java index 89be79cb8..e77bebfdd 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateLayoutXml.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateLayoutXml.java @@ -45,9 +45,9 @@ public PsiFile execute( ) { final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = - FileFromTemplateGenerator.getInstance(project); + new FileFromTemplateGenerator(project); - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(moduleName); final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleViewDir); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateMenuXml.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateMenuXml.java index 0fbf0da7b..d699ce927 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateMenuXml.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateMenuXml.java @@ -33,9 +33,9 @@ public FindOrCreateMenuXml(final Project project) { public PsiFile execute(final String actionName, final String moduleName) { final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = - FileFromTemplateGenerator.getInstance(project); + new FileFromTemplateGenerator(project); - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(moduleName); final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleBaseAreaDir); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateQueueXml.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateQueueXml.java index 0f9e47d5c..72a2d0781 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateQueueXml.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateQueueXml.java @@ -29,8 +29,8 @@ public FindOrCreateQueueXml(final Project project) { this.project = project; this.directoryGenerator = DirectoryGenerator.getInstance(); - this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); - this.moduleIndex = ModuleIndex.getInstance(project); + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); + this.moduleIndex = new ModuleIndex(project); } /** diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateRoutesXml.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateRoutesXml.java index beae9b6fd..385aef23a 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateRoutesXml.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/FindOrCreateRoutesXml.java @@ -34,9 +34,9 @@ public FindOrCreateRoutesXml(final Project project) { public PsiFile execute(final String actionName, final String moduleName, final String area) { final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = - FileFromTemplateGenerator.getInstance(project); + new FileFromTemplateGenerator(project); - PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(moduleName); final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleBaseAreaDir); diff --git a/src/com/magento/idea/magento2plugin/completion/provider/PhpClassCompletionProvider.java b/src/com/magento/idea/magento2plugin/completion/provider/PhpClassCompletionProvider.java index b86dde94d..30be46ece 100644 --- a/src/com/magento/idea/magento2plugin/completion/provider/PhpClassCompletionProvider.java +++ b/src/com/magento/idea/magento2plugin/completion/provider/PhpClassCompletionProvider.java @@ -2,6 +2,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + package com.magento.idea.magento2plugin.completion.provider; import com.intellij.codeInsight.completion.CompletionParameters; @@ -18,79 +19,98 @@ import com.jetbrains.php.lang.psi.elements.PhpNamespace; import com.magento.idea.magento2plugin.util.RegExUtil; import gnu.trove.THashSet; -import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Collection; +import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; +import org.jetbrains.annotations.NotNull; public class PhpClassCompletionProvider extends CompletionProvider { - final private static String PHP_CLASS_COMPLETION_REGEX + private static final String PHP_CLASS_COMPLETION_REGEX = "\\\\?" + RegExUtil.PhpRegex.FQN + "\\\\?"; + @SuppressWarnings({ + "PMD.CyclomaticComplexity", + "PMD.NPathComplexity" + }) @Override - protected void addCompletions(@NotNull CompletionParameters parameters, - ProcessingContext context, - @NotNull CompletionResultSet result) { - PsiElement position = parameters.getPosition().getOriginalElement(); + protected void addCompletions( + final @NotNull CompletionParameters parameters, + final ProcessingContext context, + final @NotNull CompletionResultSet result + ) { + final PsiElement position = parameters.getPosition().getOriginalElement(); if (position == null) { return; } - String prefix = result.getPrefixMatcher().getPrefix(); - Matcher matcher = Pattern.compile(PHP_CLASS_COMPLETION_REGEX).matcher(prefix); + final String prefix = result.getPrefixMatcher().getPrefix(); + final Matcher matcher = Pattern.compile(PHP_CLASS_COMPLETION_REGEX) + .matcher(prefix); if (!matcher.matches()) { return; } - String className = prefix.lastIndexOf(92) < 0 ? prefix : prefix.substring(prefix.lastIndexOf(92) + 1); - String namespace = prefix.lastIndexOf(92) < 0 ? "" : prefix.substring(0, prefix.lastIndexOf(92)); + final String className = prefix.lastIndexOf(92) < 0 ? prefix : prefix + .substring(prefix.lastIndexOf(92) + 1); + final String namespace = prefix.lastIndexOf(92) < 0 ? "" : prefix + .substring(0, prefix.lastIndexOf(92)); - PhpIndex phpIndex = PhpIndex.getInstance(parameters.getPosition().getProject()); + final PhpIndex phpIndex = PhpIndex.getInstance( + parameters.getPosition().getProject() + ); final Collection phpClasses = new THashSet<>(); Collection namespaceNames = new ArrayList<>(); - if (!className.isEmpty()) { - // case for input: "SomeClassOrNamespace" - - // add classes - Collection classNames = phpIndex.getAllClassNames(new CamelHumpMatcher(className)); - for (String cName: classNames) { - phpClasses.addAll(phpIndex.getClassesByName(cName)); + if (className.isEmpty()) { + // add namespaces + final Collection namespaces + = phpIndex.getNamespacesByName(("\\" + namespace) + .toLowerCase(Locale.ROOT)); + for (final PhpNamespace nsp: namespaces) { + phpClasses.addAll(PsiTreeUtil.getChildrenOfTypeAsList( + nsp.getStatements(), + PhpClass.class + ) + ); } + + // add namespaces and classes (string representation) + namespaceNames + = phpIndex.getChildNamespacesByParentName("\\".concat(namespace) + .concat("\\").toLowerCase(Locale.ROOT)); + namespaceNames + = namespaceNames.stream().map(n -> namespace.concat("\\") + .concat(n)).collect(Collectors.toList()); + } else { // add interfaces - Collection interfaceNames = phpIndex.getAllInterfaceNames(); - interfaceNames.removeIf(i -> !i.contains(className)); - for (String iName: interfaceNames) { + final Collection interfaceNames = phpIndex.getAllInterfaceNames(); + interfaceNames.removeIf(i -> !i.contains(className.toLowerCase(Locale.ROOT))); + for (final String iName: interfaceNames) { phpClasses.addAll(phpIndex.getInterfacesByName(iName)); } - if (!namespace.isEmpty()) { - phpClasses.removeIf(c -> !c.getPresentableFQN().startsWith(namespace)); - } else { + // add classes + final Collection classNames = phpIndex.getAllClassNames( + new CamelHumpMatcher(className) + ); + for (final String cName: classNames) { + phpClasses.addAll(phpIndex.getClassesByName(cName)); + } + if (namespace.isEmpty()) { namespaceNames = phpIndex.getChildNamespacesByParentName("\\"); namespaceNames.removeIf(n -> !n.contains(prefix)); + } else { + phpClasses.removeIf(c -> !c.getPresentableFQN().startsWith(namespace)); } - } else { - // case for input: "Some\Namespace\ + ^+" - - // add namespaces - Collection namespaces = phpIndex.getNamespacesByName(("\\" + namespace).toLowerCase()); - for (PhpNamespace nsp: namespaces) { - phpClasses.addAll(PsiTreeUtil.getChildrenOfTypeAsList(nsp.getStatements(), PhpClass.class)); - } - - // add namespaces and classes (string representation) - namespaceNames - = phpIndex.getChildNamespacesByParentName("\\".concat(namespace).concat("\\").toLowerCase()); - namespaceNames - = namespaceNames.stream().map(n -> namespace.concat("\\").concat(n)).collect(Collectors.toList()); } // add all above founded items to lookup builder - // order is important (items with the same name override each other), add classes first - for (PhpClass phpClass : phpClasses) { + // order is important (items with the same name override each other), + // add classes first + for (final PhpClass phpClass : phpClasses) { result.addElement( LookupElementBuilder .create(phpClass.getPresentableFQN()) @@ -98,7 +118,7 @@ protected void addCompletions(@NotNull CompletionParameters parameters, ); } - for (String nsName : namespaceNames) { + for (final String nsName : namespaceNames) { result.addElement( LookupElementBuilder .create(nsName) diff --git a/src/com/magento/idea/magento2plugin/indexes/ModuleIndex.java b/src/com/magento/idea/magento2plugin/indexes/ModuleIndex.java index c0c5c4157..c3facb976 100644 --- a/src/com/magento/idea/magento2plugin/indexes/ModuleIndex.java +++ b/src/com/magento/idea/magento2plugin/indexes/ModuleIndex.java @@ -26,26 +26,15 @@ public final class ModuleIndex { - private static ModuleIndex instance; - - private Project project; - - private ModuleIndex() { - } + private final Project project; /** * Constructor. * * @param project Project - * @return ModuleIndex */ - public static ModuleIndex getInstance(final Project project) { - if (null == instance) { //NOPMD - instance = new ModuleIndex(); - } - instance.project = project; - - return instance; + public ModuleIndex(final Project project) { + this.project = project; } public List getEditableModuleNames() { diff --git a/src/com/magento/idea/magento2plugin/inspections/xml/ModuleDeclarationInModuleXmlInspection.java b/src/com/magento/idea/magento2plugin/inspections/xml/ModuleDeclarationInModuleXmlInspection.java index f97697147..b87e429ec 100644 --- a/src/com/magento/idea/magento2plugin/inspections/xml/ModuleDeclarationInModuleXmlInspection.java +++ b/src/com/magento/idea/magento2plugin/inspections/xml/ModuleDeclarationInModuleXmlInspection.java @@ -8,6 +8,7 @@ import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.codeInspection.XmlSuppressableInspectionTool; +import com.intellij.patterns.XmlAttributeValuePattern; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.PsiFile; @@ -54,24 +55,26 @@ public void visitXmlAttributeValue(final XmlAttributeValue value) { return; } - final String expectedName - = GetEditableModuleNameByRootFileUtil.execute(etcDirectory); - final String actualName = value.getValue(); - if (actualName.equals(expectedName)) { - return; + final String attributeName = XmlAttributeValuePattern.getLocalName(value); + if (attributeName != null && attributeName.equals(ModuleXml.MODULE_ATTR_NAME)) { + final String expectedName + = GetEditableModuleNameByRootFileUtil.execute(etcDirectory); + final String actualName = value.getValue(); + if (actualName.equals(expectedName)) { + return; + } + final InspectionBundle inspectionBundle = new InspectionBundle(); + problemsHolder.registerProblem( + value, + inspectionBundle.message( + "inspection.moduleDeclaration.warning.wrongModuleName", + actualName, + expectedName + ), + ProblemHighlightType.ERROR, + new XmlModuleNameQuickFix(expectedName) + ); } - - final InspectionBundle inspectionBundle = new InspectionBundle(); - problemsHolder.registerProblem( - value, - inspectionBundle.message( - "inspection.moduleDeclaration.warning.wrongModuleName", - actualName, - expectedName - ), - ProblemHighlightType.ERROR, - new XmlModuleNameQuickFix(expectedName) - ); } }; } diff --git a/testData/inspections/xml/ModuleDeclarationInModuleXmlInspection/setupVersionNotErrorMessageInEditableModule/app/code/Test/TestModule/etc/module.xml b/testData/inspections/xml/ModuleDeclarationInModuleXmlInspection/setupVersionNotErrorMessageInEditableModule/app/code/Test/TestModule/etc/module.xml new file mode 100644 index 000000000..096ec0b14 --- /dev/null +++ b/testData/inspections/xml/ModuleDeclarationInModuleXmlInspection/setupVersionNotErrorMessageInEditableModule/app/code/Test/TestModule/etc/module.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/tests/com/magento/idea/magento2plugin/inspections/xml/ModuleDeclarationInModuleXmlInspectionTest.java b/tests/com/magento/idea/magento2plugin/inspections/xml/ModuleDeclarationInModuleXmlInspectionTest.java index 90e0266b9..089d8fcbb 100644 --- a/tests/com/magento/idea/magento2plugin/inspections/xml/ModuleDeclarationInModuleXmlInspectionTest.java +++ b/tests/com/magento/idea/magento2plugin/inspections/xml/ModuleDeclarationInModuleXmlInspectionTest.java @@ -13,6 +13,7 @@ public class ModuleDeclarationInModuleXmlInspectionTest private static final String MESSAGE_ID = "inspection.moduleDeclaration.warning.wrongModuleName"; private static final String WRONG_MODULE_NAME = "Wrong_ModuleName"; + private static final String SETUP_VERSION_ATTRIBUTE_VALUE = "1.0.0"; @Override public void setUp() throws Exception { @@ -46,6 +47,27 @@ public void testWrongDeclarationInEditableModule() { assertHasHighlighting(errorMessage); } + /** + * Inspection do not highlight wrong module name warning for setup version attribute. + */ + public void testSetupVersionNotErrorMessageInEditableModule() { + final Settings settings = Settings.getInstance(myFixture.getProject()); + settings.magentoPath = + "/src/xml/ModuleDeclarationInModuleXmlInspection/" + + "setupVersionNotErrorMessageInEditableModule"; + myFixture.configureByFile( + getFixturePath("app/code/Test/TestModule/etc/" + ModuleXml.FILE_NAME) + ); + + final String errorMessage = inspectionBundle.message( + MESSAGE_ID, + SETUP_VERSION_ATTRIBUTE_VALUE, + "Test_TestModule" + ); + + assertHasNoHighlighting(errorMessage); + } + /** * Inspection skips sub tags. */