Skip to content

Commit 3227aac

Browse files
Merge branch '4.2.1-develop' of github.com:magento/magento2-phpstorm-plugin into preparing-release-4-2-1
2 parents 49295c2 + 1837c77 commit 3227aac

File tree

7 files changed

+111
-35
lines changed

7 files changed

+111
-35
lines changed

resources/magento2/validation.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,4 @@ validator.db.invalidTableNameLength=Table name must contain up to 64 characters
3838
validator.lowerSnakeCase=The {0} field must be of the lower snake case format
3939
validator.menuIdentifierInvalid=The menu identifier is invalid
4040
validator.someFieldsHaveErrors=Please, check the dialog. Some fields have errors
41+
validator.dbSchema.invalidColumnType=Invalid ''{0}'' column type specified

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import com.intellij.openapi.project.Project;
99
import com.intellij.psi.PsiDirectory;
10+
import com.intellij.psi.PsiFile;
1011
import com.magento.idea.magento2plugin.actions.generation.NewDbSchemaAction;
1112
import com.magento.idea.magento2plugin.actions.generation.data.DbSchemaXmlData;
1213
import com.magento.idea.magento2plugin.actions.generation.data.ui.ComboBoxItemData;
@@ -143,7 +144,11 @@ private void onOK() {
143144
getTableComment(),
144145
getColumns()
145146
);
146-
generateDbSchemaXmlFile(dbSchemaXmlData);
147+
final PsiFile dbSchemaXmlFile = generateDbSchemaXmlFile(dbSchemaXmlData);
148+
149+
if (dbSchemaXmlFile == null) {
150+
return;
151+
}
147152
generateWhitelistJsonFile(dbSchemaXmlData);
148153
}
149154
exit();
@@ -170,8 +175,8 @@ public static void open(
170175
*
171176
* @param dbSchemaXmlData DbSchemaXmlData
172177
*/
173-
private void generateDbSchemaXmlFile(final @NotNull DbSchemaXmlData dbSchemaXmlData) {
174-
new DbSchemaXmlGenerator(
178+
private PsiFile generateDbSchemaXmlFile(final @NotNull DbSchemaXmlData dbSchemaXmlData) {
179+
return new DbSchemaXmlGenerator(
175180
dbSchemaXmlData,
176181
project,
177182
moduleName

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

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,28 @@
1515
import com.intellij.psi.xml.XmlTag;
1616
import com.magento.idea.magento2plugin.actions.generation.data.DbSchemaXmlData;
1717
import com.magento.idea.magento2plugin.actions.generation.generator.util.FindOrCreateDbSchemaXmlUtil;
18+
import com.magento.idea.magento2plugin.bundles.CommonBundle;
19+
import com.magento.idea.magento2plugin.bundles.ValidatorBundle;
1820
import com.magento.idea.magento2plugin.magento.files.ModuleDbSchemaXml;
1921
import com.magento.idea.magento2plugin.magento.packages.database.ColumnAttributes;
2022
import com.magento.idea.magento2plugin.magento.packages.database.TableColumnTypes;
2123
import java.util.HashMap;
22-
import java.util.InputMismatchException;
2324
import java.util.LinkedHashMap;
2425
import java.util.LinkedList;
2526
import java.util.List;
2627
import java.util.Map;
2728
import java.util.Properties;
29+
import javax.swing.JOptionPane;
2830
import org.jetbrains.annotations.NotNull;
2931

3032
public class DbSchemaXmlGenerator extends FileGenerator {
33+
3134
private final Project project;
3235
private final String moduleName;
3336
private final DbSchemaXmlData dbSchemaXmlData;
3437
private final FindOrCreateDbSchemaXmlUtil findOrCreateDbSchemaXmlUtil;
38+
private final ValidatorBundle validatorBundle;
39+
private final CommonBundle commonBundle;
3540

3641
private final List<XmlTag> newTagsQueue;
3742
private final Map<XmlTag, XmlTag> newTagsChildParentRelationMap;
@@ -52,6 +57,8 @@ public DbSchemaXmlGenerator(
5257
this.project = project;
5358
this.moduleName = moduleName;
5459
this.dbSchemaXmlData = dbSchemaXmlData;
60+
this.validatorBundle = new ValidatorBundle();
61+
this.commonBundle = new CommonBundle();
5562
findOrCreateDbSchemaXmlUtil = new FindOrCreateDbSchemaXmlUtil(project);
5663

5764
newTagsQueue = new LinkedList<>();
@@ -62,6 +69,7 @@ public DbSchemaXmlGenerator(
6269
@SuppressWarnings({
6370
"PMD.NPathComplexity",
6471
"PMD.CyclomaticComplexity",
72+
"PMD.CognitiveComplexity",
6573
"PMD.ExcessiveImports",
6674
"PMD.AvoidInstantiatingObjectsInLoops"
6775
})
@@ -99,32 +107,39 @@ public PsiFile generate(final String actionName) {
99107
primaryKeyData.putAll(columnData);
100108
}
101109

110+
final String columnName = columnData.get(ColumnAttributes.NAME.getName());
102111
final String columnTypeValue = columnData.get(ColumnAttributes.TYPE.getName());
103112
final TableColumnTypes columnType = TableColumnTypes.getByValue(columnTypeValue);
104113

105114
if (columnType == null) {
106-
throw new InputMismatchException(
107-
"Invalid column types provided. Should be compatible with "
108-
+ TableColumnTypes.class
115+
final String errorMessage = validatorBundle.message(
116+
"validator.dbSchema.invalidColumnType",
117+
columnName == null ? "" : columnName
118+
119+
);
120+
JOptionPane.showMessageDialog(
121+
null,
122+
errorMessage,
123+
commonBundle.message("common.error"),
124+
JOptionPane.ERROR_MESSAGE
109125
);
126+
return null;
110127
}
111128

112129
final Map<String, String> attributes = new LinkedHashMap<>();
113130
final List<String> allowedColumns = ModuleDbSchemaXml.getAllowedAttributes(columnType);
131+
114132
for (final Map.Entry<String, String> columnDataEntry : columnData.entrySet()) {
115133
if (allowedColumns.contains(columnDataEntry.getKey())
116134
&& !columnDataEntry.getValue().isEmpty()) {
117135
attributes.put(columnDataEntry.getKey(), columnDataEntry.getValue());
118136
}
119137
}
120-
final String columnIdentityValue =
121-
columnData.get(ColumnAttributes.NAME.getName());
122-
123138
findOrCreateTag(
124139
ModuleDbSchemaXml.XML_TAG_COLUMN,
125140
ColumnAttributes.NAME.getName(),
126141
tableTag,
127-
columnIdentityValue,
142+
columnName,
128143
attributes
129144
);
130145
}

src/com/magento/idea/magento2plugin/actions/generation/generator/code/util/ConvertPluginParamsToString.java

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import com.intellij.openapi.project.Project;
99
import com.intellij.openapi.util.text.StringUtil;
10+
import com.intellij.openapi.util.text.Strings;
1011
import com.intellij.psi.PsiElement;
1112
import com.jetbrains.php.codeInsight.PhpCodeInsightUtil;
1213
import com.jetbrains.php.config.PhpLanguageFeature;
@@ -42,7 +43,12 @@ private ConvertPluginParamsToString() {}
4243
*
4344
* @return String
4445
*/
45-
@SuppressWarnings({"PMD.NPathComplexity", "PMD.CyclomaticComplexity", "PMD.ConfusingTernary"})
46+
@SuppressWarnings({
47+
"PMD.NPathComplexity",
48+
"PMD.CyclomaticComplexity",
49+
"PMD.CognitiveComplexity",
50+
"PMD.ConfusingTernary"
51+
})
4652
public static String execute(
4753
final Collection<PsiElement> parameters,
4854
final @NotNull Plugin.PluginType type,
@@ -52,7 +58,11 @@ public static String execute(
5258
String returnType = PhpTypeMetadataParserUtil.getMethodReturnType(myMethod);
5359

5460
if (returnType != null && PhpClassGeneratorUtil.isValidFqn(returnType)) {
55-
returnType = PhpClassGeneratorUtil.getNameFromFqn(returnType);
61+
if (Strings.endsWith(returnType, "[]")) {
62+
returnType = "array";
63+
} else {
64+
returnType = PhpClassGeneratorUtil.getNameFromFqn(returnType);
65+
}
5666
}
5767
final Iterator<PsiElement> parametersIterator = parameters.iterator();
5868
int iterator = 0;
@@ -66,7 +76,19 @@ public static String execute(
6676
if (element instanceof Parameter) {
6777
String parameterText = PhpCodeUtil.paramToString(element);
6878

69-
if (parameterText.contains(Package.fqnSeparator)) {
79+
// Parameter has default value.
80+
if (parameterText.contains("=")) {
81+
final String[] paramParts = parameterText.split("=");
82+
parameterText = paramParts[0];
83+
parameterText += " = ";//NOPMD
84+
String defaultValue = paramParts[1];
85+
86+
if (defaultValue.contains(Package.fqnSeparator)) {
87+
final String[] fqnArray = defaultValue.split("\\\\");
88+
defaultValue = fqnArray[fqnArray.length - 1];
89+
}
90+
parameterText += defaultValue;//NOPMD
91+
} else if (parameterText.contains(Package.fqnSeparator)) {
7092
final String[] fqnArray = parameterText.split("\\\\");
7193
parameterText = fqnArray[fqnArray.length - 1];
7294
}

src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceExtractor.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
import com.jetbrains.php.lang.psi.elements.Parameter;
1010
import com.jetbrains.php.lang.psi.elements.PhpClass;
1111
import com.jetbrains.php.lang.psi.elements.PhpReturnType;
12+
import com.jetbrains.php.lang.psi.elements.impl.ClassConstImpl;
13+
import com.jetbrains.php.lang.psi.elements.impl.ClassConstantReferenceImpl;
14+
import com.jetbrains.php.lang.psi.elements.impl.ParameterImpl;
1215
import com.jetbrains.php.lang.psi.resolve.types.PhpType;
1316
import com.jetbrains.php.lang.psi.visitors.PhpElementVisitor;
1417
import java.util.Collection;
@@ -39,6 +42,7 @@ public void visitPhpClass(final PhpClass phpClass) {
3942
@Override
4043
public void visitPhpParameter(final Parameter parameter) {
4144
PhpClassReferenceExtractor.this.processParameterReference(parameter);
45+
PhpClassReferenceExtractor.this.processUsedForDefaultValueTypeReference(parameter);
4246
}
4347

4448
/**
@@ -77,6 +81,39 @@ public void processParameterReference(final @NotNull Parameter parameter) {
7781
this.processReference(getNameFromFqn(complexType), complexType, parameter);
7882
}
7983

84+
/**
85+
* Process reference for complex type if it is exists in the default parameter value.
86+
*
87+
* @param parameter Parameter
88+
*/
89+
public void processUsedForDefaultValueTypeReference(final @NotNull Parameter parameter) {
90+
if (!(parameter instanceof ParameterImpl)) {
91+
return;
92+
}
93+
final PsiElement defaultValue = parameter.getDefaultValue();
94+
95+
if (!(defaultValue instanceof ClassConstantReferenceImpl)) {
96+
return;
97+
}
98+
final PsiElement constant = ((ClassConstantReferenceImpl) defaultValue).resolve();
99+
100+
if (!(constant instanceof ClassConstImpl)) {
101+
return;
102+
}
103+
final PhpClass usedTypeClass = ((ClassConstImpl) constant).getContainingClass();
104+
105+
if (usedTypeClass == null) {
106+
return;
107+
}
108+
final String complexType = extractComplexType(usedTypeClass.getType());
109+
110+
if (complexType == null) {
111+
return;
112+
}
113+
114+
this.processReference(getNameFromFqn(complexType), complexType, parameter);
115+
}
116+
80117
/**
81118
* Process reference for non primitive return type.
82119
*

src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceResolver.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ protected void processReference(
8585
final @NotNull PsiElement identifier
8686
) {
8787
if (!PhpType.isPrimitiveType(name)) {
88-
this.myCandidatesToImportStorage.processReference(name, fqn, identifier);
88+
this.myCandidatesToImportStorage.processReference(name, fqn);
8989
}
9090
}
9191

@@ -142,22 +142,22 @@ private Map<String, String> importWithConflictResolve(
142142
referencesToReplace.put(name, originalFqn);
143143
} else {
144144
final String importedFqn = aliases.get(name);
145-
if (!PhpLangUtil.equalsClassNames(importedFqn, originalFqn)) {
146-
if (importedFqn != null) {
147-
final String originalName = PhpLangUtil.toShortName(originalFqn);
148-
final String fqnForOriginalName = aliases.get(originalName);
149-
if (fqnForOriginalName != null
150-
&& !PhpLangUtil.equalsClassNames(fqnForOriginalName, originalFqn)) {
151-
referencesToReplace.put(name, originalFqn);
152-
} else {
153-
referencesToReplace.put(name, originalName);
154-
if (fqnForOriginalName == null) {
155-
insertUseStatement(scopeHolder, originalName, originalFqn);
156-
}
157-
}
145+
146+
if (importedFqn != null
147+
&& !PhpLangUtil.equalsClassNames(importedFqn, originalFqn)) {
148+
final String originalName = PhpLangUtil.toShortName(originalFqn);
149+
final String fqnForOriginalName = aliases.get(originalName);
150+
if (fqnForOriginalName != null
151+
&& !PhpLangUtil.equalsClassNames(fqnForOriginalName, originalFqn)) {
152+
referencesToReplace.put(name, originalFqn);
158153
} else {
159-
insertUseStatement(scopeHolder, name, originalFqn);
154+
referencesToReplace.put(name, originalName);
155+
if (fqnForOriginalName == null) {
156+
insertUseStatement(scopeHolder, originalName, originalFqn);
157+
}
160158
}
159+
} else {
160+
insertUseStatement(scopeHolder, name, originalFqn);
161161
}
162162
}
163163
}

src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceStorage.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@
55

66
package com.magento.idea.magento2plugin.actions.generation.references;
77

8-
import com.intellij.psi.PsiElement;
9-
import com.jetbrains.php.refactoring.importReferences.PhpClassReferenceExtractor;
108
import gnu.trove.THashMap;
119
import java.util.Map;
1210
import java.util.Set;
1311
import org.jetbrains.annotations.NotNull;
1412
import org.jetbrains.annotations.Nullable;
1513

16-
public class PhpClassReferenceStorage extends PhpClassReferenceExtractor {
14+
public class PhpClassReferenceStorage {
1715

1816
private final Map<String, String> myReferences = new THashMap<>();
1917

@@ -22,12 +20,10 @@ public class PhpClassReferenceStorage extends PhpClassReferenceExtractor {
2220
*
2321
* @param name String
2422
* @param fqn String
25-
* @param identifier PsiElement
2623
*/
2724
protected void processReference(
2825
final @NotNull String name,
29-
final @NotNull String fqn,
30-
final @NotNull PsiElement identifier
26+
final @NotNull String fqn
3127
) {
3228
this.myReferences.put(name, fqn);
3329
}

0 commit comments

Comments
 (0)