Skip to content

Commit 828285d

Browse files
author
Vitaliy Boyko
committed
64: static fixes 2
1 parent aa4ab41 commit 828285d

File tree

4 files changed

+133
-117
lines changed

4 files changed

+133
-117
lines changed

src/com/magento/idea/magento2plugin/actions/generation/OverrideInThemeAction.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import com.magento.idea.magento2plugin.magento.packages.ComponentType;
1717
import com.magento.idea.magento2plugin.magento.packages.Package;
1818
import com.magento.idea.magento2plugin.project.Settings;
19-
import com.magento.idea.magento2plugin.util.magento.GetComponentNameByDirectory;
19+
import com.magento.idea.magento2plugin.util.magento.GetComponentNameByDirectoryUtil;
2020
import com.magento.idea.magento2plugin.util.magento.GetComponentTypeByNameUtil;
2121
import org.jetbrains.annotations.NotNull;
2222

@@ -60,10 +60,9 @@ private boolean isOverrideAllowed(final VirtualFile file, final Project project)
6060

6161
boolean isAllowed = false;
6262

63-
final GetComponentNameByDirectory getComponentNameByDirectory = GetComponentNameByDirectory
64-
.getInstance(project);
65-
final String componentType = GetComponentTypeByNameUtil.execute(getComponentNameByDirectory
66-
.execute(psiFile.getContainingDirectory()));
63+
final String componentType = GetComponentTypeByNameUtil.execute(
64+
GetComponentNameByDirectoryUtil.execute(psiFile.getContainingDirectory(), project)
65+
);
6766

6867
if (componentType.equals(ComponentType.module.toString())) {
6968
isAllowed = file.getPath().contains(Package.moduleViewDir);

src/com/magento/idea/magento2plugin/actions/generation/generator/OverrideInThemeGenerator.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import com.magento.idea.magento2plugin.magento.packages.Areas;
1919
import com.magento.idea.magento2plugin.magento.packages.ComponentType;
2020
import com.magento.idea.magento2plugin.util.RegExUtil;
21-
import com.magento.idea.magento2plugin.util.magento.GetComponentNameByDirectory;
21+
import com.magento.idea.magento2plugin.util.magento.GetComponentNameByDirectoryUtil;
2222
import com.magento.idea.magento2plugin.util.magento.GetComponentTypeByNameUtil;
2323
import java.util.ArrayList;
2424
import java.util.Collections;
@@ -42,16 +42,17 @@ public OverrideInThemeGenerator(final Project project) {
4242
* @param themeName String
4343
*/
4444
public void execute(final PsiFile baseFile, final String themeName) {
45-
final GetComponentNameByDirectory getComponentNameByDirectory = GetComponentNameByDirectory
46-
.getInstance(project);
47-
final String componentType = GetComponentTypeByNameUtil.execute(getComponentNameByDirectory
48-
.execute(baseFile.getContainingDirectory()));
45+
final String componentType = GetComponentTypeByNameUtil.execute(GetComponentNameByDirectoryUtil
46+
.execute(baseFile.getContainingDirectory(), project));
4947

5048
List<String> pathComponents;
5149
if (componentType.equals(ComponentType.module.toString())) {
5250
pathComponents = getModulePathComponents(
5351
baseFile,
54-
getComponentNameByDirectory.execute(baseFile.getContainingDirectory())
52+
GetComponentNameByDirectoryUtil.execute(
53+
baseFile.getContainingDirectory(),
54+
project
55+
)
5556
);
5657
} else if (componentType.equals(ComponentType.theme.toString())) {
5758
pathComponents = getThemePathComponents(baseFile);

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

Lines changed: 0 additions & 106 deletions
This file was deleted.
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.util.magento;
7+
8+
import com.intellij.openapi.project.Project;
9+
import com.intellij.psi.PsiDirectory;
10+
import com.intellij.psi.PsiElement;
11+
import com.intellij.psi.util.PsiTreeUtil;
12+
import com.jetbrains.php.lang.psi.PhpFile;
13+
import com.jetbrains.php.lang.psi.elements.MethodReference;
14+
import com.jetbrains.php.lang.psi.elements.StringLiteralExpression;
15+
import com.magento.idea.magento2plugin.magento.files.RegistrationPhp;
16+
import org.jetbrains.annotations.Nullable;
17+
18+
public final class GetComponentNameByDirectoryUtil {
19+
20+
private GetComponentNameByDirectoryUtil() {}
21+
22+
/**
23+
* Returns component name.
24+
*
25+
* @param psiDirectory PsiDirectory
26+
* @param project Project
27+
* @return String
28+
*/
29+
public static String execute(final PsiDirectory psiDirectory, final Project project) {
30+
final PhpFile registrationPhp = getRegistrationPhpRecursively(psiDirectory, project);
31+
if (registrationPhp == null) {
32+
return null;
33+
}
34+
final PsiElement[] childElements = registrationPhp.getChildren();
35+
if (childElements.length == 0) {
36+
return null;
37+
}
38+
return getName(childElements);
39+
}
40+
41+
/**
42+
* Get module registration.php file.
43+
*
44+
* @param psiDirectory PsiDirectory
45+
* @param project Project
46+
* @return PhpFile
47+
*/
48+
private static PhpFile getRegistrationPhpRecursively(
49+
final PsiDirectory psiDirectory,
50+
final Project project
51+
) {
52+
final PsiElement[] containingFiles = psiDirectory.getChildren();
53+
final PhpFile containingFile = getModuleRegistrationPhpFile(containingFiles);
54+
if (containingFile != null) {
55+
return containingFile;
56+
}
57+
final String basePath = project.getBasePath();
58+
if (psiDirectory.getVirtualFile().getPath().equals(basePath)) {
59+
return null;
60+
}
61+
final PsiDirectory getParent = psiDirectory.getParent();
62+
if (getParent != null) {
63+
return getRegistrationPhpRecursively(getParent, project);
64+
}
65+
return null;
66+
}
67+
68+
private static String getName(final PsiElement... childElements) {
69+
final MethodReference[] methods = parseRegistrationPhpElements(childElements);
70+
for (final MethodReference method: methods) {
71+
if (!method.getName().equals(RegistrationPhp.REGISTER_METHOD_NAME)) {
72+
continue;
73+
}
74+
final PsiElement[] parameters = method.getParameters();
75+
for (final PsiElement parameter: parameters) {
76+
if (!(parameter instanceof StringLiteralExpression)) {
77+
continue;
78+
}
79+
return ((StringLiteralExpression) parameter).getContents(); //NOPMD
80+
}
81+
}
82+
return null;
83+
}
84+
85+
/**
86+
* Parse registration PHP.
87+
*
88+
* @param elements PsiElement...
89+
* @return MethodReference[]
90+
*/
91+
public static MethodReference[] parseRegistrationPhpElements(final PsiElement... elements) {
92+
for (final PsiElement element: elements) {
93+
MethodReference[] methods = PsiTreeUtil
94+
.getChildrenOfType(element, MethodReference.class);
95+
if (methods == null) {
96+
final PsiElement[] children = element.getChildren();
97+
methods = parseRegistrationPhpElements(children);
98+
}
99+
if (methods != null) {
100+
return methods;
101+
}
102+
}
103+
return new MethodReference[0];
104+
}
105+
106+
@Nullable
107+
private static PhpFile getModuleRegistrationPhpFile(final PsiElement... containingFiles) {
108+
if (containingFiles.length != 0) {
109+
for (final PsiElement containingFile: containingFiles) {
110+
if (!(containingFile instanceof PhpFile)) {
111+
continue;
112+
}
113+
final String filename = ((PhpFile) containingFile).getName();
114+
if (!filename.equals(RegistrationPhp.FILE_NAME)) {
115+
continue;
116+
}
117+
return (PhpFile) containingFile; //NOPMD
118+
}
119+
}
120+
return null;
121+
}
122+
}

0 commit comments

Comments
 (0)