Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Magento 2 module project template #130

Merged
merged 6 commits into from
Apr 9, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* RequireJS mapping support (reference navigation, completion)
* Plugin class methods generation
* Plugin declaration inspection in the scope of a Plugin Class
* MFTF support (reference navigation, completion)
* MFTF support MVP (reference navigation, completion)
* Fixed support of 2020.* versions of IDE's
* Create a New Magento 2 Module action
* Code Inspection: Duplicated Observer Usage in events XML
Expand All @@ -15,6 +15,10 @@
* Create a Preference for a class action
* Create a Block action
* Line markers for navigation from a plugin class to a target class
* Magento 2 Module Project template on the start up
* Create an observer for an event action
* Plugin - Target line markers
* GraphQL resolver inspection in the scope of a PHP Class

0.3.0
=============
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ This is a plugin for Magento 2 development in the PhpStorm IDE. It is available
2. Navigate to `Plugins`
3. Click the `Browse repositories...` button and search for "Magento PhpStorm"
4. Install the plugin and restart PhpStorm
5. Go to `Settings > Preferences > Languages & Frameworks > PHP > Magento` in the PhpStorm IDE
5. Go to `Settings > Preferences > Languages & Frameworks > PHP > Frameworks > Magento` in the PhpStorm IDE
6. Check `Enable` and `OK` button.

## Works with
Expand Down
15 changes: 8 additions & 7 deletions resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,9 @@
</actions>

<extensions defaultExtensionNs="com.intellij">
<projectConfigurable instance="com.magento.idea.magento2plugin.project.SettingsForm"
id="Magento2.SettingsForm"
displayName="Magento"
nonDefaultProject="true"
groupId="language"
parentId="reference.webide.settings.project.settings.php"
/>
<directoryProjectGenerator implementation="com.magento.idea.magento2plugin.generation.MagentoModuleGenerator"/>
<projectTemplatesFactory implementation="com.magento.idea.magento2plugin.generation.MagentoTemplatesFactory"/>

<projectService serviceImplementation="com.magento.idea.magento2plugin.project.Settings"/>

<completion.contributor language="XML" implementationClass="com.magento.idea.magento2plugin.completion.xml.XmlCompletionContributor" />
Expand Down Expand Up @@ -153,4 +149,9 @@
<internalFileTemplate name="Magento Module Events Xml"/>
</extensions>

<extensions defaultExtensionNs="com.jetbrains.php">
<frameworkProjectConfigurableProvider implementation="com.magento.idea.magento2plugin.project.ConfigurableProvider"/>
<frameworkUsageProvider implementation="com.magento.idea.magento2plugin.project.UsagesProvider"/>
</extensions>

</idea-plugin>
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,20 @@
package com.magento.idea.magento2plugin.actions.generation;

import com.intellij.ide.IdeView;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.jetbrains.php.lang.psi.PhpFile;
import com.jetbrains.php.lang.psi.elements.PhpClass;
import com.magento.idea.magento2plugin.MagentoIcons;
import com.magento.idea.magento2plugin.actions.generation.dialog.NewModuleDialog;
import com.magento.idea.magento2plugin.actions.generation.util.IsClickedDirectoryInsideProject;
import com.magento.idea.magento2plugin.project.Settings;
import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectory;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -57,5 +61,35 @@ private String getActionName() {
public PsiFile getFile(DataContext dataContext) {
return CommonDataKeys.PSI_FILE.getData(dataContext);
}
}

public void update(AnActionEvent event) {
Project project = event.getData(PlatformDataKeys.PROJECT);

if (Settings.isEnabled(project)) {
String magentoPath = Settings.getMagentoPath(project);
if (magentoPath == null) {
event.getPresentation().setVisible(false);
return;
}
PsiElement psiElement = event.getData(PlatformDataKeys.PSI_ELEMENT);
if (!(psiElement instanceof PsiDirectory)) {
event.getPresentation().setVisible(false);
return;
}

if(!IsClickedDirectoryInsideProject.getInstance().execute(project, (PsiDirectory) psiElement)) {
event.getPresentation().setVisible(false);
return;
}

GetModuleNameByDirectory getModuleName = GetModuleNameByDirectory.getInstance(project);
String moduleName = getModuleName.execute((PsiDirectory) psiElement);
if (moduleName == null) {
event.getPresentation().setVisible(true);
return;
}
}

event.getPresentation().setVisible(false);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public class ModuleComposerJsonData {
private final String moduleVersion;
private final List<String> moduleLicense;
private final List<String> moduleDependencies;
private final boolean createModuleDirs;

public ModuleComposerJsonData(
String packageName,
Expand All @@ -25,7 +26,8 @@ public ModuleComposerJsonData(
String composerPackageName,
String moduleVersion,
List<String> moduleLicense,
List<String> moduleDependencies
List<String> moduleDependencies,
boolean createModuleDirs
) {
this.packageName = packageName;
this.moduleName = moduleName;
Expand All @@ -35,6 +37,7 @@ public ModuleComposerJsonData(
this.moduleVersion = moduleVersion;
this.moduleLicense = moduleLicense;
this.moduleDependencies = moduleDependencies;
this.createModuleDirs = createModuleDirs;
}

public String getPackageName() {
Expand Down Expand Up @@ -68,4 +71,8 @@ public List<String> getModuleLicense() {
public List<String> getModuleDependencies() {
return moduleDependencies;
}

public boolean getCreateModuleDirs() {
return this.createModuleDirs;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,18 @@ public class ModuleRegistrationPhpData {
private final String packageName;
private final String moduleName;
private PsiDirectory baseDir;
private boolean createModuleDirs;

public ModuleRegistrationPhpData(
String packageName,
String moduleName,
PsiDirectory baseDir
PsiDirectory baseDir,
boolean createModuleDirs
) {
this.packageName = packageName;
this.moduleName = moduleName;
this.baseDir = baseDir;
this.createModuleDirs = createModuleDirs;
}

public String getPackageName() {
Expand All @@ -32,4 +35,8 @@ public String getModuleName() {
public PsiDirectory getBaseDir() {
return this.baseDir;
}

public boolean getCreateModuleDirs() {
return this.createModuleDirs;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,18 @@ public class ModuleXmlData {
private final String packageName;
private final String moduleName;
private PsiDirectory baseDir;
private boolean createModuleDirs;

public ModuleXmlData(
String packageName,
String moduleName,
PsiDirectory baseDir
PsiDirectory baseDir,
boolean createModuleDirs
) {
this.packageName = packageName;
this.moduleName = moduleName;
this.baseDir = baseDir;
this.createModuleDirs = createModuleDirs;
}

public String getPackageName() {
Expand All @@ -32,4 +35,8 @@ public String getModuleName() {
public PsiDirectory getBaseDir() {
return this.baseDir;
}

public boolean getCreateModuleDirs() {
return this.createModuleDirs;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiFile;
import com.intellij.util.indexing.FileBasedIndex;
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;
Expand All @@ -24,16 +23,13 @@
import com.magento.idea.magento2plugin.indexes.ModuleIndex;
import com.magento.idea.magento2plugin.magento.packages.Package;
import com.magento.idea.magento2plugin.project.Settings;
import com.magento.idea.magento2plugin.stubs.indexes.ModuleNameIndex;
import com.magento.idea.magento2plugin.util.CamelCaseToHyphen;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Vector;

Expand Down Expand Up @@ -168,23 +164,26 @@ private PsiFile generateComposerJson() {
getComposerPackageName(),
getModuleVersion(),
getModuleLicense(),
getModuleDependencies()
getModuleDependencies(),
true
), project).generate(NewModuleAction.ACTION_NAME);
}

private PsiFile generateRegistrationPhp() {
return new ModuleRegistrationPhpGenerator(new ModuleRegistrationPhpData(
getPackageName(),
getModuleName(),
getBaseDir()
getBaseDir(),
true
), project).generate(NewModuleAction.ACTION_NAME);
}

private void generateModuleXml() {
new ModuleXmlGenerator(new ModuleXmlData(
getPackageName(),
getModuleName(),
getBaseDir()
getBaseDir(),
true
), project).generate(NewModuleAction.ACTION_NAME, true);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
package com.magento.idea.magento2plugin.actions.generation.generator;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
Expand All @@ -18,10 +17,8 @@
import com.magento.idea.magento2plugin.magento.files.ComposerJson;
import com.magento.idea.magento2plugin.util.CamelCaseToHyphen;
import org.jetbrains.annotations.NotNull;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Properties;
import java.util.List;

Expand All @@ -45,8 +42,11 @@ public ModuleComposerJsonGenerator(@NotNull ModuleComposerJsonData moduleCompose
}

public PsiFile generate(String actionName) {
ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createOrFindModuleDirectories(moduleComposerJsonData.getPackageName(), moduleComposerJsonData.getModuleName(), moduleComposerJsonData.getBaseDir());
return fileFromTemplateGenerator.generate(ComposerJson.getInstance(), getAttributes(), moduleDirectoriesData.getModuleDirectory(), actionName);
if (moduleComposerJsonData.getCreateModuleDirs()) {
ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createOrFindModuleDirectories(moduleComposerJsonData.getPackageName(), moduleComposerJsonData.getModuleName(), moduleComposerJsonData.getBaseDir());
return fileFromTemplateGenerator.generate(ComposerJson.getInstance(), getAttributes(), moduleDirectoriesData.getModuleDirectory(), actionName);
}
return fileFromTemplateGenerator.generate(ComposerJson.getInstance(), getAttributes(), moduleComposerJsonData.getBaseDir(), actionName);
}

protected void fillAttributes(Properties attributes) {
Expand Down Expand Up @@ -81,6 +81,12 @@ protected String getLicensesString(List licensesList) {
private String getDependenciesString(List dependenciesList) {
String result = "";
Object[] dependencies = dependenciesList.toArray();
result = result.concat(ComposerJson.DEFAULT_DEPENDENCY);
if (dependencies.length == 0) {
result = result.concat("\n");
} else {
result = result.concat(",\n");
}

for (int i = 0; i < dependencies.length; i++) {
String dependency = dependencies[i].toString();
Expand All @@ -105,7 +111,7 @@ private String getDependencyVersion(String dependency) {
String version = "*";
try {
VirtualFile virtualFile = moduleIndex.getModuleDirectoryByModuleName(dependency)
.findFile("composer.json")
.findFile(ComposerJson.FILE_NAME)
.getVirtualFile();
if (virtualFile.exists()) {
JsonElement jsonElement = new JsonParser().parse(new FileReader(virtualFile.getPath()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,11 @@ public ModuleRegistrationPhpGenerator(@NotNull ModuleRegistrationPhpData moduleR
}

public PsiFile generate(String actionName) {
ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createOrFindModuleDirectories(moduleRegistrationPhpData.getPackageName(), moduleRegistrationPhpData.getModuleName(), moduleRegistrationPhpData.getBaseDir());
return fileFromTemplateGenerator.generate(RegistrationPhp.getInstance(), getAttributes(), moduleDirectoriesData.getModuleDirectory(), actionName);
if (moduleRegistrationPhpData.getCreateModuleDirs()) {
ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createOrFindModuleDirectories(moduleRegistrationPhpData.getPackageName(), moduleRegistrationPhpData.getModuleName(), moduleRegistrationPhpData.getBaseDir());
return fileFromTemplateGenerator.generate(RegistrationPhp.getInstance(), getAttributes(), moduleDirectoriesData.getModuleDirectory(), actionName);
}
return fileFromTemplateGenerator.generate(RegistrationPhp.getInstance(), getAttributes(), moduleRegistrationPhpData.getBaseDir(), actionName);
}

protected void fillAttributes(Properties attributes) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
package com.magento.idea.magento2plugin.actions.generation.generator;

import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDirectory;
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 com.magento.idea.magento2plugin.magento.packages.Package;
import org.jetbrains.annotations.NotNull;

import java.util.List;
import java.util.Properties;

public class ModuleXmlGenerator extends FileGenerator {
Expand All @@ -31,8 +31,12 @@ public ModuleXmlGenerator(@NotNull ModuleXmlData moduleXmlData, Project project)

@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);
if (moduleXmlData.getCreateModuleDirs()) {
ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createOrFindModuleDirectories(moduleXmlData.getPackageName(), moduleXmlData.getModuleName(), moduleXmlData.getBaseDir());
return fileFromTemplateGenerator.generate(ModuleXml.getInstance(), getAttributes(), moduleDirectoriesData.getModuleEtcDirectory(), actionName);
}
PsiDirectory etcDirectory = directoryGenerator.findOrCreateSubdirectory(moduleXmlData.getBaseDir(), Package.MODULE_BASE_AREA_DIR);
return fileFromTemplateGenerator.generate(ModuleXml.getInstance(), getAttributes(), etcDirectory, actionName);
}

protected void fillAttributes(Properties attributes) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
package com.magento.idea.magento2plugin.actions.generation.util;

import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.psi.PsiDirectory;
import com.magento.idea.magento2plugin.project.util.GetProjectBasePath;
import org.jetbrains.annotations.NotNull;

public class IsClickedDirectoryInsideProject {

private static IsClickedDirectoryInsideProject INSTANCE = null;

public static IsClickedDirectoryInsideProject getInstance() {
if (null == INSTANCE) {
INSTANCE = new IsClickedDirectoryInsideProject();
}
return INSTANCE;
}

public boolean execute(@NotNull Project project, PsiDirectory directory) {
return VfsUtilCore.isAncestor(GetProjectBasePath.execute(project), directory.getVirtualFile(), false);
}
}
Loading