Skip to content

Commit 1837c77

Browse files
authored
Merge pull request #830 from bohdan-harniuk/bugfix/630-method-designed-for-fully-qualified-names-only
Bugfix/630 method designed for fully qualified names only
2 parents 1b5eca5 + 6b7a9bf commit 1837c77

File tree

4 files changed

+79
-24
lines changed

4 files changed

+79
-24
lines changed

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)