18
18
import com .magento .idea .magento2plugin .magento .files .RegistrationPhp ;
19
19
import com .magento .idea .magento2plugin .magento .packages .ComponentType ;
20
20
import com .magento .idea .magento2plugin .magento .packages .Package ;
21
+ import com .magento .idea .magento2plugin .util .RegExUtil ;
21
22
import java .util .Collection ;
23
+ import java .util .regex .Matcher ;
24
+ import java .util .regex .Pattern ;
22
25
import org .jetbrains .annotations .NotNull ;
23
26
import org .jetbrains .annotations .Nullable ;
24
27
@@ -49,12 +52,9 @@ public static MagentoModuleData getByContext(
49
52
if (registrationFile == null ) {
50
53
return null ;
51
54
}
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 );
58
58
final Collection <MethodReference > methodReferences = PsiTreeUtil .findChildrenOfType (
59
59
registrationFile ,
60
60
MethodReference .class
@@ -80,12 +80,42 @@ public static MagentoModuleData getByContext(
80
80
return null ;
81
81
}
82
82
83
- return new MagentoModuleData (name , resolvedType , configDir , viewDir );
83
+ return new MagentoModuleData (name , resolvedType , moduleDir , configDir , viewDir );
84
84
}
85
85
86
86
return null ;
87
87
}
88
88
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
+
89
119
private static PsiFile getModuleRegistrationFile (
90
120
final @ NotNull PsiDirectory directory ,
91
121
final @ NotNull String basePath
@@ -136,6 +166,7 @@ public static class MagentoModuleData {
136
166
137
167
private final String name ;
138
168
private final ComponentType type ;
169
+ private final PsiDirectory moduleDir ;
139
170
private final PsiDirectory configDir ;
140
171
private final PsiDirectory viewDir ;
141
172
@@ -144,30 +175,35 @@ public static class MagentoModuleData {
144
175
*
145
176
* @param name String
146
177
* @param type ComponentType
178
+ * @param moduleDir PsiDirectory
147
179
*/
148
180
public MagentoModuleData (
149
181
final @ NotNull String name ,
150
- final @ NotNull ComponentType type
182
+ final @ NotNull ComponentType type ,
183
+ final @ NotNull PsiDirectory moduleDir
151
184
) {
152
- this (name , type , null , null );
185
+ this (name , type , moduleDir , null , null );
153
186
}
154
187
155
188
/**
156
189
* Constructor with a config directory specified.
157
190
*
158
191
* @param name String
159
192
* @param type ComponentType
193
+ * @param moduleDir PsiDirectory
160
194
* @param configDir PsiDirectory
161
195
* @param viewDir PsiDirectory
162
196
*/
163
197
public MagentoModuleData (
164
198
final @ NotNull String name ,
165
199
final @ NotNull ComponentType type ,
200
+ final @ NotNull PsiDirectory moduleDir ,
166
201
final @ Nullable PsiDirectory configDir ,
167
202
final @ Nullable PsiDirectory viewDir
168
203
) {
169
204
this .name = name ;
170
205
this .type = type ;
206
+ this .moduleDir = moduleDir ;
171
207
this .configDir = configDir ;
172
208
this .viewDir = viewDir ;
173
209
}
@@ -180,6 +216,10 @@ public ComponentType getType() {
180
216
return type ;
181
217
}
182
218
219
+ public PsiDirectory getModuleDir () {
220
+ return moduleDir ;
221
+ }
222
+
183
223
public @ Nullable PsiDirectory getConfigDir () {
184
224
return configDir ;
185
225
}
0 commit comments