1919import com .magento .idea .magento2plugin .magento .packages .ComponentType ;
2020import com .magento .idea .magento2plugin .magento .packages .Package ;
2121import java .util .Collection ;
22+ import java .util .regex .Matcher ;
23+ import java .util .regex .Pattern ;
24+
25+ import com .magento .idea .magento2plugin .util .RegExUtil ;
2226import org .jetbrains .annotations .NotNull ;
2327import 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