Skip to content

Commit e2f9b0b

Browse files
1010: Fixed module context actions are available in the theme context
1 parent 1982e56 commit e2f9b0b

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

Lines changed: 9 additions & 1 deletion
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;
@@ -56,7 +58,7 @@ public void update(final @NotNull AnActionEvent event) {
5658

5759
final Project project = event.getProject();
5860

59-
if (project == null) {
61+
if (project == null || !Settings.isEnabled(project)) {
6062
return;
6163
}
6264
final DataContext context = event.getDataContext();
@@ -86,6 +88,12 @@ public void update(final @NotNull AnActionEvent event) {
8688
|| !isVisible(moduleData, targetDirectory, targetFile)) {
8789
return;
8890
}
91+
92+
if (moduleData.getType().equals(ComponentType.module)
93+
&& !GetMagentoModuleUtil.isEditableModule(moduleData)) {
94+
return;
95+
}
96+
8997
customDataContext = SimpleDataContext
9098
.builder()
9199
.add(

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

Lines changed: 3 additions & 1 deletion
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

Lines changed: 4 additions & 0 deletions
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

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
import com.magento.idea.magento2plugin.magento.packages.ComponentType;
2020
import com.magento.idea.magento2plugin.magento.packages.Package;
2121
import java.util.Collection;
22+
import java.util.regex.Matcher;
23+
import java.util.regex.Pattern;
24+
25+
import com.magento.idea.magento2plugin.util.RegExUtil;
2226
import org.jetbrains.annotations.NotNull;
2327
import org.jetbrains.annotations.Nullable;
2428

@@ -49,12 +53,9 @@ public static MagentoModuleData getByContext(
4953
if (registrationFile == null) {
5054
return null;
5155
}
52-
final PsiDirectory configDir = registrationFile
53-
.getContainingDirectory()
54-
.findSubdirectory(Package.moduleBaseAreaDir);
55-
final PsiDirectory viewDir = registrationFile
56-
.getContainingDirectory()
57-
.findSubdirectory(Package.moduleViewDir);
56+
final PsiDirectory moduleDir = registrationFile.getContainingDirectory();
57+
final PsiDirectory configDir = moduleDir.findSubdirectory(Package.moduleBaseAreaDir);
58+
final PsiDirectory viewDir = moduleDir.findSubdirectory(Package.moduleViewDir);
5859
final Collection<MethodReference> methodReferences = PsiTreeUtil.findChildrenOfType(
5960
registrationFile,
6061
MethodReference.class
@@ -80,12 +81,42 @@ public static MagentoModuleData getByContext(
8081
return null;
8182
}
8283

83-
return new MagentoModuleData(name, resolvedType, configDir, viewDir);
84+
return new MagentoModuleData(name, resolvedType, moduleDir, configDir, viewDir);
8485
}
8586

8687
return null;
8788
}
8889

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

137168
private final String name;
138169
private final ComponentType type;
170+
private final PsiDirectory moduleDir;
139171
private final PsiDirectory configDir;
140172
private final PsiDirectory viewDir;
141173

@@ -144,30 +176,35 @@ public static class MagentoModuleData {
144176
*
145177
* @param name String
146178
* @param type ComponentType
179+
* @param moduleDir PsiDirectory
147180
*/
148181
public MagentoModuleData(
149182
final @NotNull String name,
150-
final @NotNull ComponentType type
183+
final @NotNull ComponentType type,
184+
final @NotNull PsiDirectory moduleDir
151185
) {
152-
this(name, type, null, null);
186+
this(name, type, moduleDir, null, null);
153187
}
154188

155189
/**
156190
* Constructor with a config directory specified.
157191
*
158192
* @param name String
159193
* @param type ComponentType
194+
* @param moduleDir PsiDirectory
160195
* @param configDir PsiDirectory
161196
* @param viewDir PsiDirectory
162197
*/
163198
public MagentoModuleData(
164199
final @NotNull String name,
165200
final @NotNull ComponentType type,
201+
final @NotNull PsiDirectory moduleDir,
166202
final @Nullable PsiDirectory configDir,
167203
final @Nullable PsiDirectory viewDir
168204
) {
169205
this.name = name;
170206
this.type = type;
207+
this.moduleDir = moduleDir;
171208
this.configDir = configDir;
172209
this.viewDir = viewDir;
173210
}
@@ -180,6 +217,10 @@ public ComponentType getType() {
180217
return type;
181218
}
182219

220+
public PsiDirectory getModuleDir() {
221+
return moduleDir;
222+
}
223+
183224
public @Nullable PsiDirectory getConfigDir() {
184225
return configDir;
185226
}

0 commit comments

Comments
 (0)