Skip to content

Commit 7177330

Browse files
Merge pull request #1064 from bohdan-harniuk/1010-fix-module-context-actions-available-in-the-theme
1010: Fixed module context actions available in the theme
2 parents 6441a3e + e9ca60a commit 7177330

File tree

4 files changed

+66
-11
lines changed

4 files changed

+66
-11
lines changed

src/com/magento/idea/magento2plugin/actions/context/AbstractContextAction.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
import com.intellij.psi.PsiFile;
2121
import com.magento.idea.magento2plugin.MagentoIcons;
2222
import com.magento.idea.magento2plugin.magento.files.ModuleFileInterface;
23+
import com.magento.idea.magento2plugin.magento.packages.ComponentType;
2324
import com.magento.idea.magento2plugin.magento.packages.Package;
25+
import com.magento.idea.magento2plugin.project.Settings;
2426
import com.magento.idea.magento2plugin.util.magento.GetMagentoModuleUtil;
2527
import org.jetbrains.annotations.NotNull;
2628
import org.jetbrains.annotations.Nullable;
@@ -50,13 +52,14 @@ public AbstractContextAction(
5052
}
5153

5254
@Override
55+
@SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.NPathComplexity"})
5356
public void update(final @NotNull AnActionEvent event) {
5457
event.getPresentation().setEnabled(false);
5558
event.getPresentation().setVisible(false);
5659

5760
final Project project = event.getProject();
5861

59-
if (project == null) {
62+
if (project == null || !Settings.isEnabled(project)) {
6063
return;
6164
}
6265
final DataContext context = event.getDataContext();
@@ -86,6 +89,12 @@ public void update(final @NotNull AnActionEvent event) {
8689
|| !isVisible(moduleData, targetDirectory, targetFile)) {
8790
return;
8891
}
92+
93+
if (moduleData.getType().equals(ComponentType.module)
94+
&& !GetMagentoModuleUtil.isEditableModule(moduleData)) {
95+
return;
96+
}
97+
8998
customDataContext = SimpleDataContext
9099
.builder()
91100
.add(

src/com/magento/idea/magento2plugin/actions/groups/NewModuleFileGroup.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.magento.idea.magento2plugin.actions.generation.util.IsClickedDirectoryInsideProject;
1717
import com.magento.idea.magento2plugin.indexes.ModuleIndex;
1818
import com.magento.idea.magento2plugin.project.Settings;
19+
import com.magento.idea.magento2plugin.util.magento.GetMagentoModuleUtil;
1920
import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil;
2021
import javax.swing.Icon;
2122
import org.jetbrains.annotations.NotNull;
@@ -62,7 +63,8 @@ public void update(final AnActionEvent event) {
6263
final PsiDirectory moduleDirectory = new ModuleIndex(project)
6364
.getModuleDirectoryByModuleName(moduleName);
6465

65-
if (moduleDirectory != null) {
66+
if (moduleDirectory != null
67+
&& GetMagentoModuleUtil.isDirectoryInEditableModule(moduleDirectory)) {
6668
event.getPresentation().setVisible(true);
6769
return;
6870
}

src/com/magento/idea/magento2plugin/util/RegExUtil.java

+4
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ public static class Magento {
8383

8484
public static final String TEST_CLASS_FQN =
8585
"^(\\\\)?(\\w+\\\\){1}(\\w+\\\\){1}Test(\\\\\\w+)+$";
86+
87+
public static final String CUSTOM_VENDOR_NAME =
88+
"app\\/code\\/(\\w+)\\/";
8689
}
8790

8891
public static class PhpRegex {
@@ -111,6 +114,7 @@ public static class JsRegex {
111114
}
112115

113116
public static class CustomTheme {
117+
114118
public static final String MODULE_NAME =
115119
"app\\/design\\/(adminhtml|frontend)\\/\\w*\\/\\w*\\/\\w*";
116120
}

src/com/magento/idea/magento2plugin/util/magento/GetMagentoModuleUtil.java

+49-9
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@
1818
import com.magento.idea.magento2plugin.magento.files.RegistrationPhp;
1919
import com.magento.idea.magento2plugin.magento.packages.ComponentType;
2020
import com.magento.idea.magento2plugin.magento.packages.Package;
21+
import com.magento.idea.magento2plugin.util.RegExUtil;
2122
import java.util.Collection;
23+
import java.util.regex.Matcher;
24+
import java.util.regex.Pattern;
2225
import org.jetbrains.annotations.NotNull;
2326
import org.jetbrains.annotations.Nullable;
2427

@@ -49,12 +52,9 @@ public static MagentoModuleData getByContext(
4952
if (registrationFile == null) {
5053
return null;
5154
}
52-
final PsiDirectory configDir = registrationFile
53-
.getContainingDirectory()
54-
.findSubdirectory(Package.moduleBaseAreaDir);
55-
final PsiDirectory viewDir = registrationFile
56-
.getContainingDirectory()
57-
.findSubdirectory(Package.moduleViewDir);
55+
final PsiDirectory moduleDir = registrationFile.getContainingDirectory();
56+
final PsiDirectory configDir = moduleDir.findSubdirectory(Package.moduleBaseAreaDir);
57+
final PsiDirectory viewDir = moduleDir.findSubdirectory(Package.moduleViewDir);
5858
final Collection<MethodReference> methodReferences = PsiTreeUtil.findChildrenOfType(
5959
registrationFile,
6060
MethodReference.class
@@ -80,12 +80,42 @@ public static MagentoModuleData getByContext(
8080
return null;
8181
}
8282

83-
return new MagentoModuleData(name, resolvedType, configDir, viewDir);
83+
return new MagentoModuleData(name, resolvedType, moduleDir, configDir, viewDir);
8484
}
8585

8686
return null;
8787
}
8888

89+
/**
90+
* Check if specified module is in the app/code directory.
91+
*
92+
* @param moduleData MagentoModuleData
93+
*
94+
* @return boolean
95+
*/
96+
public static boolean isEditableModule(final @NotNull MagentoModuleData moduleData) {
97+
final Pattern pattern = Pattern.compile(RegExUtil.Magento.CUSTOM_VENDOR_NAME);
98+
final Matcher matcher = pattern.matcher(
99+
moduleData.getModuleDir().getVirtualFile().getPath()
100+
);
101+
102+
return matcher.find();
103+
}
104+
105+
/**
106+
* Check if specified directory is in the app/code.
107+
*
108+
* @param directory PsiDirectory
109+
*
110+
* @return boolean
111+
*/
112+
public static boolean isDirectoryInEditableModule(final @NotNull PsiDirectory directory) {
113+
final Pattern pattern = Pattern.compile(RegExUtil.Magento.CUSTOM_VENDOR_NAME);
114+
final Matcher matcher = pattern.matcher(directory.getVirtualFile().getPath());
115+
116+
return matcher.find();
117+
}
118+
89119
private static PsiFile getModuleRegistrationFile(
90120
final @NotNull PsiDirectory directory,
91121
final @NotNull String basePath
@@ -136,6 +166,7 @@ public static class MagentoModuleData {
136166

137167
private final String name;
138168
private final ComponentType type;
169+
private final PsiDirectory moduleDir;
139170
private final PsiDirectory configDir;
140171
private final PsiDirectory viewDir;
141172

@@ -144,30 +175,35 @@ public static class MagentoModuleData {
144175
*
145176
* @param name String
146177
* @param type ComponentType
178+
* @param moduleDir PsiDirectory
147179
*/
148180
public MagentoModuleData(
149181
final @NotNull String name,
150-
final @NotNull ComponentType type
182+
final @NotNull ComponentType type,
183+
final @NotNull PsiDirectory moduleDir
151184
) {
152-
this(name, type, null, null);
185+
this(name, type, moduleDir, null, null);
153186
}
154187

155188
/**
156189
* Constructor with a config directory specified.
157190
*
158191
* @param name String
159192
* @param type ComponentType
193+
* @param moduleDir PsiDirectory
160194
* @param configDir PsiDirectory
161195
* @param viewDir PsiDirectory
162196
*/
163197
public MagentoModuleData(
164198
final @NotNull String name,
165199
final @NotNull ComponentType type,
200+
final @NotNull PsiDirectory moduleDir,
166201
final @Nullable PsiDirectory configDir,
167202
final @Nullable PsiDirectory viewDir
168203
) {
169204
this.name = name;
170205
this.type = type;
206+
this.moduleDir = moduleDir;
171207
this.configDir = configDir;
172208
this.viewDir = viewDir;
173209
}
@@ -180,6 +216,10 @@ public ComponentType getType() {
180216
return type;
181217
}
182218

219+
public PsiDirectory getModuleDir() {
220+
return moduleDir;
221+
}
222+
183223
public @Nullable PsiDirectory getConfigDir() {
184224
return configDir;
185225
}

0 commit comments

Comments
 (0)