From ce0f04fd60ec53c1317df272a10a6e3066099614 Mon Sep 17 00:00:00 2001 From: bohdan-harniuk Date: Wed, 1 Dec 2021 12:48:22 +0100 Subject: [PATCH 1/4] 630: Code refactoring --- .../generation/references/PhpClassReferenceResolver.java | 2 +- .../generation/references/PhpClassReferenceStorage.java | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceResolver.java b/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceResolver.java index ed952c129..6eb4601cd 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceResolver.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceResolver.java @@ -85,7 +85,7 @@ protected void processReference( final @NotNull PsiElement identifier ) { if (!PhpType.isPrimitiveType(name)) { - this.myCandidatesToImportStorage.processReference(name, fqn, identifier); + this.myCandidatesToImportStorage.processReference(name, fqn); } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceStorage.java b/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceStorage.java index 726988cc6..cba336224 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceStorage.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceStorage.java @@ -5,15 +5,13 @@ package com.magento.idea.magento2plugin.actions.generation.references; -import com.intellij.psi.PsiElement; -import com.jetbrains.php.refactoring.importReferences.PhpClassReferenceExtractor; import gnu.trove.THashMap; import java.util.Map; import java.util.Set; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class PhpClassReferenceStorage extends PhpClassReferenceExtractor { +public class PhpClassReferenceStorage { private final Map myReferences = new THashMap<>(); @@ -22,12 +20,10 @@ public class PhpClassReferenceStorage extends PhpClassReferenceExtractor { * * @param name String * @param fqn String - * @param identifier PsiElement */ protected void processReference( final @NotNull String name, - final @NotNull String fqn, - final @NotNull PsiElement identifier + final @NotNull String fqn ) { this.myReferences.put(name, fqn); } From 3fc2247c372c62b7cc098a2209df91481a54338a Mon Sep 17 00:00:00 2001 From: bohdan-harniuk Date: Tue, 7 Dec 2021 13:50:30 +0200 Subject: [PATCH 2/4] 630: Added default values support for all types of plugins --- .../util/ConvertPluginParamsToString.java | 14 ++++++- .../PhpClassReferenceExtractor.java | 37 +++++++++++++++++++ .../references/PhpClassReferenceResolver.java | 28 +++++++------- 3 files changed, 64 insertions(+), 15 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/code/util/ConvertPluginParamsToString.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/code/util/ConvertPluginParamsToString.java index c9d391603..56de40d0b 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/code/util/ConvertPluginParamsToString.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/code/util/ConvertPluginParamsToString.java @@ -66,7 +66,19 @@ public static String execute( if (element instanceof Parameter) { String parameterText = PhpCodeUtil.paramToString(element); - if (parameterText.contains(Package.fqnSeparator)) { + // Parameter has default value. + if (parameterText.contains("=")) { + final String[] paramParts = parameterText.split("="); + parameterText = paramParts[0]; + parameterText += " = "; + String defaultValue = paramParts[1]; + + if (defaultValue.contains(Package.fqnSeparator)) { + final String[] fqnArray = defaultValue.split("\\\\"); + defaultValue = fqnArray[fqnArray.length - 1]; + } + parameterText += defaultValue; + } else if (parameterText.contains(Package.fqnSeparator)) { final String[] fqnArray = parameterText.split("\\\\"); parameterText = fqnArray[fqnArray.length - 1]; } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceExtractor.java b/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceExtractor.java index 6766b38cb..78f08b0e2 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceExtractor.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceExtractor.java @@ -9,6 +9,9 @@ import com.jetbrains.php.lang.psi.elements.Parameter; import com.jetbrains.php.lang.psi.elements.PhpClass; import com.jetbrains.php.lang.psi.elements.PhpReturnType; +import com.jetbrains.php.lang.psi.elements.impl.ClassConstImpl; +import com.jetbrains.php.lang.psi.elements.impl.ClassConstantReferenceImpl; +import com.jetbrains.php.lang.psi.elements.impl.ParameterImpl; import com.jetbrains.php.lang.psi.resolve.types.PhpType; import com.jetbrains.php.lang.psi.visitors.PhpElementVisitor; import java.util.Collection; @@ -39,6 +42,7 @@ public void visitPhpClass(final PhpClass phpClass) { @Override public void visitPhpParameter(final Parameter parameter) { PhpClassReferenceExtractor.this.processParameterReference(parameter); + PhpClassReferenceExtractor.this.processUsedForDefaultValueTypeReference(parameter); } /** @@ -77,6 +81,39 @@ public void processParameterReference(final @NotNull Parameter parameter) { this.processReference(getNameFromFqn(complexType), complexType, parameter); } + /** + * Process reference for complex type if it is exists in the default parameter value. + * + * @param parameter Parameter + */ + public void processUsedForDefaultValueTypeReference(final @NotNull Parameter parameter) { + if (!(parameter instanceof ParameterImpl)) { + return; + } + final PsiElement defaultValue = parameter.getDefaultValue(); + + if (!(defaultValue instanceof ClassConstantReferenceImpl)) { + return; + } + final PsiElement constant = ((ClassConstantReferenceImpl) defaultValue).resolve(); + + if (!(constant instanceof ClassConstImpl)) { + return; + } + final PhpClass usedTypeClass = ((ClassConstImpl) constant).getContainingClass(); + + if (usedTypeClass == null) { + return; + } + final String complexType = extractComplexType(usedTypeClass.getType()); + + if (complexType == null) { + return; + } + + this.processReference(getNameFromFqn(complexType), complexType, parameter); + } + /** * Process reference for non primitive return type. * diff --git a/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceResolver.java b/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceResolver.java index 6eb4601cd..70975b599 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceResolver.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/references/PhpClassReferenceResolver.java @@ -142,22 +142,22 @@ private Map importWithConflictResolve( referencesToReplace.put(name, originalFqn); } else { final String importedFqn = aliases.get(name); - if (!PhpLangUtil.equalsClassNames(importedFqn, originalFqn)) { - if (importedFqn != null) { - final String originalName = PhpLangUtil.toShortName(originalFqn); - final String fqnForOriginalName = aliases.get(originalName); - if (fqnForOriginalName != null - && !PhpLangUtil.equalsClassNames(fqnForOriginalName, originalFqn)) { - referencesToReplace.put(name, originalFqn); - } else { - referencesToReplace.put(name, originalName); - if (fqnForOriginalName == null) { - insertUseStatement(scopeHolder, originalName, originalFqn); - } - } + + if (importedFqn != null + && !PhpLangUtil.equalsClassNames(importedFqn, originalFqn)) { + final String originalName = PhpLangUtil.toShortName(originalFqn); + final String fqnForOriginalName = aliases.get(originalName); + if (fqnForOriginalName != null + && !PhpLangUtil.equalsClassNames(fqnForOriginalName, originalFqn)) { + referencesToReplace.put(name, originalFqn); } else { - insertUseStatement(scopeHolder, name, originalFqn); + referencesToReplace.put(name, originalName); + if (fqnForOriginalName == null) { + insertUseStatement(scopeHolder, originalName, originalFqn); + } } + } else { + insertUseStatement(scopeHolder, name, originalFqn); } } } From 4fd849e8581794eaec4bf774d370bbb59b05af0e Mon Sep 17 00:00:00 2001 From: bohdan-harniuk Date: Tue, 7 Dec 2021 14:16:41 +0200 Subject: [PATCH 3/4] 630: Fixed wrong array type for method arguments --- .../generator/code/util/ConvertPluginParamsToString.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/code/util/ConvertPluginParamsToString.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/code/util/ConvertPluginParamsToString.java index 56de40d0b..c9299bc7f 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/code/util/ConvertPluginParamsToString.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/code/util/ConvertPluginParamsToString.java @@ -7,6 +7,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.util.text.Strings; import com.intellij.psi.PsiElement; import com.jetbrains.php.codeInsight.PhpCodeInsightUtil; import com.jetbrains.php.config.PhpLanguageFeature; @@ -52,7 +53,11 @@ public static String execute( String returnType = PhpTypeMetadataParserUtil.getMethodReturnType(myMethod); if (returnType != null && PhpClassGeneratorUtil.isValidFqn(returnType)) { - returnType = PhpClassGeneratorUtil.getNameFromFqn(returnType); + if (Strings.endsWith(returnType, "[]")) { + returnType = "array"; + } else { + returnType = PhpClassGeneratorUtil.getNameFromFqn(returnType); + } } final Iterator parametersIterator = parameters.iterator(); int iterator = 0; From 6b7a9bfc1c8096273a7137c185dbccdbbc8c8edd Mon Sep 17 00:00:00 2001 From: bohdan-harniuk Date: Tue, 7 Dec 2021 14:28:42 +0200 Subject: [PATCH 4/4] 630: Suppressed style checks --- .../code/util/ConvertPluginParamsToString.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/code/util/ConvertPluginParamsToString.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/code/util/ConvertPluginParamsToString.java index c9299bc7f..004f6b0f0 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/code/util/ConvertPluginParamsToString.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/code/util/ConvertPluginParamsToString.java @@ -43,7 +43,12 @@ private ConvertPluginParamsToString() {} * * @return String */ - @SuppressWarnings({"PMD.NPathComplexity", "PMD.CyclomaticComplexity", "PMD.ConfusingTernary"}) + @SuppressWarnings({ + "PMD.NPathComplexity", + "PMD.CyclomaticComplexity", + "PMD.CognitiveComplexity", + "PMD.ConfusingTernary" + }) public static String execute( final Collection parameters, final @NotNull Plugin.PluginType type, @@ -75,14 +80,14 @@ public static String execute( if (parameterText.contains("=")) { final String[] paramParts = parameterText.split("="); parameterText = paramParts[0]; - parameterText += " = "; + parameterText += " = ";//NOPMD String defaultValue = paramParts[1]; if (defaultValue.contains(Package.fqnSeparator)) { final String[] fqnArray = defaultValue.split("\\\\"); defaultValue = fqnArray[fqnArray.length - 1]; } - parameterText += defaultValue; + parameterText += defaultValue;//NOPMD } else if (parameterText.contains(Package.fqnSeparator)) { final String[] fqnArray = parameterText.split("\\\\"); parameterText = fqnArray[fqnArray.length - 1];