From c329bc32133741a82b4c5bf15888be672b5d5432 Mon Sep 17 00:00:00 2001 From: Vitaliy Boyko Date: Mon, 30 Mar 2020 16:48:29 +0300 Subject: [PATCH 1/2] Refactoring of the code generation --- .../PluginGenerateAfterMethodAction.java | 10 +-- .../PluginGenerateAroundMethodAction.java | 10 +-- .../PluginGenerateBeforeMethodAction.java | 10 +-- ...a => PluginGenerateMethodHandlerBase.java} | 16 ++--- .../data/ModuleComposerJsonData.java | 56 ++++++++++++++++ .../data/ModuleRegistrationPhpData.java | 35 ++++++++++ .../generation/data/ModuleXmlData.java | 35 ++++++++++ ...ginDiXmlData.java => PluginDiXmlData.java} | 4 +- ...luginFileData.java => PluginFileData.java} | 4 +- .../PluginMethodData.java} | 6 +- .../dialog/CreateAPluginDialog.java | 17 ++--- .../dialog/NewMagentoModuleDialog.java | 66 +++++++++++-------- .../generation/generator/FileGenerator.java | 39 +++++++++++ .../ModuleComposerJsonGenerator.java | 42 ++++++++++++ .../ModuleRegistrationPhpGenerator.java | 39 +++++++++++ .../generator/ModuleXmlGenerator.java | 40 +++++++++++ ...nerator.java => PluginClassGenerator.java} | 55 +++++++--------- ...nerator.java => PluginDiXmlGenerator.java} | 40 +++++------ .../PluginMethodsGenerator.java} | 16 ++--- .../generator/util/DirectoryGenerator.java | 5 +- .../util/FillTextBufferWithPluginMethods.java | 6 +- 21 files changed, 421 insertions(+), 130 deletions(-) rename src/com/magento/idea/magento2plugin/actions/generation/{PluginGeneratePluginMethodHandlerBase.java => PluginGenerateMethodHandlerBase.java} (93%) create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/data/ModuleComposerJsonData.java create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/data/ModuleRegistrationPhpData.java create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/data/ModuleXmlData.java rename src/com/magento/idea/magento2plugin/actions/generation/data/{MagentoPluginDiXmlData.java => PluginDiXmlData.java} (94%) rename src/com/magento/idea/magento2plugin/actions/generation/data/{MagentoPluginFileData.java => PluginFileData.java} (96%) rename src/com/magento/idea/magento2plugin/actions/generation/data/{MagentoPluginMethodData.java => code/PluginMethodData.java} (77%) create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/generator/FileGenerator.java create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleComposerJsonGenerator.java create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleRegistrationPhpGenerator.java create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleXmlGenerator.java rename src/com/magento/idea/magento2plugin/actions/generation/generator/{MagentoPluginClassGenerator.java => PluginClassGenerator.java} (78%) rename src/com/magento/idea/magento2plugin/actions/generation/generator/{MagentoPluginDiXmlGenerator.java => PluginDiXmlGenerator.java} (86%) rename src/com/magento/idea/magento2plugin/actions/generation/generator/{MagentoPluginMethodsGenerator.java => code/PluginMethodsGenerator.java} (95%) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateAfterMethodAction.java b/src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateAfterMethodAction.java index 0e5288952..d9664b5da 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateAfterMethodAction.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateAfterMethodAction.java @@ -12,15 +12,15 @@ import com.intellij.psi.PsiFile; import com.jetbrains.php.lang.psi.elements.Method; import com.jetbrains.php.lang.psi.elements.PhpClass; -import com.magento.idea.magento2plugin.actions.generation.data.MagentoPluginMethodData; -import com.magento.idea.magento2plugin.actions.generation.generator.MagentoPluginMethodsGenerator; +import com.magento.idea.magento2plugin.actions.generation.data.code.PluginMethodData; +import com.magento.idea.magento2plugin.actions.generation.generator.code.PluginMethodsGenerator; import com.magento.idea.magento2plugin.magento.files.Plugin; import org.jetbrains.annotations.NotNull; public class PluginGenerateAfterMethodAction extends CodeInsightAction { - private final PluginGeneratePluginMethodHandlerBase myHandler = new PluginGeneratePluginMethodHandlerBase(Plugin.PluginType.after) { - protected MagentoPluginMethodData[] createPluginMethods(PhpClass currentClass, Method method, Key targetClassKey) { - return (new MagentoPluginMethodsGenerator(currentClass, method, targetClassKey) + private final PluginGenerateMethodHandlerBase myHandler = new PluginGenerateMethodHandlerBase(Plugin.PluginType.after) { + protected PluginMethodData[] createPluginMethods(PhpClass currentClass, Method method, Key targetClassKey) { + return (new PluginMethodsGenerator(currentClass, method, targetClassKey) .createPluginMethods(Plugin.PluginType.after)); } }; diff --git a/src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateAroundMethodAction.java b/src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateAroundMethodAction.java index 52042c359..ba3e43630 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateAroundMethodAction.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateAroundMethodAction.java @@ -12,15 +12,15 @@ import com.intellij.psi.PsiFile; import com.jetbrains.php.lang.psi.elements.Method; import com.jetbrains.php.lang.psi.elements.PhpClass; -import com.magento.idea.magento2plugin.actions.generation.data.MagentoPluginMethodData; -import com.magento.idea.magento2plugin.actions.generation.generator.MagentoPluginMethodsGenerator; +import com.magento.idea.magento2plugin.actions.generation.data.code.PluginMethodData; +import com.magento.idea.magento2plugin.actions.generation.generator.code.PluginMethodsGenerator; import com.magento.idea.magento2plugin.magento.files.Plugin; import org.jetbrains.annotations.NotNull; public class PluginGenerateAroundMethodAction extends CodeInsightAction { - private final PluginGeneratePluginMethodHandlerBase myHandler = new PluginGeneratePluginMethodHandlerBase(Plugin.PluginType.around) { - protected MagentoPluginMethodData[] createPluginMethods(PhpClass currentClass, Method method, Key targetClassKey) { - return (new MagentoPluginMethodsGenerator(currentClass, method, targetClassKey) + private final PluginGenerateMethodHandlerBase myHandler = new PluginGenerateMethodHandlerBase(Plugin.PluginType.around) { + protected PluginMethodData[] createPluginMethods(PhpClass currentClass, Method method, Key targetClassKey) { + return (new PluginMethodsGenerator(currentClass, method, targetClassKey) .createPluginMethods(Plugin.PluginType.around)); } }; diff --git a/src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateBeforeMethodAction.java b/src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateBeforeMethodAction.java index e38faa8c4..c5aa5aa16 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateBeforeMethodAction.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateBeforeMethodAction.java @@ -11,16 +11,16 @@ import com.intellij.psi.PsiFile; import com.jetbrains.php.lang.psi.elements.Method; import com.jetbrains.php.lang.psi.elements.PhpClass; -import com.magento.idea.magento2plugin.actions.generation.data.MagentoPluginMethodData; -import com.magento.idea.magento2plugin.actions.generation.generator.MagentoPluginMethodsGenerator; +import com.magento.idea.magento2plugin.actions.generation.data.code.PluginMethodData; +import com.magento.idea.magento2plugin.actions.generation.generator.code.PluginMethodsGenerator; import com.magento.idea.magento2plugin.magento.files.Plugin; import org.jetbrains.annotations.NotNull; import com.intellij.openapi.util.Key; public class PluginGenerateBeforeMethodAction extends CodeInsightAction { - private final PluginGeneratePluginMethodHandlerBase myHandler = new PluginGeneratePluginMethodHandlerBase(Plugin.PluginType.before) { - protected MagentoPluginMethodData[] createPluginMethods(PhpClass currentClass, Method method, Key targetClassKey) { - return (new MagentoPluginMethodsGenerator(currentClass, method, targetClassKey) + private final PluginGenerateMethodHandlerBase myHandler = new PluginGenerateMethodHandlerBase(Plugin.PluginType.before) { + protected PluginMethodData[] createPluginMethods(PhpClass currentClass, Method method, Key targetClassKey) { + return (new PluginMethodsGenerator(currentClass, method, targetClassKey) .createPluginMethods(Plugin.PluginType.before)); } }; diff --git a/src/com/magento/idea/magento2plugin/actions/generation/PluginGeneratePluginMethodHandlerBase.java b/src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateMethodHandlerBase.java similarity index 93% rename from src/com/magento/idea/magento2plugin/actions/generation/PluginGeneratePluginMethodHandlerBase.java rename to src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateMethodHandlerBase.java index 50fdbfba1..7d3991e7f 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/PluginGeneratePluginMethodHandlerBase.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/PluginGenerateMethodHandlerBase.java @@ -28,8 +28,8 @@ import com.jetbrains.php.lang.psi.elements.*; import java.util.*; import com.magento.idea.magento2plugin.actions.generation.ImportReferences.PhpClassReferenceResolver; -import com.magento.idea.magento2plugin.actions.generation.data.MagentoPluginMethodData; -import com.magento.idea.magento2plugin.actions.generation.generator.MagentoPluginMethodsGenerator; +import com.magento.idea.magento2plugin.actions.generation.data.code.PluginMethodData; +import com.magento.idea.magento2plugin.actions.generation.generator.code.PluginMethodsGenerator; import com.magento.idea.magento2plugin.actions.generation.util.CodeStyleSettings; import com.magento.idea.magento2plugin.actions.generation.util.CollectInsertedMethods; import com.magento.idea.magento2plugin.actions.generation.util.FillTextBufferWithPluginMethods; @@ -41,12 +41,12 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public abstract class PluginGeneratePluginMethodHandlerBase implements LanguageCodeInsightActionHandler { +public abstract class PluginGenerateMethodHandlerBase implements LanguageCodeInsightActionHandler { private CollectInsertedMethods collectInsertedMethods; public String type; public FillTextBufferWithPluginMethods fillTextBuffer; - public PluginGeneratePluginMethodHandlerBase(Plugin.PluginType type) { + public PluginGenerateMethodHandlerBase(Plugin.PluginType type) { this.type = type.toString(); this.fillTextBuffer = FillTextBufferWithPluginMethods.getInstance(); this.collectInsertedMethods = CollectInsertedMethods.getInstance(); @@ -69,7 +69,7 @@ public boolean isValidFor(Editor editor, PsiFile file) { public void invoke(@NotNull Project project, @NotNull Editor editor, @NotNull PsiFile pluginFile) { PhpFile pluginPhpFile = (PhpFile)pluginFile; PhpClass pluginClass = PhpCodeEditUtil.findClassAtCaret(editor, pluginPhpFile); - Key targetClassKey = Key.create(MagentoPluginMethodsGenerator.originalTargetKey); + Key targetClassKey = Key.create(PluginMethodsGenerator.originalTargetKey); if (pluginClass == null) { return; } @@ -97,7 +97,7 @@ public void invoke(@NotNull Project project, @NotNull Editor editor, @NotNull Ps for (PhpNamedElementNode member : members) { PsiElement method = member.getPsiElement(); - MagentoPluginMethodData[] pluginMethods = this.createPluginMethods(pluginClass, (Method) method, targetClassKey); + PluginMethodData[] pluginMethods = this.createPluginMethods(pluginClass, (Method) method, targetClassKey); fillTextBuffer.execute(targetClassKey, insertedMethodsNames, resolver, textBuf, pluginMethods); } @@ -121,7 +121,7 @@ private void insertPluginMethodsToFile(@NotNull Project project, @NotNull Editor } } - protected abstract MagentoPluginMethodData[] createPluginMethods(PhpClass currentClass, Method method, Key targetClassKey); + protected abstract PluginMethodData[] createPluginMethods(PhpClass currentClass, Method method, Key targetClassKey); protected String getErrorMessage() { return "No methods to generate"; @@ -135,7 +135,7 @@ public boolean startInWriteAction() { protected PhpNamedElementNode[] chooseMembers(PhpNamedElementNode[] members, boolean allowEmptySelection, Project project) { PhpNamedElementNode[] nodes = fixOrderToBeAsOriginalFiles(members).toArray(new PhpNamedElementNode[members.length]); if (!ApplicationManager.getApplication().isHeadlessEnvironment()) { - PluginGeneratePluginMethodHandlerBase.MyMemberChooser chooser = new PluginGeneratePluginMethodHandlerBase.MyMemberChooser(nodes, allowEmptySelection, project); + PluginGenerateMethodHandlerBase.MyMemberChooser chooser = new PluginGenerateMethodHandlerBase.MyMemberChooser(nodes, allowEmptySelection, project); chooser.setTitle("Choose Methods"); chooser.setCopyJavadocVisible(false); chooser.show(); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/ModuleComposerJsonData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/ModuleComposerJsonData.java new file mode 100644 index 000000000..de032faf4 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/ModuleComposerJsonData.java @@ -0,0 +1,56 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +package com.magento.idea.magento2plugin.actions.generation.data; + +import com.intellij.psi.PsiDirectory; + +public class ModuleComposerJsonData { + private final String packageName; + private final String moduleName; + private PsiDirectory baseDir; + private final String moduleDescription; + private final String composerPackageName; + private final String moduleVersion; + + public ModuleComposerJsonData( + String packageName, + String moduleName, + PsiDirectory baseDir, + String moduleDescription, + String composerPackageName, + String moduleVersion + ) { + this.packageName = packageName; + this.moduleName = moduleName; + this.baseDir = baseDir; + this.moduleDescription = moduleDescription; + this.composerPackageName = composerPackageName; + this.moduleVersion = moduleVersion; + } + + public String getPackageName() { + return this.packageName; + } + + public String getModuleName() { + return this.moduleName; + } + + public PsiDirectory getBaseDir() { + return this.baseDir; + } + + public String getModuleDescription() { + return this.moduleDescription; + } + + public String getComposerPackageName() { + return this.composerPackageName; + } + + public String getModuleVersion() { + return this.moduleVersion; + } +} diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/ModuleRegistrationPhpData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/ModuleRegistrationPhpData.java new file mode 100644 index 000000000..ae337ddaf --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/ModuleRegistrationPhpData.java @@ -0,0 +1,35 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +package com.magento.idea.magento2plugin.actions.generation.data; + +import com.intellij.psi.PsiDirectory; + +public class ModuleRegistrationPhpData { + private final String packageName; + private final String moduleName; + private PsiDirectory baseDir; + + public ModuleRegistrationPhpData( + String packageName, + String moduleName, + PsiDirectory baseDir + ) { + this.packageName = packageName; + this.moduleName = moduleName; + this.baseDir = baseDir; + } + + public String getPackageName() { + return this.packageName; + } + + public String getModuleName() { + return this.moduleName; + } + + public PsiDirectory getBaseDir() { + return this.baseDir; + } +} diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/ModuleXmlData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/ModuleXmlData.java new file mode 100644 index 000000000..dffdd0bd0 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/ModuleXmlData.java @@ -0,0 +1,35 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +package com.magento.idea.magento2plugin.actions.generation.data; + +import com.intellij.psi.PsiDirectory; + +public class ModuleXmlData { + private final String packageName; + private final String moduleName; + private PsiDirectory baseDir; + + public ModuleXmlData( + String packageName, + String moduleName, + PsiDirectory baseDir + ) { + this.packageName = packageName; + this.moduleName = moduleName; + this.baseDir = baseDir; + } + + public String getPackageName() { + return this.packageName; + } + + public String getModuleName() { + return this.moduleName; + } + + public PsiDirectory getBaseDir() { + return this.baseDir; + } +} diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/MagentoPluginDiXmlData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/PluginDiXmlData.java similarity index 94% rename from src/com/magento/idea/magento2plugin/actions/generation/data/MagentoPluginDiXmlData.java rename to src/com/magento/idea/magento2plugin/actions/generation/data/PluginDiXmlData.java index e7a8318c4..c0b02d15a 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/MagentoPluginDiXmlData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/PluginDiXmlData.java @@ -6,7 +6,7 @@ import com.jetbrains.php.lang.psi.elements.PhpClass; -public class MagentoPluginDiXmlData { +public class PluginDiXmlData { private String area; private String pluginModule; private PhpClass targetClass; @@ -14,7 +14,7 @@ public class MagentoPluginDiXmlData { private final String pluginName; private String pluginFqn; - public MagentoPluginDiXmlData( + public PluginDiXmlData( String area, String pluginModule, PhpClass targetClass, diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/MagentoPluginFileData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/PluginFileData.java similarity index 96% rename from src/com/magento/idea/magento2plugin/actions/generation/data/MagentoPluginFileData.java rename to src/com/magento/idea/magento2plugin/actions/generation/data/PluginFileData.java index 6efa9ac3b..01160d192 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/MagentoPluginFileData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/PluginFileData.java @@ -7,7 +7,7 @@ import com.jetbrains.php.lang.psi.elements.Method; import com.jetbrains.php.lang.psi.elements.PhpClass; -public class MagentoPluginFileData { +public class PluginFileData { private String pluginDirectory; private String pluginClassName; private String pluginType; @@ -17,7 +17,7 @@ public class MagentoPluginFileData { private String pluginFqn; private String namespace; - public MagentoPluginFileData( + public PluginFileData( String pluginDirectory, String pluginClassName, String pluginType, diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/MagentoPluginMethodData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/code/PluginMethodData.java similarity index 77% rename from src/com/magento/idea/magento2plugin/actions/generation/data/MagentoPluginMethodData.java rename to src/com/magento/idea/magento2plugin/actions/generation/data/code/PluginMethodData.java index 8e945b7f7..44f5bc0ec 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/MagentoPluginMethodData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/code/PluginMethodData.java @@ -2,17 +2,17 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ -package com.magento.idea.magento2plugin.actions.generation.data; +package com.magento.idea.magento2plugin.actions.generation.data.code; import com.jetbrains.php.lang.documentation.phpdoc.psi.PhpDocComment; import com.jetbrains.php.lang.psi.elements.Method; -public class MagentoPluginMethodData { +public class PluginMethodData { private final PhpDocComment docComment; private final Method method; private final Method targetMethod; - public MagentoPluginMethodData(Method targetMethod, PhpDocComment docComment, Method method) { + public PluginMethodData(Method targetMethod, PhpDocComment docComment, Method method) { super(); this.docComment = docComment; this.method = method; diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/CreateAPluginDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/CreateAPluginDialog.java index d21ed0f43..cfc8b135d 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/CreateAPluginDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/CreateAPluginDialog.java @@ -7,11 +7,12 @@ import com.intellij.openapi.project.Project; import com.jetbrains.php.lang.psi.elements.Method; import com.jetbrains.php.lang.psi.elements.PhpClass; -import com.magento.idea.magento2plugin.actions.generation.data.MagentoPluginDiXmlData; -import com.magento.idea.magento2plugin.actions.generation.data.MagentoPluginFileData; +import com.magento.idea.magento2plugin.actions.generation.CreateAPluginAction; +import com.magento.idea.magento2plugin.actions.generation.data.PluginDiXmlData; +import com.magento.idea.magento2plugin.actions.generation.data.PluginFileData; import com.magento.idea.magento2plugin.actions.generation.dialog.validator.CreateAPluginDialogValidator; -import com.magento.idea.magento2plugin.actions.generation.generator.MagentoPluginClassGenerator; -import com.magento.idea.magento2plugin.actions.generation.generator.MagentoPluginDiXmlGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.PluginClassGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.PluginDiXmlGenerator; import com.magento.idea.magento2plugin.indexes.ModuleIndex; import com.magento.idea.magento2plugin.magento.files.Plugin; import com.magento.idea.magento2plugin.magento.packages.Package; @@ -108,7 +109,7 @@ private void onOK() { if (!validator.validate(project)) { return; } - new MagentoPluginClassGenerator(new MagentoPluginFileData( + new PluginClassGenerator(new PluginFileData( getPluginDirectory(), getPluginClassName(), getPluginType(), @@ -117,16 +118,16 @@ private void onOK() { targetMethod, getPluginClassFqn(), getNamespace() - ), project).generate(); + ), project).generate(CreateAPluginAction.ACTION_NAME, true); - new MagentoPluginDiXmlGenerator(new MagentoPluginDiXmlData( + new PluginDiXmlGenerator(new PluginDiXmlData( getPluginArea(), getPluginModule(), targetClass, getPluginSortOrder(), getPluginName(), getPluginClassFqn() - ), project).generate(); + ), project).generate(CreateAPluginAction.ACTION_NAME); this.setVisible(false); } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewMagentoModuleDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewMagentoModuleDialog.java index a27593fe0..eca84efa2 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewMagentoModuleDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewMagentoModuleDialog.java @@ -10,14 +10,16 @@ import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiFile; import com.magento.idea.magento2plugin.actions.generation.NewModuleAction; +import com.magento.idea.magento2plugin.actions.generation.data.ModuleComposerJsonData; +import com.magento.idea.magento2plugin.actions.generation.data.ModuleRegistrationPhpData; +import com.magento.idea.magento2plugin.actions.generation.data.ModuleXmlData; import com.magento.idea.magento2plugin.actions.generation.dialog.validator.NewMagentoModuleDialogValidator; +import com.magento.idea.magento2plugin.actions.generation.generator.ModuleComposerJsonGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.ModuleRegistrationPhpGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.ModuleXmlGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator; -import com.magento.idea.magento2plugin.actions.generation.generator.data.ModuleDirectoriesData; import com.magento.idea.magento2plugin.actions.generation.util.NavigateToCreatedFile; -import com.magento.idea.magento2plugin.magento.files.ComposerJson; -import com.magento.idea.magento2plugin.magento.files.ModuleXml; -import com.magento.idea.magento2plugin.magento.files.RegistrationPhp; import com.magento.idea.magento2plugin.magento.packages.Package; import com.magento.idea.magento2plugin.util.CamelCaseToHyphen; import org.jetbrains.annotations.NotNull; @@ -25,7 +27,6 @@ import javax.swing.*; import java.awt.*; import java.awt.event.*; -import java.util.Properties; public class NewMagentoModuleDialog extends JDialog { @NotNull @@ -122,20 +123,47 @@ private void onOK() { } private void generateFiles() { - PsiDirectory baseDir = detectedPackageName != null ? this.initialBaseDir.getParent() : this.initialBaseDir; - ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createModuleDirectories(getPackageName(), getModuleName(), baseDir); - Properties attributes = getAttributes(); - PsiFile composerJson = fileFromTemplateGenerator.generate(ComposerJson.getInstance(), attributes, moduleDirectoriesData.getModuleDirectory(), NewModuleAction.ACTION_NAME); + PsiFile composerJson = generateComposerJson(); if (composerJson == null) { return; } - PsiFile registrationPhp = fileFromTemplateGenerator.generate(RegistrationPhp.getInstance(), attributes, moduleDirectoriesData.getModuleDirectory(), NewModuleAction.ACTION_NAME); + + PsiFile registrationPhp = generateRegistrationPhp(); if (registrationPhp == null) { return; } - PsiFile moduleXml = fileFromTemplateGenerator.generate(ModuleXml.getInstance(), attributes, moduleDirectoriesData.getModuleEtcDirectory(), NewModuleAction.ACTION_NAME); + generateModuleXml(); + } + + private PsiFile generateComposerJson() { + return new ModuleComposerJsonGenerator(new ModuleComposerJsonData( + getPackageName(), + getModuleName(), + getBaseDir(), + getModuleDescription(), + getComposerPackageName(), + getModuleVersion() + ), project).generate(NewModuleAction.ACTION_NAME); + } + + private PsiFile generateRegistrationPhp() { + return new ModuleRegistrationPhpGenerator(new ModuleRegistrationPhpData( + getPackageName(), + getModuleName(), + getBaseDir() + ), project).generate(NewModuleAction.ACTION_NAME); + } - navigateToCreatedFile.navigate(project, moduleXml); + private void generateModuleXml() { + new ModuleXmlGenerator(new ModuleXmlData( + getPackageName(), + getModuleName(), + getBaseDir() + ), project).generate(NewModuleAction.ACTION_NAME, true); + } + + private PsiDirectory getBaseDir() { + return detectedPackageName != null ? this.initialBaseDir.getParent() : this.initialBaseDir; } public String getPackageName() { @@ -167,20 +195,6 @@ public static void open(@NotNull Project project, @NotNull PsiDirectory initialB dialog.setVisible(true); } - private Properties getAttributes() { - Properties attributes = new Properties(); - this.fillAttributes(attributes); - return attributes; - } - - private void fillAttributes(Properties attributes) { - attributes.setProperty("PACKAGE", getPackageName()); - attributes.setProperty("MODULE_NAME", getModuleName()); - attributes.setProperty("MODULE_DESCRIPTION", getModuleDescription()); - attributes.setProperty("COMPOSER_PACKAGE_NAME", getComposerPackageName()); - attributes.setProperty("MODULE_VERSION", getModuleVersion()); - } - @NotNull private String getComposerPackageName() { return camelCaseToHyphen.convert(getPackageName()) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/FileGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/FileGenerator.java new file mode 100644 index 000000000..eea775895 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/FileGenerator.java @@ -0,0 +1,39 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +package com.magento.idea.magento2plugin.actions.generation.generator; + +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; +import com.magento.idea.magento2plugin.actions.generation.util.NavigateToCreatedFile; +import java.util.Properties; + +public abstract class FileGenerator { + private final Project project; + private final NavigateToCreatedFile navigateToCreatedFile; + + public FileGenerator(Project project) + { + this.project = project; + this.navigateToCreatedFile = NavigateToCreatedFile.getInstance(); + } + + public abstract PsiFile generate(String actionName); + + public PsiFile generate(String actionName, boolean openFile) { + PsiFile file = this.generate(actionName); + if (file != null) { + navigateToCreatedFile.navigate(project, file); + } + return file; + } + + protected Properties getAttributes() { + Properties attributes = new Properties(); + this.fillAttributes(attributes); + return attributes; + } + + protected abstract void fillAttributes(Properties attributes); +} diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleComposerJsonGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleComposerJsonGenerator.java new file mode 100644 index 000000000..34d1fbec7 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleComposerJsonGenerator.java @@ -0,0 +1,42 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +package com.magento.idea.magento2plugin.actions.generation.generator; + +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; +import com.magento.idea.magento2plugin.actions.generation.data.ModuleComposerJsonData; +import com.magento.idea.magento2plugin.actions.generation.generator.data.ModuleDirectoriesData; +import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator; +import com.magento.idea.magento2plugin.magento.files.ComposerJson; +import org.jetbrains.annotations.NotNull; +import java.util.Properties; + +public class ModuleComposerJsonGenerator extends FileGenerator { + + private final ModuleComposerJsonData moduleComposerJsonData; + private final FileFromTemplateGenerator fileFromTemplateGenerator; + private final DirectoryGenerator directoryGenerator; + + public ModuleComposerJsonGenerator(@NotNull ModuleComposerJsonData moduleComposerJsonData, Project project) { + super(project); + this.moduleComposerJsonData = moduleComposerJsonData; + this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.directoryGenerator = DirectoryGenerator.getInstance(); + } + + public PsiFile generate(String actionName) { + ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createOrFindModuleDirectories(moduleComposerJsonData.getPackageName(), moduleComposerJsonData.getModuleName(), moduleComposerJsonData.getBaseDir()); + return fileFromTemplateGenerator.generate(ComposerJson.getInstance(), getAttributes(), moduleDirectoriesData.getModuleDirectory(), actionName); + } + + protected void fillAttributes(Properties attributes) { + attributes.setProperty("PACKAGE", moduleComposerJsonData.getPackageName()); + attributes.setProperty("MODULE_NAME", moduleComposerJsonData.getModuleName()); + attributes.setProperty("MODULE_DESCRIPTION", moduleComposerJsonData.getModuleDescription()); + attributes.setProperty("COMPOSER_PACKAGE_NAME", moduleComposerJsonData.getComposerPackageName()); + attributes.setProperty("MODULE_VERSION", moduleComposerJsonData.getModuleVersion()); + } +} diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleRegistrationPhpGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleRegistrationPhpGenerator.java new file mode 100644 index 000000000..18fa5cc90 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleRegistrationPhpGenerator.java @@ -0,0 +1,39 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +package com.magento.idea.magento2plugin.actions.generation.generator; + +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; +import com.magento.idea.magento2plugin.actions.generation.data.ModuleRegistrationPhpData; +import com.magento.idea.magento2plugin.actions.generation.generator.data.ModuleDirectoriesData; +import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator; +import com.magento.idea.magento2plugin.magento.files.RegistrationPhp; +import org.jetbrains.annotations.NotNull; +import java.util.Properties; + +public class ModuleRegistrationPhpGenerator extends FileGenerator { + + private final ModuleRegistrationPhpData moduleRegistrationPhpData; + private final FileFromTemplateGenerator fileFromTemplateGenerator; + private final DirectoryGenerator directoryGenerator; + + public ModuleRegistrationPhpGenerator(@NotNull ModuleRegistrationPhpData moduleRegistrationPhpData, Project project) { + super(project); + this.moduleRegistrationPhpData = moduleRegistrationPhpData; + this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.directoryGenerator = DirectoryGenerator.getInstance(); + } + + public PsiFile generate(String actionName) { + ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createOrFindModuleDirectories(moduleRegistrationPhpData.getPackageName(), moduleRegistrationPhpData.getModuleName(), moduleRegistrationPhpData.getBaseDir()); + return fileFromTemplateGenerator.generate(RegistrationPhp.getInstance(), getAttributes(), moduleDirectoriesData.getModuleDirectory(), actionName); + } + + protected void fillAttributes(Properties attributes) { + attributes.setProperty("PACKAGE", moduleRegistrationPhpData.getPackageName()); + attributes.setProperty("MODULE_NAME", moduleRegistrationPhpData.getModuleName()); + } +} diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleXmlGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleXmlGenerator.java new file mode 100644 index 000000000..ba5f039b7 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleXmlGenerator.java @@ -0,0 +1,40 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +package com.magento.idea.magento2plugin.actions.generation.generator; + +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; +import com.magento.idea.magento2plugin.actions.generation.data.ModuleXmlData; +import com.magento.idea.magento2plugin.actions.generation.generator.data.ModuleDirectoriesData; +import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator; +import com.magento.idea.magento2plugin.magento.files.ModuleXml; +import org.jetbrains.annotations.NotNull; +import java.util.Properties; + +public class ModuleXmlGenerator extends FileGenerator { + + private final ModuleXmlData moduleXmlData; + private final FileFromTemplateGenerator fileFromTemplateGenerator; + private final DirectoryGenerator directoryGenerator; + + public ModuleXmlGenerator(@NotNull ModuleXmlData moduleXmlData, Project project) { + super(project); + this.moduleXmlData = moduleXmlData; + this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.directoryGenerator = DirectoryGenerator.getInstance(); + } + + @Override + public PsiFile generate(String actionName) { + ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createOrFindModuleDirectories(moduleXmlData.getPackageName(), moduleXmlData.getModuleName(), moduleXmlData.getBaseDir()); + return fileFromTemplateGenerator.generate(ModuleXml.getInstance(), getAttributes(), moduleDirectoriesData.getModuleEtcDirectory(), actionName); + } + + protected void fillAttributes(Properties attributes) { + attributes.setProperty("PACKAGE", moduleXmlData.getPackageName()); + attributes.setProperty("MODULE_NAME", moduleXmlData.getModuleName()); + } +} diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/MagentoPluginClassGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java similarity index 78% rename from src/com/magento/idea/magento2plugin/actions/generation/generator/MagentoPluginClassGenerator.java rename to src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java index b9bfed8c2..5a9397fe8 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/MagentoPluginClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java @@ -20,16 +20,15 @@ import com.jetbrains.php.lang.psi.elements.Method; import com.jetbrains.php.lang.psi.elements.PhpClass; import com.jetbrains.php.lang.psi.elements.PhpPsiElement; -import com.magento.idea.magento2plugin.actions.generation.CreateAPluginAction; import com.magento.idea.magento2plugin.actions.generation.ImportReferences.PhpClassReferenceResolver; -import com.magento.idea.magento2plugin.actions.generation.data.MagentoPluginFileData; -import com.magento.idea.magento2plugin.actions.generation.data.MagentoPluginMethodData; +import com.magento.idea.magento2plugin.actions.generation.data.PluginFileData; +import com.magento.idea.magento2plugin.actions.generation.data.code.PluginMethodData; +import com.magento.idea.magento2plugin.actions.generation.generator.code.PluginMethodsGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator; import com.magento.idea.magento2plugin.actions.generation.util.CodeStyleSettings; import com.magento.idea.magento2plugin.actions.generation.util.CollectInsertedMethods; import com.magento.idea.magento2plugin.actions.generation.util.FillTextBufferWithPluginMethods; -import com.magento.idea.magento2plugin.actions.generation.util.NavigateToCreatedFile; import com.magento.idea.magento2plugin.indexes.ModuleIndex; import com.magento.idea.magento2plugin.magento.files.Plugin; import com.magento.idea.magento2plugin.magento.packages.MagentoPhpClass; @@ -44,9 +43,8 @@ import java.util.Properties; import java.util.Set; -public class MagentoPluginClassGenerator { - private final NavigateToCreatedFile navigateToCreatedFile; - private MagentoPluginFileData pluginFileData; +public class PluginClassGenerator extends FileGenerator { + private PluginFileData pluginFileData; private Project project; private final FillTextBufferWithPluginMethods fillTextBuffer; private final CollectInsertedMethods collectInsertedMethods; @@ -54,7 +52,8 @@ public class MagentoPluginClassGenerator { private final FileFromTemplateGenerator fileFromTemplateGenerator; private final GetFirstClassOfFile getFirstClassOfFile; - public MagentoPluginClassGenerator(@NotNull MagentoPluginFileData pluginFileData, Project project) { + public PluginClassGenerator(@NotNull PluginFileData pluginFileData, Project project) { + super(project); this.directoryGenerator = DirectoryGenerator.getInstance(); this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); this.getFirstClassOfFile = GetFirstClassOfFile.getInstance(); @@ -62,27 +61,27 @@ public MagentoPluginClassGenerator(@NotNull MagentoPluginFileData pluginFileData this.collectInsertedMethods = CollectInsertedMethods.getInstance(); this.pluginFileData = pluginFileData; this.project = project; - this.navigateToCreatedFile = NavigateToCreatedFile.getInstance(); } - public void generate() + public PsiFile generate(String actionName) { + final PsiFile[] pluginFile = {null}; WriteCommandAction.runWriteCommandAction(project, () -> { PhpClass pluginClass = GetPhpClassByFQN.getInstance(project).execute(pluginFileData.getPluginFqn()); if (pluginClass == null) { - pluginClass = createPluginClass(); + pluginClass = createPluginClass(actionName); } if (pluginClass == null) { JOptionPane.showMessageDialog(null, "Plugin Class cant be created!", "Error", JOptionPane.ERROR_MESSAGE); return; } - Key targetClassKey = Key.create(MagentoPluginMethodsGenerator.originalTargetKey); + Key targetClassKey = Key.create(PluginMethodsGenerator.originalTargetKey); Method targetMethod = pluginFileData.getTargetMethod(); targetMethod.putUserData(targetClassKey, pluginFileData.getTargetClass()); - MagentoPluginMethodsGenerator pluginGenerator = new MagentoPluginMethodsGenerator(pluginClass, targetMethod, targetClassKey); + PluginMethodsGenerator pluginGenerator = new PluginMethodsGenerator(pluginClass, targetMethod, targetClassKey); - MagentoPluginMethodData[] pluginMethodData = pluginGenerator.createPluginMethods(getPluginType()); + PluginMethodData[] pluginMethodData = pluginGenerator.createPluginMethods(getPluginType()); if (checkIfMethodExist(pluginClass, pluginMethodData)){ JOptionPane.showMessageDialog(null, "Plugin method already exist!", "Error", JOptionPane.ERROR_MESSAGE); return; @@ -94,8 +93,8 @@ public void generate() fillTextBuffer.execute(targetClassKey, insertedMethodsNames, resolver, textBuf, pluginMethodData); - PsiFile pluginFile = pluginClass.getContainingFile(); - CodeStyleSettings codeStyleSettings = new CodeStyleSettings((PhpFile) pluginFile); + pluginFile[0] = pluginClass.getContainingFile(); + CodeStyleSettings codeStyleSettings = new CodeStyleSettings((PhpFile) pluginFile[0]); codeStyleSettings.adjustBeforeWrite(); int insertPos = getInsertPos(pluginClass); @@ -103,27 +102,27 @@ public void generate() if (textBuf.length() > 0 && insertPos >= 0) { PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(project); - Document document = psiDocumentManager.getDocument(pluginFile); + Document document = psiDocumentManager.getDocument(pluginFile[0]); document.insertString(insertPos, textBuf); int endPos = insertPos + textBuf.length() + 1; - CodeStyleManager.getInstance(project).reformatText(pluginFile, insertPos, endPos); + CodeStyleManager.getInstance(project).reformatText(pluginFile[0], insertPos, endPos); psiDocumentManager.commitDocument(document); } if (!insertedMethodsNames.isEmpty()) { - List insertedMethods = collectInsertedMethods.execute(pluginFile, pluginClass.getNameCS(), insertedMethodsNames); + List insertedMethods = collectInsertedMethods.execute(pluginFile[0], pluginClass.getNameCS(), insertedMethodsNames); if (scope != null && insertedMethods != null) { resolver.importReferences(scope, insertedMethods); } } codeStyleSettings.restore(); - navigateToCreatedFile.navigate(project, pluginFile); }); + return pluginFile[0]; } - private boolean checkIfMethodExist(PhpClass pluginClass, MagentoPluginMethodData[] pluginMethodData) { + private boolean checkIfMethodExist(PhpClass pluginClass, PluginMethodData[] pluginMethodData) { Collection currentPluginMethods = pluginClass.getMethods(); for (Method currentPluginMethod: currentPluginMethods) { - for (MagentoPluginMethodData pluginMethod: pluginMethodData) { + for (PluginMethodData pluginMethod: pluginMethodData) { if (pluginMethod.getMethod().getName().equals(currentPluginMethod.getName())){ continue; } @@ -133,7 +132,7 @@ private boolean checkIfMethodExist(PhpClass pluginClass, MagentoPluginMethodData return false; } - private PhpClass createPluginClass() { + private PhpClass createPluginClass(String actionName) { PsiDirectory parentDirectory = ModuleIndex.getInstance(project).getModuleDirectoryByModuleName(getPluginModule()); String[] pluginDirectories = pluginFileData.getPluginDirectory().split(File.separator); for (String pluginDirectory: pluginDirectories) { @@ -141,20 +140,14 @@ private PhpClass createPluginClass() { } Properties attributes = getAttributes(); - PsiFile pluginFile = fileFromTemplateGenerator.generate(Plugin.getInstance(pluginFileData.getPluginClassName()), attributes, parentDirectory, CreateAPluginAction.ACTION_NAME); + PsiFile pluginFile = fileFromTemplateGenerator.generate(Plugin.getInstance(pluginFileData.getPluginClassName()), attributes, parentDirectory, actionName); if (pluginFile == null) { return null; } return getFirstClassOfFile.execute((PhpFile) pluginFile); } - private Properties getAttributes() { - Properties attributes = new Properties(); - this.fillAttributes(attributes); - return attributes; - } - - private void fillAttributes(Properties attributes) { + protected void fillAttributes(Properties attributes) { attributes.setProperty("NAME", pluginFileData.getPluginClassName()); attributes.setProperty("NAMESPACE", pluginFileData.getNamespace()); } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/MagentoPluginDiXmlGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginDiXmlGenerator.java similarity index 86% rename from src/com/magento/idea/magento2plugin/actions/generation/generator/MagentoPluginDiXmlGenerator.java rename to src/com/magento/idea/magento2plugin/actions/generation/generator/PluginDiXmlGenerator.java index 8bf4a817d..7376fb293 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/MagentoPluginDiXmlGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginDiXmlGenerator.java @@ -16,8 +16,7 @@ import com.intellij.psi.xml.*; import com.intellij.xml.util.XmlUtil; import com.jetbrains.php.lang.PhpLangUtil; -import com.magento.idea.magento2plugin.actions.generation.CreateAPluginAction; -import com.magento.idea.magento2plugin.actions.generation.data.MagentoPluginDiXmlData; +import com.magento.idea.magento2plugin.actions.generation.data.PluginDiXmlData; import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.util.GetCodeTemplate; @@ -30,14 +29,16 @@ import java.io.IOException; import java.util.*; -public class MagentoPluginDiXmlGenerator { +public class PluginDiXmlGenerator extends FileGenerator { private final FileFromTemplateGenerator fileFromTemplateGenerator; private final DirectoryGenerator directoryGenerator; private final GetCodeTemplate getCodeTemplate; - private MagentoPluginDiXmlData pluginFileData; + private PluginDiXmlData pluginFileData; private Project project; + private boolean isTypeDeclared; - public MagentoPluginDiXmlGenerator(@NotNull MagentoPluginDiXmlData pluginFileData, Project project) { + public PluginDiXmlGenerator(@NotNull PluginDiXmlData pluginFileData, Project project) { + super(project); this.pluginFileData = pluginFileData; this.project = project; this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); @@ -45,30 +46,29 @@ public MagentoPluginDiXmlGenerator(@NotNull MagentoPluginDiXmlData pluginFileDat this.getCodeTemplate = GetCodeTemplate.getInstance(project); } - public void generate() + public PsiFile generate(String actionName) { - PsiFile diXmlFile = findOrCreateDiXml(); + PsiFile diXmlFile = findOrCreateDiXml(actionName); XmlAttributeValue typeAttributeValue = getTypeAttributeValue((XmlFile) diXmlFile); boolean isPluginDeclared = false; - boolean isTypeDeclared = false; + this.isTypeDeclared = false; if (typeAttributeValue != null) { - isTypeDeclared = true; + this.isTypeDeclared = true; isPluginDeclared = isPluginDeclared(typeAttributeValue); } if (isPluginDeclared) { - return; + return null; } - boolean finalIsTypeDeclared = isTypeDeclared; WriteCommandAction.runWriteCommandAction(project, () -> { StringBuffer textBuf = new StringBuffer(); try { - textBuf.append(getCodeTemplate.execute(ModuleDiXml.TEMPLATE_PLUGIN, getAttributes(finalIsTypeDeclared))); + textBuf.append(getCodeTemplate.execute(ModuleDiXml.TEMPLATE_PLUGIN, getAttributes())); } catch (IOException e) { e.printStackTrace(); return; } - int insertPos = finalIsTypeDeclared + int insertPos = isTypeDeclared ? getEndPositionOfTag(PsiTreeUtil.getParentOfType(typeAttributeValue, XmlTag.class)) : getRootInsertPosition((XmlFile) diXmlFile); if (textBuf.length() > 0 && insertPos >= 0) { @@ -80,6 +80,8 @@ public void generate() psiDocumentManager.commitDocument(document); } }); + + return diXmlFile; } private boolean isPluginDeclared(XmlAttributeValue typeAttributeValue) { @@ -120,13 +122,7 @@ private XmlAttributeValue getTypeAttributeValue(XmlFile diXml) { return null; } - private Properties getAttributes(boolean isTypeDeclared) { - Properties attributes = new Properties(); - this.fillAttributes(attributes, isTypeDeclared); - return attributes; - } - - private void fillAttributes(Properties attributes, boolean isTypeDeclared) { + protected void fillAttributes(Properties attributes) { if (!isTypeDeclared) { attributes.setProperty("TYPE", pluginFileData.getTargetClass().getPresentableFQN()); } @@ -136,7 +132,7 @@ private void fillAttributes(Properties attributes, boolean isTypeDeclared) { attributes.setProperty("SORT_ORDER", pluginFileData.getSortOrder()); } - private PsiFile findOrCreateDiXml() { + private PsiFile findOrCreateDiXml(String actionName) { PsiDirectory parentDirectory = ModuleIndex.getInstance(project).getModuleDirectoryByModuleName(pluginFileData.getPluginModule()); ArrayList pluginDirectories = new ArrayList<>(); pluginDirectories.add(Package.MODULE_BASE_AREA_DIR); @@ -154,7 +150,7 @@ private PsiFile findOrCreateDiXml() { project ); if (diXml == null) { - diXml = fileFromTemplateGenerator.generate(moduleDiXml, new Properties(), parentDirectory, CreateAPluginAction.ACTION_NAME); + diXml = fileFromTemplateGenerator.generate(moduleDiXml, new Properties(), parentDirectory, actionName); } return diXml; } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/MagentoPluginMethodsGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/code/PluginMethodsGenerator.java similarity index 95% rename from src/com/magento/idea/magento2plugin/actions/generation/generator/MagentoPluginMethodsGenerator.java rename to src/com/magento/idea/magento2plugin/actions/generation/generator/code/PluginMethodsGenerator.java index fd9e79b45..59d6ff202 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/MagentoPluginMethodsGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/code/PluginMethodsGenerator.java @@ -2,7 +2,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ -package com.magento.idea.magento2plugin.actions.generation.generator; +package com.magento.idea.magento2plugin.actions.generation.generator.code; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; @@ -15,14 +15,14 @@ import com.jetbrains.php.lang.documentation.phpdoc.psi.PhpDocComment; import com.jetbrains.php.lang.psi.elements.*; import com.jetbrains.php.lang.psi.resolve.types.PhpType; -import com.magento.idea.magento2plugin.actions.generation.data.MagentoPluginMethodData; +import com.magento.idea.magento2plugin.actions.generation.data.code.PluginMethodData; import com.magento.idea.magento2plugin.magento.files.Plugin; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.regex.Pattern; -public class MagentoPluginMethodsGenerator { +public class PluginMethodsGenerator { public static String originalTargetKey = "original.target"; @NotNull private final PhpClass pluginClass; @@ -31,7 +31,7 @@ public class MagentoPluginMethodsGenerator { @NotNull private final PhpClass myTargetClass; - public MagentoPluginMethodsGenerator(@NotNull PhpClass pluginClass, @NotNull Method method, Key targetClassKey) { + public PluginMethodsGenerator(@NotNull PhpClass pluginClass, @NotNull Method method, Key targetClassKey) { super(); this.pluginClass = pluginClass; this.myMethod = method; @@ -39,8 +39,8 @@ public MagentoPluginMethodsGenerator(@NotNull PhpClass pluginClass, @NotNull Met } @NotNull - public MagentoPluginMethodData[] createPluginMethods(@NotNull Plugin.PluginType type) { - List pluginMethods = new ArrayList(); + public PluginMethodData[] createPluginMethods(@NotNull Plugin.PluginType type) { + List pluginMethods = new ArrayList(); String templateName = Plugin.getMethodTemplateByPluginType(type); PhpClass currentClass = this.pluginClass; if (currentClass != null) { @@ -54,14 +54,14 @@ public MagentoPluginMethodData[] createPluginMethods(@NotNull Plugin.PluginType if (child instanceof PhpDocComment) { currDocComment = (PhpDocComment)child; } else if (child instanceof Method) { - pluginMethods.add(new MagentoPluginMethodData(myMethod, currDocComment, (Method)child)); + pluginMethods.add(new PluginMethodData(myMethod, currDocComment, (Method)child)); currDocComment = null; } } } } - return pluginMethods.toArray(new MagentoPluginMethodData[0]); + return pluginMethods.toArray(new PluginMethodData[0]); } private Properties getAccessMethodAttributes(@Nullable PhpPsiElement scopeForUseOperator, @NotNull Plugin.PluginType type) { diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/DirectoryGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/DirectoryGenerator.java index ba26a3023..065114c52 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/DirectoryGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/DirectoryGenerator.java @@ -7,6 +7,7 @@ import com.intellij.openapi.application.WriteAction; import com.intellij.psi.PsiDirectory; import com.magento.idea.magento2plugin.actions.generation.generator.data.ModuleDirectoriesData; +import com.magento.idea.magento2plugin.magento.packages.Package; import org.jetbrains.annotations.NotNull; public class DirectoryGenerator { @@ -19,10 +20,10 @@ public static DirectoryGenerator getInstance() { return INSTANCE; } - public ModuleDirectoriesData createModuleDirectories(@NotNull String packageName, @NotNull String moduleName, @NotNull PsiDirectory baseDirectory){ + public ModuleDirectoriesData createOrFindModuleDirectories(@NotNull String packageName, @NotNull String moduleName, @NotNull PsiDirectory baseDirectory){ PsiDirectory packageDirectory = findOrCreateSubdirectory(baseDirectory, packageName); PsiDirectory moduleDirectory = findOrCreateSubdirectory(packageDirectory, moduleName); - PsiDirectory moduleEtcDirectory = findOrCreateSubdirectory(moduleDirectory, "etc"); + PsiDirectory moduleEtcDirectory = findOrCreateSubdirectory(moduleDirectory, Package.MODULE_BASE_AREA_DIR); return new ModuleDirectoriesData(moduleDirectory, moduleEtcDirectory); } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/util/FillTextBufferWithPluginMethods.java b/src/com/magento/idea/magento2plugin/actions/generation/util/FillTextBufferWithPluginMethods.java index ff01d11a4..12d1d9bcb 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/util/FillTextBufferWithPluginMethods.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/util/FillTextBufferWithPluginMethods.java @@ -11,7 +11,7 @@ import com.jetbrains.php.lang.psi.elements.Parameter; import com.jetbrains.php.lang.psi.elements.PhpReturnType; import com.magento.idea.magento2plugin.actions.generation.ImportReferences.PhpClassReferenceResolver; -import com.magento.idea.magento2plugin.actions.generation.data.MagentoPluginMethodData; +import com.magento.idea.magento2plugin.actions.generation.data.code.PluginMethodData; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Arrays; @@ -28,8 +28,8 @@ public static FillTextBufferWithPluginMethods getInstance() { return INSTANCE; } - public void execute(@NotNull Key targetClassKey, Set insertedMethodsNames, @NotNull PhpClassReferenceResolver resolver, @NotNull StringBuffer textBuf, @NotNull MagentoPluginMethodData[] pluginMethods) { - for (MagentoPluginMethodData pluginMethod : pluginMethods) { + public void execute(@NotNull Key targetClassKey, Set insertedMethodsNames, @NotNull PhpClassReferenceResolver resolver, @NotNull StringBuffer textBuf, @NotNull PluginMethodData[] pluginMethods) { + for (PluginMethodData pluginMethod : pluginMethods) { insertedMethodsNames.add(pluginMethod.getMethod().getName()); PhpDocComment comment = pluginMethod.getDocComment(); if (comment != null) { From be63bdf14bb56ca10f622eba4c341b9d5e927707 Mon Sep 17 00:00:00 2001 From: Vitaliy Boyko Date: Mon, 30 Mar 2020 17:05:05 +0300 Subject: [PATCH 2/2] Fixed logical issue --- .../actions/generation/generator/PluginClassGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java index 5a9397fe8..46fca0c8e 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/PluginClassGenerator.java @@ -123,7 +123,7 @@ private boolean checkIfMethodExist(PhpClass pluginClass, PluginMethodData[] plug Collection currentPluginMethods = pluginClass.getMethods(); for (Method currentPluginMethod: currentPluginMethods) { for (PluginMethodData pluginMethod: pluginMethodData) { - if (pluginMethod.getMethod().getName().equals(currentPluginMethod.getName())){ + if (!pluginMethod.getMethod().getName().equals(currentPluginMethod.getName())){ continue; } return true;