Skip to content

Commit cf8b80f

Browse files
Merge branch '4.0.0-develop' of github.com:magento/magento2-phpstorm-plugin into entity-web-api-generation
2 parents e75cf41 + fcec11e commit cf8b80f

File tree

26 files changed

+624
-77
lines changed

26 files changed

+624
-77
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0).
66

77
## 4.0.0
88

9+
## 3.2.2
10+
11+
### Fixed
12+
13+
- New entity layout name and edit entity layout name inside it
14+
- `Java.lang.IllegalArgumentException` During adding a new method into an existing plugin
15+
916
## 3.2.1
1017

1118
### Fixed

resources/META-INF/plugin.xml

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -156,64 +156,72 @@
156156
<directoryProjectConfigurator implementation="com.magento.idea.magento2plugin.project.ProjectDetector"/>
157157

158158
<localInspection language="PHP" groupPath="PHP"
159-
shortName="PluginInspection" displayName="Inspection for the Plugin declaration"
160-
groupName="Magento 2"
159+
shortName="PluginInspection"
160+
bundle="magento2.inspection" key="inspection.displayName.PluginInspection"
161+
groupBundle="magento2.inspection" groupKey="inspection.group.name"
161162
enabledByDefault="true"
162163
level="ERROR"
163164
implementationClass="com.magento.idea.magento2plugin.inspections.php.PluginInspection"/>
164165

165166
<localInspection language="PHP" groupPath="PHP"
166167
shortName="ModuleDeclarationInRegistrationPhpInspection"
167-
displayName="Inspection for the Module declaration in the `registration.php` file"
168-
groupName="Magento 2"
168+
bundle="magento2.inspection" key="inspection.displayName.ModuleDeclarationInRegistrationPhpInspection"
169+
groupBundle="magento2.inspection" groupKey="inspection.group.name"
169170
enabledByDefault="true"
170171
level="ERROR"
171172
implementationClass="com.magento.idea.magento2plugin.inspections.php.ModuleDeclarationInRegistrationPhpInspection"/>
172173

173174
<localInspection language="XML" groupPath="XML"
174175
shortName="ObserverDeclarationInspection"
175-
displayName="Duplicated Observer Usage in events XML"
176-
groupName="Magento 2"
176+
bundle="magento2.inspection" key="inspection.displayName.ObserverDeclarationInspection"
177+
groupBundle="magento2.inspection" groupKey="inspection.group.name"
177178
enabledByDefault="true"
178179
level="WARNING"
179180
implementationClass="com.magento.idea.magento2plugin.inspections.xml.ObserverDeclarationInspection"/>
180181

181182
<localInspection language="XML" groupPath="XML"
182183
shortName="PluginDeclarationInspection"
183-
displayName="Duplicated Plugin Usage in di XML"
184-
groupName="Magento 2"
184+
bundle="magento2.inspection" key="inspection.displayName.PluginDeclarationInspection"
185+
groupBundle="magento2.inspection" groupKey="inspection.group.name"
185186
enabledByDefault="true"
186187
level="WARNING"
187188
implementationClass="com.magento.idea.magento2plugin.inspections.xml.PluginDeclarationInspection"/>
188189

189190
<localInspection language="XML" groupPath="XML"
190191
shortName="CacheableFalseInDefaultLayoutInspection"
191-
displayName="Inspection for disabled cache site-wide"
192-
groupName="Magento 2"
192+
bundle="magento2.inspection" key="inspection.displayName.CacheableFalseInDefaultLayoutInspection"
193+
groupBundle="magento2.inspection" groupKey="inspection.group.name"
193194
enabledByDefault="true" level="WARNING"
194195
implementationClass="com.magento.idea.magento2plugin.inspections.xml.CacheableFalseInDefaultLayoutInspection"/>
195196

196197
<localInspection language="XML" groupPath="XML"
197198
shortName="ModuleDeclarationInModuleXmlInspection"
198-
displayName="Inspection for the Module declaration in the `etc/module.xml` file"
199-
groupName="Magento 2"
199+
bundle="magento2.inspection" key="inspection.displayName.ModuleDeclarationInModuleXmlInspection"
200+
groupBundle="magento2.inspection" groupKey="inspection.group.name"
200201
enabledByDefault="true" level="ERROR"
201202
implementationClass="com.magento.idea.magento2plugin.inspections.xml.ModuleDeclarationInModuleXmlInspection"/>
202203

203204
<localInspection language="XML" groupPath="XML"
204205
shortName="AclResourceXmlInspection"
205-
displayName="Inspection for the Title XML required attribute in the `etc/acl.xml` file"
206-
groupName="Magento 2"
206+
bundle="magento2.inspection" key="inspection.displayName.AclResourceXmlInspection"
207+
groupBundle="magento2.inspection" groupKey="inspection.group.name"
207208
enabledByDefault="true" level="ERROR"
208209
implementationClass="com.magento.idea.magento2plugin.inspections.xml.AclResourceXmlInspection"/>
209210

210211
<localInspection language="XML" groupPath="XML"
211212
shortName="WebApiServiceInspection"
212-
displayName="Inspection for the Web API XML service declaration"
213-
groupName="Magento 2"
213+
bundle="magento2.inspection" key="inspection.displayName.WebApiServiceInspection"
214+
groupBundle="magento2.inspection" groupKey="inspection.group.name"
214215
enabledByDefault="true" level="WARNING"
215216
implementationClass="com.magento.idea.magento2plugin.inspections.xml.WebApiServiceInspection"/>
216217

218+
<localInspection language="XML" groupPath="XML"
219+
shortName="InvalidDiTypeInspection"
220+
bundle="magento2.inspection" key="inspection.displayName.InvalidDiTypeInspection"
221+
groupBundle="magento2.inspection" groupKey="inspection.group.name"
222+
enabledByDefault="true" level="WARNING"
223+
implementationClass="com.magento.idea.magento2plugin.inspections.xml.InvalidDependencyInjectionTypeInspection"/>
224+
217225
<internalFileTemplate name="Magento Composer JSON"/>
218226
<internalFileTemplate name="Magento Registration PHP"/>
219227
<internalFileTemplate name="Magento Module XML"/>

resources/META-INF/pluginIcon.svg

Lines changed: 5 additions & 39 deletions
Loading
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<!--
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
-->
7+
<html>
8+
<body>
9+
<p>
10+
Validates if all types inside the &lt;type/&gt; tag of di.xml files contains valid classes,
11+
interfaces, factories, proxies or virtual type names.
12+
</p>
13+
<p>This inspection checks name attribute of the &lt;type/&gt; tag and all arguments recursively which has xsi:type attribute value as object.</p>
14+
<p>This inspection supports next types:</p>
15+
<ul>
16+
<li>PHP classes</li>
17+
<li>PHP interfaces</li>
18+
<li>PHP classes or interfaces with added Factory or \Proxy suffixes</li>
19+
<li>Magento 2 Virtual Types names</li>
20+
</ul>
21+
</body>
22+
</html>

resources/magento2/inspection.properties

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
inspection.group.name=Magento 2
2+
inspection.displayName.PluginInspection=Inspection for the Plugin declaration
3+
inspection.displayName.ModuleDeclarationInRegistrationPhpInspection=Inspection for the Module declaration in the `registration.php` file
4+
inspection.displayName.ObserverDeclarationInspection=Duplicated Observer Usage in events XML
5+
inspection.displayName.PluginDeclarationInspection=Duplicated Plugin Usage in di XML
6+
inspection.displayName.CacheableFalseInDefaultLayoutInspection=Inspection for disabled cache site-wide
7+
inspection.displayName.ModuleDeclarationInModuleXmlInspection=Inspection for the Module declaration in the `etc/module.xml` file
8+
inspection.displayName.AclResourceXmlInspection=Inspection for the Title XML required attribute in the `etc/acl.xml` file
9+
inspection.displayName.WebApiServiceInspection=Inspection for the Web API XML service declaration
10+
inspection.displayName.InvalidDiTypeInspection=Invalid type configuration in the `etc/di.xml` file
111
inspection.plugin.duplicateInSameFile=The plugin name already used in this file. For more details see Inspection Description.
212
inspection.plugin.duplicateInOtherPlaces=The plugin name "{0}" for targeted "{1}" class is already used in the module "{2}" ({3} scope). For more details see Inspection Description.
313
inspection.plugin.disabledPluginDoesNotExist=This plugin does not exist to be disabled.

src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateMethodHandlerBase.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import gnu.trove.THashSet;
4545
import java.util.ArrayList;
4646
import java.util.Collection;
47-
import java.util.Collections;
4847
import java.util.Iterator;
4948
import java.util.List;
5049
import java.util.Locale;
@@ -318,18 +317,27 @@ public static Collection<PhpNamedElementNode> fixOrderToBeAsOriginalFiles(
318317
final PhpNamedElementNode... selected
319318
) {
320319
final List<PhpNamedElementNode> newSelected = ContainerUtil.newArrayList(selected);
321-
Collections.sort(newSelected, (o1, o2) -> {
320+
newSelected.sort((o1, o2) -> {
322321
final PsiElement psiElement = o1.getPsiElement();
323322
final PsiElement psiElement2 = o2.getPsiElement();
324323
final PsiFile containingFile = psiElement.getContainingFile();
325324
final PsiFile containingFile2 = psiElement2.getContainingFile();
326325
return containingFile.equals(containingFile2)
327-
? psiElement.getTextOffset() - psiElement2.getTextOffset()
328-
: containingFile.getName().compareTo(containingFile2.getName());
326+
? psiElement.getTextOffset() - psiElement2.getTextOffset()
327+
: getDocumentPosition(containingFile, containingFile2);
329328
});
330329
return newSelected;
331330
}
332331

332+
private static int getDocumentPosition(
333+
final PsiFile containingFile,
334+
final PsiFile containingFile2
335+
) {
336+
return containingFile.getVirtualFile().getPresentableUrl().compareTo(
337+
containingFile2.getVirtualFile().getPresentableUrl()
338+
);
339+
}
340+
333341
private static int getSuitableEditorPosition(final Editor editor, final PhpFile phpFile) {
334342
final PsiElement currElement = phpFile.findElementAt(editor.getCaretModel().getOffset());
335343
if (currElement != null) {
@@ -371,9 +379,9 @@ private static boolean isClassMember(final PsiElement element) {
371379
return false;
372380
}
373381
final IElementType elementType = element.getNode().getElementType();
374-
return elementType == PhpElementTypes.CLASS_FIELDS
375-
|| elementType == PhpElementTypes.CLASS_CONSTANTS
376-
|| elementType == PhpStubElementTypes.CLASS_METHOD;
382+
return elementType.equals(PhpElementTypes.CLASS_FIELDS)
383+
|| elementType.equals(PhpElementTypes.CLASS_CONSTANTS)
384+
|| elementType.equals(PhpStubElementTypes.CLASS_METHOD);
377385
}
378386

379387
private static int getNextPos(final PsiElement element) {

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
import com.magento.idea.magento2plugin.ui.FilteredComboBox;
5151
import com.magento.idea.magento2plugin.ui.table.TableGroupWrapper;
5252
import com.magento.idea.magento2plugin.util.CamelCaseToSnakeCase;
53-
import com.magento.idea.magento2plugin.util.FirstLetterToLowercaseUtil;
5453
import com.magento.idea.magento2plugin.util.magento.GetAclResourcesListUtil;
5554
import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil;
5655
import java.awt.Cursor;
@@ -445,7 +444,7 @@ private EntityCreatorContextData getEntityCreatorContextData(
445444
final String dtoInterfaceClassName = entityName.concat(DTO_INTERFACE_SUFFIX);
446445

447446
final String actionsPathPrefix = dialogData.getRoute() + File.separator
448-
+ FirstLetterToLowercaseUtil.convert(entityName) + File.separator;
447+
+ entityName.toLowerCase(Locale.getDefault()) + File.separator;
449448
final NamespaceBuilder dtoModelNamespace =
450449
new DataModelFile(moduleName, dtoClassName).getNamespaceBuilder();
451450
final NamespaceBuilder dtoInterfaceNamespace =
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.inspections.validator;
7+
8+
/**
9+
* All Inspections validators should implement this validator.
10+
*/
11+
public interface InspectionValidator {
12+
13+
/**
14+
* Validate if provided value acceptable by concrete validator implementation.
15+
*
16+
* @param value String
17+
*
18+
* @return boolean
19+
*/
20+
boolean validate(final String value);
21+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.inspections.validator;
7+
8+
public class NotEmptyValidator implements InspectionValidator {
9+
10+
@Override
11+
public boolean validate(final String value) {
12+
return value != null && !value.isEmpty();
13+
}
14+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.inspections.validator;
7+
8+
import com.intellij.openapi.project.Project;
9+
import com.jetbrains.php.PhpIndex;
10+
import com.jetbrains.php.lang.psi.elements.PhpClass;
11+
import java.util.Collection;
12+
import org.jetbrains.annotations.NotNull;
13+
14+
public class PhpClassExistenceValidator implements InspectionValidator {
15+
16+
private final PhpIndex phpIndex;
17+
18+
public PhpClassExistenceValidator(final @NotNull Project project) {
19+
phpIndex = PhpIndex.getInstance(project);
20+
}
21+
22+
@Override
23+
public boolean validate(final String value) {
24+
if (value == null) {
25+
return false;
26+
}
27+
final @NotNull Collection<PhpClass> classes = phpIndex.getClassesByFQN(value);
28+
final @NotNull Collection<PhpClass> interfaces = phpIndex.getInterfacesByFQN(value);
29+
30+
return !classes.isEmpty() || !interfaces.isEmpty();
31+
}
32+
}

0 commit comments

Comments
 (0)