diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewControllerDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewControllerDialog.java index c5e88c022..818915cab 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewControllerDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewControllerDialog.java @@ -249,12 +249,13 @@ private String getNamespace() { ); return String.format( - "%s%s%s%s%s%s", + "%s%s%s%s%s%s%s", parts[0], Package.fqnSeparator, parts[1], Package.fqnSeparator, directoryPart, + Package.fqnSeparator, controllerPart ); } 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 7e00fe79a..862688f65 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/CLICommandClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/CLICommandClassGenerator.java @@ -18,6 +18,7 @@ import com.magento.idea.magento2plugin.magento.files.CLICommandTemplate; import java.util.Properties; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; @SuppressWarnings({ "PMD.AvoidUncheckedExceptionsInSignatures", @@ -69,11 +70,17 @@ public PsiFile generate(final String actionName) throws RuntimeException { return cliCommandFile; } - private PhpFile createCLICommandClass(final String actionName) { + private @Nullable PhpFile createCLICommandClass(final String actionName) { + final PsiDirectory parentDirectory = getParentDirectory(); + + if (parentDirectory == null) { + return null; + } + final PsiFile cliCommandFile = fileGenerator.generate( this.getCLICommandTemplate(), getAttributes(), - this.getParentDirectory(), + parentDirectory, actionName ); @@ -82,9 +89,14 @@ private PhpFile createCLICommandClass(final String actionName) { private PsiDirectory getParentDirectory() { final String moduleName = this.phpClassData.getModuleName(); - final String[] subDirectories = this.phpClassData.getParentDirectory().split("/"); PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(moduleName); + + if (parentDirectory == null) { + return null; + } + final String[] subDirectories = this.phpClassData.getParentDirectory().split("/"); + 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 49010dd5e..0b1ea3350 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/CronjobClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/CronjobClassGenerator.java @@ -89,12 +89,16 @@ protected void fillAttributes(final Properties attributes) { * @return PhpFile */ 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); + if (parentDirectory == null) { + return null; + } + final String cronjobClassName = this.cronjobClassData.getClassName(); + final String[] cronjobSubDirectories = this.cronjobClassData.getDirectory().split("/"); + for (final String cronjobSubDirectory: cronjobSubDirectories) { parentDirectory = directoryGenerator .findOrCreateSubdirectory(parentDirectory, cronjobSubDirectory); 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 52eb307dc..b1c21c62a 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/MessageQueueClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/MessageQueueClassGenerator.java @@ -114,6 +114,10 @@ protected void fillAttributes(final Properties attributes) { private PhpClass createHandlerClass(final String actionName) { PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(this.moduleName); + + if (parentDirectory == null) { + return null; + } final PsiFile handlerFile; final String[] handlerDirectories = messageQueueClassDataName.getPath().split( File.separator 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 d6b7e31e8..9a3b09b2c 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleBlockClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleBlockClassGenerator.java @@ -58,6 +58,7 @@ public ModuleBlockClassGenerator( * @param actionName String * @return PsiFile */ + @Override public PsiFile generate(final String actionName) { final String errorTitle = commonBundle.message("common.error"); final PhpClass block = GetPhpClassByFQN.getInstance(project).execute(getBlockFqn()); @@ -106,7 +107,12 @@ private String getBlockFqn() { private PhpFile createBlockClass(final String actionName) { PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(getBlockModule()); + + if (parentDirectory == null) { + return null; + } final String[] blockDirectories = blockFileData.getBlockDirectory().split(File.separator); + for (final String blockDirectory: blockDirectories) { parentDirectory = directoryGenerator.findOrCreateSubdirectory( parentDirectory, @@ -127,6 +133,7 @@ private PhpFile createBlockClass(final String actionName) { return (PhpFile) blockFile; } + @Override protected void fillAttributes(final Properties attributes) { final String blockClassName = blockFileData.getBlockClassName(); attributes.setProperty("NAME", blockClassName); 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 736287dc4..a6fd7c07a 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleComposerJsonGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleComposerJsonGenerator.java @@ -10,6 +10,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiFile; import com.magento.idea.magento2plugin.actions.generation.data.ModuleComposerJsonData; import com.magento.idea.magento2plugin.actions.generation.generator.data.ModuleDirectoriesData; @@ -120,8 +121,8 @@ private String getDependenciesString(final List dependenciesList) { final Object[] dependencies = dependenciesList.toArray(); result = result.concat(ComposerJson.DEFAULT_DEPENDENCY); final boolean noDependency = - dependencies.length == 1 && dependencies[0].equals( - ComposerJson.NO_DEPENDENCY_LABEL + dependencies.length == 1 && ComposerJson.NO_DEPENDENCY_LABEL.equals( + dependencies[0] ); if (dependencies.length == 0 || noDependency) { result = result.concat("\n"); @@ -161,8 +162,12 @@ private Pair getDependencyData( "_-", "/" ); try { - final PsiFile virtualFile = moduleIndex.getModuleDirectoryByModuleName(dependency) - .findFile(ComposerJson.FILE_NAME); + final PsiDirectory moduleDir = moduleIndex.getModuleDirectoryByModuleName(dependency); + + if (moduleDir == null) { + return Pair.create("", ""); + } + final PsiFile virtualFile = moduleDir.findFile(ComposerJson.FILE_NAME); if (virtualFile != null) { //NOPMD final VirtualFile composerJsonFile = virtualFile.getVirtualFile(); 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 a5142cb3d..89518a92e 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleControllerClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleControllerClassGenerator.java @@ -148,6 +148,10 @@ private String getControllerFqn() { private PhpClass createControllerClass(final String actionName) { PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(getControllerModule()); + + if (parentDirectory == null) { + return null; + } final PsiFile controllerFile; final String[] controllerDirectories = data.getActionDirectory().split( File.separator 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 babb32fa7..f3e53801a 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleEmailTemplateHtmlGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleEmailTemplateHtmlGenerator.java @@ -51,6 +51,7 @@ public ModuleEmailTemplateHtmlGenerator( * @param actionName Action name * @return PsiFile */ + @Override public PsiFile generate(final String actionName) { final PsiFile templateFile = FileBasedIndexUtil.findModuleViewFile( this.emailTemplateData.getFileName(), @@ -67,6 +68,10 @@ public PsiFile generate(final String actionName) { PsiDirectory parentDirectory = this.moduleIndex.getModuleDirectoryByModuleName( this.emailTemplateData.getModule() ); + + if (parentDirectory == null) { + return null; + } final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleViewDir); @@ -96,7 +101,7 @@ protected void fillAttributes(final Properties attributes) { attributes.setProperty("SUBJECT", emailTemplateData.getSubject()); attributes.setProperty("TYPE", emailTemplateData.getType()); - if (emailTemplateData.getType().equals(EmailTemplateHtml.HTML_TYPE)) { + if (EmailTemplateHtml.HTML_TYPE.equals(emailTemplateData.getType())) { attributes.setProperty("HTML_TYPE", "true"); } } 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 beb89cef1..b87da10d9 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleGraphQlResolverClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleGraphQlResolverClassGenerator.java @@ -117,7 +117,7 @@ private int getInsertPos(final PhpClass graphQlResolverClass) { LeafPsiElement.class ); for (final LeafPsiElement leafPsiElement: leafElements) { - if (!leafPsiElement.getText().equals(MagentoPhpClass.CLOSING_TAG)) { + if (!MagentoPhpClass.CLOSING_TAG.equals(leafPsiElement.getText())) { continue; } insertPos = leafPsiElement.getTextOffset(); @@ -128,6 +128,10 @@ private int getInsertPos(final PhpClass graphQlResolverClass) { private PhpClass createGraphQlResolverClass(final String actionName) { PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(graphQlResolverFileData.getGraphQlResolverModule()); + + if (parentDirectory == null) { + return null; + } final String[] graphQlResolverDirectories = graphQlResolverFileData .getGraphQlResolverDirectory().split(File.separator); for (final String graphQlResolverDirectory: graphQlResolverDirectories) { 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 a83ba7724..0313ebb1c 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleViewModelClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleViewModelClassGenerator.java @@ -58,6 +58,7 @@ public ModuleViewModelClassGenerator( * @param actionName String * @return PsiFile */ + @Override public PsiFile generate(final String actionName) { final PhpClass block = GetPhpClassByFQN.getInstance(project).execute(getViewModelFqn()); final String errorTitle = commonBundle.message("common.error"); @@ -106,6 +107,10 @@ private String getViewModelFqn() { private PhpFile createViewModelClass(final String actionName) { PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(getViewModelModule()); + + if (parentDirectory == null) { + return null; + } final String[] viewModelDirectories = viewModelFileData.getViewModelDirectory() .split(File.separator); for (final String viewModelDirectory: viewModelDirectories) { @@ -128,6 +133,7 @@ private PhpFile createViewModelClass(final String actionName) { return (PhpFile) viewModelFile; } + @Override protected void fillAttributes(final Properties attributes) { final String viewModelClassName = viewModelFileData.getViewModelClassName(); attributes.setProperty("NAME", viewModelClassName); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/NewEntityLayoutGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/NewEntityLayoutGenerator.java index 4587a05d2..7fdfe0f47 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/NewEntityLayoutGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/NewEntityLayoutGenerator.java @@ -88,6 +88,10 @@ public PsiFile generate(final @NotNull String actionName) { final PsiDirectory moduleBaseDir = moduleIndex.getModuleDirectoryByModuleName( data.getModuleName() ); + + if (moduleBaseDir == null) { + return null; + } final PsiDirectory layoutBaseDir = directoryGenerator.findOrCreateSubdirectories( moduleBaseDir, file.getDirectory() 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 da453a7a7..8ecfe692e 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ObserverClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ObserverClassGenerator.java @@ -122,7 +122,7 @@ private int getInsertPos(final PhpClass observerClass) { LeafPsiElement.class ); for (final LeafPsiElement leafPsiElement: leafElements) { - if (!leafPsiElement.getText().equals(MagentoPhpClass.CLOSING_TAG)) { + if (!MagentoPhpClass.CLOSING_TAG.equals(leafPsiElement.getText())) { continue; } insertPos = leafPsiElement.getTextOffset(); @@ -133,6 +133,10 @@ private int getInsertPos(final PhpClass observerClass) { private PhpClass createObserverClass(final String actionName) { PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(observerFileData.getObserverModule()); + + if (parentDirectory == null) { + return null; + } final String[] observerDirectories = observerFileData.getObserverDirectory() .split(File.separator); for (final String observerDirectory: observerDirectories) { 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 4be05b573..94f092bb2 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/OverrideInThemeGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/OverrideInThemeGenerator.java @@ -69,6 +69,10 @@ public void execute(final PsiFile baseFile, final String themeName, final boolea final ModuleIndex moduleIndex = new ModuleIndex(project); PsiDirectory directory = moduleIndex.getModuleDirectoryByModuleName(themeName); + + if (directory == null) { + return; + } directory = getTargetDirectory(directory, pathComponents); if (directory.findFile(baseFile.getName()) != null) { @@ -134,11 +138,13 @@ private PsiDirectory getTargetDirectory( PsiDirectory directory, //NOPMD final List pathComponents ) { + PsiDirectory result = directory; final DirectoryGenerator generator = DirectoryGenerator.getInstance(); + for (final String directoryName : pathComponents) { - directory = generator.findOrCreateSubdirectory(directory, directoryName); + result = generator.findOrCreateSubdirectory(directory, directoryName); } - return directory; + return result; } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/PhpFileGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/PhpFileGenerator.java index 2e7730f08..dccd91be2 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/PhpFileGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/PhpFileGenerator.java @@ -77,8 +77,16 @@ public PsiFile generate(final @NotNull String actionName) { return phpClass.getContainingFile(); } + final PsiDirectory moduleDirectory = moduleIndex.getModuleDirectoryByModuleName( + file.getModuleName() + ); + + if (moduleDirectory == null) { + onFileGenerated(null, actionName); + return null; + } final PsiDirectory fileBaseDir = directoryGenerator.findOrCreateSubdirectories( - moduleIndex.getModuleDirectoryByModuleName(file.getModuleName()), + moduleDirectory, file.getDirectory() ); 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 0ee99ae86..2977b6b9c 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java @@ -88,6 +88,7 @@ public PluginClassGenerator( * * @return PsiFile */ + @SuppressWarnings("PMD.CognitiveComplexity") @Override public PsiFile generate(final String actionName) { final PsiFile[] pluginFile = {null}; @@ -206,6 +207,10 @@ private boolean checkIfMethodExist( private PhpClass createPluginClass(final String actionName) { PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(getPluginModule()); + + if (parentDirectory == null) { + return null; + } final String[] pluginDirectories = pluginFileData.getPluginDirectory() .split(File.separator); for (final String pluginDirectory: pluginDirectories) { @@ -262,7 +267,7 @@ private int getInsertPos(final PhpClass pluginClass) { } for (final LeafPsiElement leafPsiElement: leafElements) { - if (!leafPsiElement.getText().equals(MagentoPhpClass.CLOSING_TAG)) { + if (!MagentoPhpClass.CLOSING_TAG.equals(leafPsiElement.getText())) { continue; } insertPos = leafPsiElement.getTextOffset(); 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 9e8c2f0c6..dc62f8f71 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/PreferenceClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/PreferenceClassGenerator.java @@ -82,6 +82,10 @@ public PsiFile generate(final String actionName) { private PhpClass createPluginClass(final String actionName) { PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(getPreferenceModule()); + + if (parentDirectory == null) { + return null; + } final String[] pluginDirectories = preferenceFileData.getPreferenceDirectory() .split(File.separator); for (final String pluginDirectory: pluginDirectories) { diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/QueryGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/QueryGenerator.java index 1fd09ef21..92984eb5c 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/QueryGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/QueryGenerator.java @@ -117,6 +117,10 @@ public PsiFile generate(final @NotNull String actionName) { private PhpClass createDataProviderClass(final @NotNull String actionName) { final PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(this.moduleName); + + if (parentDirectory == null) { + return null; + } final PsiDirectory dataProviderDirectory = directoryGenerator.findOrCreateSubdirectories(parentDirectory, data.getPath()); 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 3015e34e8..164d0153f 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormButtonBlockGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormButtonBlockGenerator.java @@ -123,6 +123,10 @@ public PsiFile generate(final @NotNull String actionName) { final PsiDirectory moduleBaseDir = moduleIndex.getModuleDirectoryByModuleName( buttonData.getButtonModule() ); + + if (moduleBaseDir == null) { + return null; + } final PsiDirectory baseDirectory = directoryGenerator.findOrCreateSubdirectories( moduleBaseDir, buttonData.getButtonDirectory() 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 5a5d3e5cb..3918ba998 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGenerator.java @@ -92,14 +92,16 @@ protected void generateButtonClasses(final @NotNull String actionName) { protected PsiFile createForm( final String actionName ) { - final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); - final FileFromTemplateGenerator fileFromTemplateGenerator = - new FileFromTemplateGenerator(project); - final String moduleName = data.getModuleName(); final PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(moduleName); + if (parentDirectory == null) { + return null; + } + final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); + final FileFromTemplateGenerator fileFromTemplateGenerator = + new FileFromTemplateGenerator(project); final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleViewDir); final String area = data.getFormArea(); 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 ef457393d..4b75ed7f5 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentGridXmlGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentGridXmlGenerator.java @@ -67,6 +67,9 @@ public PsiFile generate(final String actionName) { final PsiDirectory parentDirectory = moduleIndex.getModuleDirectoryByModuleName( moduleName ); + if (parentDirectory == null) { + return null; + } final String subdirectory = String.format( "%s/%s/%s", Package.moduleViewDir, 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 5a76a27f4..94c649e2b 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 @@ -31,12 +31,15 @@ public FindOrCreateAclXml(final Project project) { * @return PsiFile */ public PsiFile execute(final String actionName, final String moduleName) { + PsiDirectory parentDirectory = new ModuleIndex(project) + .getModuleDirectoryByModuleName(moduleName); + + if (parentDirectory == null) { + return null; + } final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = new FileFromTemplateGenerator(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 40f1bf0ac..9961ecaa0 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 @@ -45,6 +45,10 @@ public FindOrCreateCronGroupXml(final Project project) { */ public PsiFile execute(final String actionName, final String moduleName) { PsiDirectory parentDirectory = this.moduleIndex.getModuleDirectoryByModuleName(moduleName); + + if (parentDirectory == null) { + return null; + } final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleBaseAreaDir); 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 6a0e4800d..6d5251ccf 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 @@ -45,6 +45,10 @@ public FindOrCreateCrontabXml(final Project project) { */ public PsiFile execute(final String actionName, final String moduleName) { PsiDirectory parentDirectory = this.moduleIndex.getModuleDirectoryByModuleName(moduleName); + + if (parentDirectory == null) { + return null; + } final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleBaseAreaDir); 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 01c5258a2..676892255 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 @@ -54,6 +54,10 @@ public PsiFile execute(final @NotNull String actionName, final @NotNull String m if (dbSchemaWhitelistJson == null) { PsiDirectory parentDirectory = new ModuleIndex(project) .getModuleDirectoryByModuleName(moduleName); + + if (parentDirectory == null) { + return null; + } 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 2d70471ac..6625a5982 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 @@ -31,12 +31,15 @@ public FindOrCreateDbSchemaXmlUtil(final Project project) { * @return PsiFile */ public PsiFile execute(final String actionName, final String moduleName) { + PsiDirectory parentDirectory = new ModuleIndex(project) + .getModuleDirectoryByModuleName(moduleName); + + if (parentDirectory == null) { + return null; + } final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = new FileFromTemplateGenerator(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 854b59358..e16e63743 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 @@ -32,12 +32,15 @@ public FindOrCreateDiXml(final Project project) { * @return PsiFile */ public PsiFile execute(final String actionName, final String moduleName, final String area) { + PsiDirectory parentDirectory = new ModuleIndex(project) + .getModuleDirectoryByModuleName(moduleName); + + if (parentDirectory == null) { + return null; + } final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = new FileFromTemplateGenerator(project); - - PsiDirectory parentDirectory = new ModuleIndex(project) - .getModuleDirectoryByModuleName(moduleName); final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleBaseAreaDir); if (!getArea(area).equals(Areas.base)) { 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 f37e0e75b..480707829 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 @@ -45,6 +45,10 @@ public FindOrCreateEmailTemplatesXml(final Project project) { */ public PsiFile execute(final String actionName, final String moduleName) { PsiDirectory parentDirectory = this.moduleIndex.getModuleDirectoryByModuleName(moduleName); + + if (parentDirectory == null) { + return null; + } final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleBaseAreaDir); 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 23d44f2b1..5322cb9b0 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 @@ -36,11 +36,15 @@ public PsiFile execute( final String moduleName, final String area ) { + PsiDirectory parentDirectory = new ModuleIndex(project) + .getModuleDirectoryByModuleName(moduleName); + if (parentDirectory == null) { + return null; + } + final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = new FileFromTemplateGenerator(project); - PsiDirectory parentDirectory = new ModuleIndex(project) - .getModuleDirectoryByModuleName(moduleName); final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleBaseAreaDir); if (!getArea(area).equals(Areas.base)) { 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 e77bebfdd..177059235 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 @@ -43,12 +43,15 @@ public PsiFile execute( final String moduleName, final String area ) { + PsiDirectory parentDirectory = new ModuleIndex(project) + .getModuleDirectoryByModuleName(moduleName); + + if (parentDirectory == null) { + return null; + } final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = new FileFromTemplateGenerator(project); - - PsiDirectory parentDirectory = new ModuleIndex(project) - .getModuleDirectoryByModuleName(moduleName); final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleViewDir); fileDirectories.add(getArea(area).toString()); 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 d699ce927..943dd257a 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 @@ -31,12 +31,15 @@ public FindOrCreateMenuXml(final Project project) { * @return PsiFile */ public PsiFile execute(final String actionName, final String moduleName) { + PsiDirectory parentDirectory = new ModuleIndex(project) + .getModuleDirectoryByModuleName(moduleName); + + if (parentDirectory == null) { + return null; + } final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = new FileFromTemplateGenerator(project); - - PsiDirectory parentDirectory = new ModuleIndex(project) - .getModuleDirectoryByModuleName(moduleName); final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleBaseAreaDir); fileDirectories.add(Areas.adminhtml.toString()); 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 72a2d0781..b63862c8d 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 @@ -38,6 +38,10 @@ public FindOrCreateQueueXml(final Project project) { */ public PsiFile execute(final String actionName, final String moduleName) { PsiDirectory parentDirectory = this.moduleIndex.getModuleDirectoryByModuleName(moduleName); + + if (parentDirectory == null) { + return null; + } final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleBaseAreaDir); 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 385aef23a..426cd256f 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 @@ -32,12 +32,15 @@ public FindOrCreateRoutesXml(final Project project) { * @return PsiFile */ public PsiFile execute(final String actionName, final String moduleName, final String area) { + PsiDirectory parentDirectory = new ModuleIndex(project) + .getModuleDirectoryByModuleName(moduleName); + + if (parentDirectory == null) { + return null; + } final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance(); final FileFromTemplateGenerator fileFromTemplateGenerator = new FileFromTemplateGenerator(project); - - PsiDirectory parentDirectory = new ModuleIndex(project) - .getModuleDirectoryByModuleName(moduleName); final ArrayList fileDirectories = new ArrayList<>(); fileDirectories.add(Package.moduleBaseAreaDir); fileDirectories.add(getArea(area).toString()); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/xml/WebApiDeclarationGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/xml/WebApiDeclarationGenerator.java index d80ec91bf..16d3c32e8 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/xml/WebApiDeclarationGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/xml/WebApiDeclarationGenerator.java @@ -75,6 +75,19 @@ public WebApiDeclarationGenerator( public PsiFile generate(final @NotNull String actionName) { final PsiDirectory moduleDirectory = new ModuleIndex(project).getModuleDirectoryByModuleName(data.getModuleName()); + + if (moduleDirectory == null) { + JOptionPane.showMessageDialog( + null, + validatorBundle.message( + "validator.file.cantBeCreated", + "Web API XML file" + ), + commonBundle.message("common.error"), + JOptionPane.ERROR_MESSAGE + ); + return null; + } final PsiDirectory fileDirectory = directoryGenerator.findOrCreateSubdirectory( moduleDirectory, diff --git a/src/com/magento/idea/magento2plugin/actions/groups/NewModuleFileGroup.java b/src/com/magento/idea/magento2plugin/actions/groups/NewModuleFileGroup.java index 8d3db82df..e97d29bf0 100644 --- a/src/com/magento/idea/magento2plugin/actions/groups/NewModuleFileGroup.java +++ b/src/com/magento/idea/magento2plugin/actions/groups/NewModuleFileGroup.java @@ -14,6 +14,7 @@ import com.intellij.psi.PsiElement; import com.magento.idea.magento2plugin.MagentoIcons; import com.magento.idea.magento2plugin.actions.generation.util.IsClickedDirectoryInsideProject; +import com.magento.idea.magento2plugin.indexes.ModuleIndex; import com.magento.idea.magento2plugin.project.Settings; import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil; import javax.swing.Icon; @@ -45,7 +46,10 @@ public void update(final AnActionEvent event) { } final Project project = event.getData(PlatformDataKeys.PROJECT); - if (!IsClickedDirectoryInsideProject.getInstance() + + if (project == null + || !Settings.isEnabled(project) + || !IsClickedDirectoryInsideProject.getInstance() .execute(project, (PsiDirectory) psiElement)) { event.getPresentation().setVisible(false); return; @@ -53,10 +57,17 @@ public void update(final AnActionEvent event) { final String moduleName = GetModuleNameByDirectoryUtil .execute((PsiDirectory) psiElement, project); - if (Settings.isEnabled(project) && moduleName != null) { - event.getPresentation().setVisible(true); - return; + + if (moduleName != null) { + final PsiDirectory moduleDirectory = new ModuleIndex(project) + .getModuleDirectoryByModuleName(moduleName); + + if (moduleDirectory != null) { + event.getPresentation().setVisible(true); + return; + } } + event.getPresentation().setVisible(false); } } diff --git a/src/com/magento/idea/magento2plugin/indexes/ModuleIndex.java b/src/com/magento/idea/magento2plugin/indexes/ModuleIndex.java index c3facb976..f008a95c1 100644 --- a/src/com/magento/idea/magento2plugin/indexes/ModuleIndex.java +++ b/src/com/magento/idea/magento2plugin/indexes/ModuleIndex.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.jetbrains.annotations.Nullable; public final class ModuleIndex { @@ -116,7 +117,7 @@ private List getNames( * @param moduleName String * @return PsiDirectory */ - public PsiDirectory getModuleDirectoryByModuleName(final String moduleName) { + public @Nullable PsiDirectory getModuleDirectoryByModuleName(final String moduleName) { final FileBasedIndex index = FileBasedIndex .getInstance(); final Collection files = index.getContainingFiles( @@ -126,6 +127,10 @@ public PsiDirectory getModuleDirectoryByModuleName(final String moduleName) { GlobalSearchScope.allScope(project), PhpFileType.INSTANCE )); + + if (files.isEmpty()) { + return null; + } final VirtualFile virtualFile = files.iterator().next(); return PsiManager.getInstance(project).findDirectory(virtualFile.getParent());