Skip to content

Commit 99d8e4c

Browse files
Merge pull request #844 from Iamwade/633-no-such-element-exception-when-creating-new-controller
633: Fixed NoSuchElementException when creating new controller
2 parents 3c95b7c + 1f85fc6 commit 99d8e4c

35 files changed

+213
-46
lines changed

src/com/magento/idea/magento2plugin/actions/generation/dialog/NewControllerDialog.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,12 +249,13 @@ private String getNamespace() {
249249
);
250250

251251
return String.format(
252-
"%s%s%s%s%s%s",
252+
"%s%s%s%s%s%s%s",
253253
parts[0],
254254
Package.fqnSeparator,
255255
parts[1],
256256
Package.fqnSeparator,
257257
directoryPart,
258+
Package.fqnSeparator,
258259
controllerPart
259260
);
260261
}

src/com/magento/idea/magento2plugin/actions/generation/generator/CLICommandClassGenerator.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.magento.idea.magento2plugin.magento.files.CLICommandTemplate;
1919
import java.util.Properties;
2020
import org.jetbrains.annotations.NotNull;
21+
import org.jetbrains.annotations.Nullable;
2122

2223
@SuppressWarnings({
2324
"PMD.AvoidUncheckedExceptionsInSignatures",
@@ -69,11 +70,17 @@ public PsiFile generate(final String actionName) throws RuntimeException {
6970
return cliCommandFile;
7071
}
7172

72-
private PhpFile createCLICommandClass(final String actionName) {
73+
private @Nullable PhpFile createCLICommandClass(final String actionName) {
74+
final PsiDirectory parentDirectory = getParentDirectory();
75+
76+
if (parentDirectory == null) {
77+
return null;
78+
}
79+
7380
final PsiFile cliCommandFile = fileGenerator.generate(
7481
this.getCLICommandTemplate(),
7582
getAttributes(),
76-
this.getParentDirectory(),
83+
parentDirectory,
7784
actionName
7885
);
7986

@@ -82,9 +89,14 @@ private PhpFile createCLICommandClass(final String actionName) {
8289

8390
private PsiDirectory getParentDirectory() {
8491
final String moduleName = this.phpClassData.getModuleName();
85-
final String[] subDirectories = this.phpClassData.getParentDirectory().split("/");
8692
PsiDirectory parentDirectory = new ModuleIndex(project)
8793
.getModuleDirectoryByModuleName(moduleName);
94+
95+
if (parentDirectory == null) {
96+
return null;
97+
}
98+
final String[] subDirectories = this.phpClassData.getParentDirectory().split("/");
99+
88100
for (final String subDirectory : subDirectories) {
89101
parentDirectory = dirGenerator.findOrCreateSubdirectory(parentDirectory, subDirectory);
90102
}

src/com/magento/idea/magento2plugin/actions/generation/generator/CronjobClassGenerator.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,16 @@ protected void fillAttributes(final Properties attributes) {
8989
* @return PhpFile
9090
*/
9191
private PhpFile createCronjobClass(final String actionName) {
92-
final String cronjobClassName = this.cronjobClassData.getClassName();
9392
final String moduleName = this.cronjobClassData.getModuleName();
94-
final String[] cronjobSubDirectories = this.cronjobClassData.getDirectory().split("/");
9593
PsiDirectory parentDirectory = new ModuleIndex(project)
9694
.getModuleDirectoryByModuleName(moduleName);
9795

96+
if (parentDirectory == null) {
97+
return null;
98+
}
99+
final String cronjobClassName = this.cronjobClassData.getClassName();
100+
final String[] cronjobSubDirectories = this.cronjobClassData.getDirectory().split("/");
101+
98102
for (final String cronjobSubDirectory: cronjobSubDirectories) {
99103
parentDirectory = directoryGenerator
100104
.findOrCreateSubdirectory(parentDirectory, cronjobSubDirectory);

src/com/magento/idea/magento2plugin/actions/generation/generator/MessageQueueClassGenerator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ protected void fillAttributes(final Properties attributes) {
114114
private PhpClass createHandlerClass(final String actionName) {
115115
PsiDirectory parentDirectory = new ModuleIndex(project)
116116
.getModuleDirectoryByModuleName(this.moduleName);
117+
118+
if (parentDirectory == null) {
119+
return null;
120+
}
117121
final PsiFile handlerFile;
118122
final String[] handlerDirectories = messageQueueClassDataName.getPath().split(
119123
File.separator

src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleBlockClassGenerator.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public ModuleBlockClassGenerator(
5858
* @param actionName String
5959
* @return PsiFile
6060
*/
61+
@Override
6162
public PsiFile generate(final String actionName) {
6263
final String errorTitle = commonBundle.message("common.error");
6364
final PhpClass block = GetPhpClassByFQN.getInstance(project).execute(getBlockFqn());
@@ -106,7 +107,12 @@ private String getBlockFqn() {
106107
private PhpFile createBlockClass(final String actionName) {
107108
PsiDirectory parentDirectory = new ModuleIndex(project)
108109
.getModuleDirectoryByModuleName(getBlockModule());
110+
111+
if (parentDirectory == null) {
112+
return null;
113+
}
109114
final String[] blockDirectories = blockFileData.getBlockDirectory().split(File.separator);
115+
110116
for (final String blockDirectory: blockDirectories) {
111117
parentDirectory = directoryGenerator.findOrCreateSubdirectory(
112118
parentDirectory,
@@ -127,6 +133,7 @@ private PhpFile createBlockClass(final String actionName) {
127133
return (PhpFile) blockFile;
128134
}
129135

136+
@Override
130137
protected void fillAttributes(final Properties attributes) {
131138
final String blockClassName = blockFileData.getBlockClassName();
132139
attributes.setProperty("NAME", blockClassName);

src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleComposerJsonGenerator.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.intellij.openapi.project.Project;
1111
import com.intellij.openapi.util.Pair;
1212
import com.intellij.openapi.vfs.VirtualFile;
13+
import com.intellij.psi.PsiDirectory;
1314
import com.intellij.psi.PsiFile;
1415
import com.magento.idea.magento2plugin.actions.generation.data.ModuleComposerJsonData;
1516
import com.magento.idea.magento2plugin.actions.generation.generator.data.ModuleDirectoriesData;
@@ -120,8 +121,8 @@ private String getDependenciesString(final List dependenciesList) {
120121
final Object[] dependencies = dependenciesList.toArray();
121122
result = result.concat(ComposerJson.DEFAULT_DEPENDENCY);
122123
final boolean noDependency =
123-
dependencies.length == 1 && dependencies[0].equals(
124-
ComposerJson.NO_DEPENDENCY_LABEL
124+
dependencies.length == 1 && ComposerJson.NO_DEPENDENCY_LABEL.equals(
125+
dependencies[0]
125126
);
126127
if (dependencies.length == 0 || noDependency) {
127128
result = result.concat("\n");
@@ -161,8 +162,12 @@ private Pair<String, String> getDependencyData(
161162
"_-", "/"
162163
);
163164
try {
164-
final PsiFile virtualFile = moduleIndex.getModuleDirectoryByModuleName(dependency)
165-
.findFile(ComposerJson.FILE_NAME);
165+
final PsiDirectory moduleDir = moduleIndex.getModuleDirectoryByModuleName(dependency);
166+
167+
if (moduleDir == null) {
168+
return Pair.create("", "");
169+
}
170+
final PsiFile virtualFile = moduleDir.findFile(ComposerJson.FILE_NAME);
166171

167172
if (virtualFile != null) { //NOPMD
168173
final VirtualFile composerJsonFile = virtualFile.getVirtualFile();

src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleControllerClassGenerator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,10 @@ private String getControllerFqn() {
148148
private PhpClass createControllerClass(final String actionName) {
149149
PsiDirectory parentDirectory = new ModuleIndex(project)
150150
.getModuleDirectoryByModuleName(getControllerModule());
151+
152+
if (parentDirectory == null) {
153+
return null;
154+
}
151155
final PsiFile controllerFile;
152156
final String[] controllerDirectories = data.getActionDirectory().split(
153157
File.separator

src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleEmailTemplateHtmlGenerator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public ModuleEmailTemplateHtmlGenerator(
5151
* @param actionName Action name
5252
* @return PsiFile
5353
*/
54+
@Override
5455
public PsiFile generate(final String actionName) {
5556
final PsiFile templateFile = FileBasedIndexUtil.findModuleViewFile(
5657
this.emailTemplateData.getFileName(),
@@ -67,6 +68,10 @@ public PsiFile generate(final String actionName) {
6768
PsiDirectory parentDirectory = this.moduleIndex.getModuleDirectoryByModuleName(
6869
this.emailTemplateData.getModule()
6970
);
71+
72+
if (parentDirectory == null) {
73+
return null;
74+
}
7075
final ArrayList<String> fileDirectories = new ArrayList<>();
7176

7277
fileDirectories.add(Package.moduleViewDir);
@@ -96,7 +101,7 @@ protected void fillAttributes(final Properties attributes) {
96101
attributes.setProperty("SUBJECT", emailTemplateData.getSubject());
97102
attributes.setProperty("TYPE", emailTemplateData.getType());
98103

99-
if (emailTemplateData.getType().equals(EmailTemplateHtml.HTML_TYPE)) {
104+
if (EmailTemplateHtml.HTML_TYPE.equals(emailTemplateData.getType())) {
100105
attributes.setProperty("HTML_TYPE", "true");
101106
}
102107
}

src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleGraphQlResolverClassGenerator.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ private int getInsertPos(final PhpClass graphQlResolverClass) {
117117
LeafPsiElement.class
118118
);
119119
for (final LeafPsiElement leafPsiElement: leafElements) {
120-
if (!leafPsiElement.getText().equals(MagentoPhpClass.CLOSING_TAG)) {
120+
if (!MagentoPhpClass.CLOSING_TAG.equals(leafPsiElement.getText())) {
121121
continue;
122122
}
123123
insertPos = leafPsiElement.getTextOffset();
@@ -128,6 +128,10 @@ private int getInsertPos(final PhpClass graphQlResolverClass) {
128128
private PhpClass createGraphQlResolverClass(final String actionName) {
129129
PsiDirectory parentDirectory = new ModuleIndex(project)
130130
.getModuleDirectoryByModuleName(graphQlResolverFileData.getGraphQlResolverModule());
131+
132+
if (parentDirectory == null) {
133+
return null;
134+
}
131135
final String[] graphQlResolverDirectories = graphQlResolverFileData
132136
.getGraphQlResolverDirectory().split(File.separator);
133137
for (final String graphQlResolverDirectory: graphQlResolverDirectories) {

src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleViewModelClassGenerator.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public ModuleViewModelClassGenerator(
5858
* @param actionName String
5959
* @return PsiFile
6060
*/
61+
@Override
6162
public PsiFile generate(final String actionName) {
6263
final PhpClass block = GetPhpClassByFQN.getInstance(project).execute(getViewModelFqn());
6364
final String errorTitle = commonBundle.message("common.error");
@@ -106,6 +107,10 @@ private String getViewModelFqn() {
106107
private PhpFile createViewModelClass(final String actionName) {
107108
PsiDirectory parentDirectory = new ModuleIndex(project)
108109
.getModuleDirectoryByModuleName(getViewModelModule());
110+
111+
if (parentDirectory == null) {
112+
return null;
113+
}
109114
final String[] viewModelDirectories = viewModelFileData.getViewModelDirectory()
110115
.split(File.separator);
111116
for (final String viewModelDirectory: viewModelDirectories) {
@@ -128,6 +133,7 @@ private PhpFile createViewModelClass(final String actionName) {
128133
return (PhpFile) viewModelFile;
129134
}
130135

136+
@Override
131137
protected void fillAttributes(final Properties attributes) {
132138
final String viewModelClassName = viewModelFileData.getViewModelClassName();
133139
attributes.setProperty("NAME", viewModelClassName);

src/com/magento/idea/magento2plugin/actions/generation/generator/NewEntityLayoutGenerator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ public PsiFile generate(final @NotNull String actionName) {
8888
final PsiDirectory moduleBaseDir = moduleIndex.getModuleDirectoryByModuleName(
8989
data.getModuleName()
9090
);
91+
92+
if (moduleBaseDir == null) {
93+
return null;
94+
}
9195
final PsiDirectory layoutBaseDir = directoryGenerator.findOrCreateSubdirectories(
9296
moduleBaseDir,
9397
file.getDirectory()

src/com/magento/idea/magento2plugin/actions/generation/generator/ObserverClassGenerator.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ private int getInsertPos(final PhpClass observerClass) {
122122
LeafPsiElement.class
123123
);
124124
for (final LeafPsiElement leafPsiElement: leafElements) {
125-
if (!leafPsiElement.getText().equals(MagentoPhpClass.CLOSING_TAG)) {
125+
if (!MagentoPhpClass.CLOSING_TAG.equals(leafPsiElement.getText())) {
126126
continue;
127127
}
128128
insertPos = leafPsiElement.getTextOffset();
@@ -133,6 +133,10 @@ private int getInsertPos(final PhpClass observerClass) {
133133
private PhpClass createObserverClass(final String actionName) {
134134
PsiDirectory parentDirectory = new ModuleIndex(project)
135135
.getModuleDirectoryByModuleName(observerFileData.getObserverModule());
136+
137+
if (parentDirectory == null) {
138+
return null;
139+
}
136140
final String[] observerDirectories = observerFileData.getObserverDirectory()
137141
.split(File.separator);
138142
for (final String observerDirectory: observerDirectories) {

src/com/magento/idea/magento2plugin/actions/generation/generator/OverrideInThemeGenerator.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ public void execute(final PsiFile baseFile, final String themeName, final boolea
6969

7070
final ModuleIndex moduleIndex = new ModuleIndex(project);
7171
PsiDirectory directory = moduleIndex.getModuleDirectoryByModuleName(themeName);
72+
73+
if (directory == null) {
74+
return;
75+
}
7276
directory = getTargetDirectory(directory, pathComponents);
7377

7478
if (directory.findFile(baseFile.getName()) != null) {
@@ -134,11 +138,13 @@ private PsiDirectory getTargetDirectory(
134138
PsiDirectory directory, //NOPMD
135139
final List<String> pathComponents
136140
) {
141+
PsiDirectory result = directory;
137142
final DirectoryGenerator generator = DirectoryGenerator.getInstance();
143+
138144
for (final String directoryName : pathComponents) {
139-
directory = generator.findOrCreateSubdirectory(directory, directoryName);
145+
result = generator.findOrCreateSubdirectory(directory, directoryName);
140146
}
141147

142-
return directory;
148+
return result;
143149
}
144150
}

src/com/magento/idea/magento2plugin/actions/generation/generator/PhpFileGenerator.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,16 @@ public PsiFile generate(final @NotNull String actionName) {
7777
return phpClass.getContainingFile();
7878
}
7979

80+
final PsiDirectory moduleDirectory = moduleIndex.getModuleDirectoryByModuleName(
81+
file.getModuleName()
82+
);
83+
84+
if (moduleDirectory == null) {
85+
onFileGenerated(null, actionName);
86+
return null;
87+
}
8088
final PsiDirectory fileBaseDir = directoryGenerator.findOrCreateSubdirectories(
81-
moduleIndex.getModuleDirectoryByModuleName(file.getModuleName()),
89+
moduleDirectory,
8290
file.getDirectory()
8391
);
8492

src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ public PluginClassGenerator(
8888
*
8989
* @return PsiFile
9090
*/
91+
@SuppressWarnings("PMD.CognitiveComplexity")
9192
@Override
9293
public PsiFile generate(final String actionName) {
9394
final PsiFile[] pluginFile = {null};
@@ -206,6 +207,10 @@ private boolean checkIfMethodExist(
206207
private PhpClass createPluginClass(final String actionName) {
207208
PsiDirectory parentDirectory = new ModuleIndex(project)
208209
.getModuleDirectoryByModuleName(getPluginModule());
210+
211+
if (parentDirectory == null) {
212+
return null;
213+
}
209214
final String[] pluginDirectories = pluginFileData.getPluginDirectory()
210215
.split(File.separator);
211216
for (final String pluginDirectory: pluginDirectories) {
@@ -262,7 +267,7 @@ private int getInsertPos(final PhpClass pluginClass) {
262267
}
263268

264269
for (final LeafPsiElement leafPsiElement: leafElements) {
265-
if (!leafPsiElement.getText().equals(MagentoPhpClass.CLOSING_TAG)) {
270+
if (!MagentoPhpClass.CLOSING_TAG.equals(leafPsiElement.getText())) {
266271
continue;
267272
}
268273
insertPos = leafPsiElement.getTextOffset();

src/com/magento/idea/magento2plugin/actions/generation/generator/PreferenceClassGenerator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ public PsiFile generate(final String actionName) {
8282
private PhpClass createPluginClass(final String actionName) {
8383
PsiDirectory parentDirectory = new ModuleIndex(project)
8484
.getModuleDirectoryByModuleName(getPreferenceModule());
85+
86+
if (parentDirectory == null) {
87+
return null;
88+
}
8589
final String[] pluginDirectories = preferenceFileData.getPreferenceDirectory()
8690
.split(File.separator);
8791
for (final String pluginDirectory: pluginDirectories) {

src/com/magento/idea/magento2plugin/actions/generation/generator/QueryGenerator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ public PsiFile generate(final @NotNull String actionName) {
117117
private PhpClass createDataProviderClass(final @NotNull String actionName) {
118118
final PsiDirectory parentDirectory = new ModuleIndex(project)
119119
.getModuleDirectoryByModuleName(this.moduleName);
120+
121+
if (parentDirectory == null) {
122+
return null;
123+
}
120124
final PsiDirectory dataProviderDirectory =
121125
directoryGenerator.findOrCreateSubdirectories(parentDirectory, data.getPath());
122126

src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormButtonBlockGenerator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@ public PsiFile generate(final @NotNull String actionName) {
123123
final PsiDirectory moduleBaseDir = moduleIndex.getModuleDirectoryByModuleName(
124124
buttonData.getButtonModule()
125125
);
126+
127+
if (moduleBaseDir == null) {
128+
return null;
129+
}
126130
final PsiDirectory baseDirectory = directoryGenerator.findOrCreateSubdirectories(
127131
moduleBaseDir,
128132
buttonData.getButtonDirectory()

src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGenerator.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,14 +92,16 @@ protected void generateButtonClasses(final @NotNull String actionName) {
9292
protected PsiFile createForm(
9393
final String actionName
9494
) {
95-
final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance();
96-
final FileFromTemplateGenerator fileFromTemplateGenerator =
97-
new FileFromTemplateGenerator(project);
98-
9995
final String moduleName = data.getModuleName();
10096
final PsiDirectory parentDirectory = new ModuleIndex(project)
10197
.getModuleDirectoryByModuleName(moduleName);
10298

99+
if (parentDirectory == null) {
100+
return null;
101+
}
102+
final DirectoryGenerator directoryGenerator = DirectoryGenerator.getInstance();
103+
final FileFromTemplateGenerator fileFromTemplateGenerator =
104+
new FileFromTemplateGenerator(project);
103105
final ArrayList<String> fileDirectories = new ArrayList<>();
104106
fileDirectories.add(Package.moduleViewDir);
105107
final String area = data.getFormArea();

0 commit comments

Comments
 (0)