Skip to content

Commit 0bb3c44

Browse files
Bugfix-765: Code refactoring
1 parent 3e0d7be commit 0bb3c44

File tree

1 file changed

+108
-62
lines changed

1 file changed

+108
-62
lines changed

src/com/magento/idea/magento2plugin/linemarker/php/PluginLineMarkerProvider.java

Lines changed: 108 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Copyright © Magento, Inc. All rights reserved.
33
* See COPYING.txt for license details.
44
*/
5+
56
package com.magento.idea.magento2plugin.linemarker.php;
67

78
import com.intellij.codeInsight.daemon.LineMarkerInfo;
@@ -17,156 +18,201 @@
1718
import com.jetbrains.php.lang.psi.elements.PhpClass;
1819
import com.magento.idea.magento2plugin.project.Settings;
1920
import com.magento.idea.magento2plugin.stubs.indexes.PluginIndex;
21+
import java.util.ArrayList;
22+
import java.util.Collection;
23+
import java.util.HashMap;
24+
import java.util.List;
25+
import java.util.Map;
26+
import java.util.Set;
2027
import org.apache.commons.lang.WordUtils;
2128
import org.jetbrains.annotations.NotNull;
2229
import org.jetbrains.annotations.Nullable;
2330

24-
import java.util.*;
25-
2631
public class PluginLineMarkerProvider implements LineMarkerProvider {
27-
@Nullable
32+
33+
private static final String TOOLTIP_TEXT = "Navigate to plugins";
34+
private static final int MIN_PLUGIN_METHOD_NAME_LENGTH = 6;
35+
2836
@Override
29-
public LineMarkerInfo getLineMarkerInfo(@NotNull PsiElement psiElement) {
37+
public @Nullable LineMarkerInfo<?> getLineMarkerInfo(final @NotNull PsiElement psiElement) {
3038
return null;
3139
}
3240

3341
@Override
34-
public void collectSlowLineMarkers(@NotNull List<? extends PsiElement> psiElements, @NotNull Collection<? super LineMarkerInfo<?>> collection) {
35-
if (psiElements.size() > 0) {
36-
if (!Settings.isEnabled(psiElements.get(0).getProject())) {
37-
return;
38-
}
42+
public void collectSlowLineMarkers(
43+
final @NotNull List<? extends PsiElement> psiElements,
44+
final @NotNull Collection<? super LineMarkerInfo<?>> collection
45+
) {
46+
if (psiElements.isEmpty()) {
47+
return;
3948
}
40-
PluginClassCache pluginClassCache = new PluginClassCache();
41-
ClassPluginCollector classPluginCollector = new ClassPluginCollector(pluginClassCache);
42-
MethodPluginCollector methodPluginCollector = new MethodPluginCollector(pluginClassCache);
4349

44-
for (PsiElement psiElement : psiElements) {
50+
if (!Settings.isEnabled(psiElements.get(0).getProject())) {
51+
return;
52+
}
53+
final PluginClassCache pluginClassCache = new PluginClassCache();
54+
final ClassPluginCollector classPluginCollector = new ClassPluginCollector(
55+
pluginClassCache
56+
);
57+
final MethodPluginCollector methodPluginCollector = new MethodPluginCollector(
58+
pluginClassCache
59+
);
60+
61+
for (final PsiElement psiElement : psiElements) {
4562
if (psiElement instanceof PhpClass || psiElement instanceof Method) {
46-
List<? extends PsiElement> results;
63+
final List<? extends PsiElement> results;
4764

4865
if (psiElement instanceof PhpClass) {
4966
results = classPluginCollector.collect((PhpClass) psiElement);
5067
} else {
5168
results = methodPluginCollector.collect((Method) psiElement);
5269
}
5370

54-
if (results.size() > 0 ) {
55-
collection.add(NavigationGutterIconBuilder
56-
.create(AllIcons.Nodes.Plugin)
57-
.setTargets(results)
58-
.setTooltipText("Navigate to plugins")
59-
.createLineMarkerInfo(PsiTreeUtil.getDeepestFirst(psiElement))
71+
if (!results.isEmpty()) {
72+
collection.add(
73+
NavigationGutterIconBuilder
74+
.create(AllIcons.Nodes.Plugin)
75+
.setTargets(results)
76+
.setTooltipText(TOOLTIP_TEXT)
77+
.createLineMarkerInfo(PsiTreeUtil.getDeepestFirst(psiElement))
6078
);
6179
}
6280
}
6381
}
6482
}
6583

6684
private static class PluginClassCache {
67-
private HashMap<String, List<PhpClass>> classPluginsMap = new HashMap<String, List<PhpClass>>();
6885

69-
List<PhpClass> getPluginsForClass(@NotNull PhpClass phpClass, @NotNull String classFQN) {
70-
List<PhpClass> results = new ArrayList<>();
86+
private final Map<String, List<PhpClass>> classPluginsMap = new HashMap<>();
87+
88+
public List<PhpClass> getPluginsForClass(final @NotNull PhpClass phpClass) {
89+
final List<PhpClass> pluginsForClass = getPluginsForClass(
90+
phpClass,
91+
phpClass.getPresentableFQN()
92+
);
93+
94+
for (final PhpClass parent : phpClass.getSupers()) {
95+
pluginsForClass.addAll(getPluginsForClass(parent));
96+
}
97+
98+
return pluginsForClass;
99+
}
71100

101+
public List<PhpClass> getPluginsForClass(
102+
final @NotNull PhpClass phpClass,
103+
final @NotNull String classFQN
104+
) {
72105
if (classPluginsMap.containsKey(classFQN)) {
73106
return classPluginsMap.get(classFQN);
74107
}
75108

76-
List<Set<String>> plugins = FileBasedIndex.getInstance()
77-
.getValues(PluginIndex.KEY, classFQN, GlobalSearchScope.allScope(phpClass.getProject()));
109+
final List<Set<String>> plugins = FileBasedIndex.getInstance()
110+
.getValues(
111+
PluginIndex.KEY,
112+
classFQN,
113+
GlobalSearchScope.allScope(phpClass.getProject())
114+
);
115+
final List<PhpClass> results = new ArrayList<>();
78116

79-
if (plugins.size() == 0) {
117+
if (plugins.isEmpty()) {
80118
classPluginsMap.put(classFQN, results);
119+
81120
return results;
82121
}
122+
final PhpIndex phpIndex = PhpIndex.getInstance(phpClass.getProject());
83123

84-
PhpIndex phpIndex = PhpIndex.getInstance(phpClass.getProject());
85-
86-
for (Set<String> pluginClassNames: plugins) {
87-
for (String pluginClassName: pluginClassNames) {
124+
for (final Set<String> pluginClassNames : plugins) {
125+
for (final String pluginClassName: pluginClassNames) {
88126
results.addAll(phpIndex.getClassesByFQN(pluginClassName));
89127
}
90128
}
91129
classPluginsMap.put(classFQN, results);
130+
92131
return results;
93132
}
94133

95-
List<PhpClass> getPluginsForClass(@NotNull PhpClass phpClass)
96-
{
97-
List<PhpClass> pluginsForClass = getPluginsForClass(phpClass, phpClass.getPresentableFQN());
98-
for (PhpClass parent: phpClass.getSupers()) {
99-
pluginsForClass.addAll(getPluginsForClass(parent));
134+
public List<Method> getPluginMethods(final List<PhpClass> plugins) {
135+
final List<Method> methodList = new ArrayList<>();
136+
137+
for (final PhpClass plugin: plugins) {
138+
methodList.addAll(getPluginMethods(plugin));
100139
}
101140

102-
return pluginsForClass;
141+
return methodList;
103142
}
104143

105-
List<Method> getPluginMethods(@NotNull PhpClass plugin) {
106-
List<Method> methodList = new ArrayList<Method>();
107-
for (Method method : plugin.getMethods()) {
144+
public List<Method> getPluginMethods(final @NotNull PhpClass pluginClass) {
145+
final List<Method> methodList = new ArrayList<>();
146+
147+
for (final Method method : pluginClass.getMethods()) {
108148
if (method.getAccess().isPublic()) {
109-
String pluginMethodName = method.getName();
110-
if (pluginMethodName.length() > 6) {
149+
final String pluginMethodName = method.getName();
150+
151+
if (pluginMethodName.length() > MIN_PLUGIN_METHOD_NAME_LENGTH) {
111152
methodList.add(method);
112153
}
113154
}
114155
}
115-
return methodList;
116-
}
117156

118-
List<Method> getPluginMethods(List<PhpClass> plugins) {
119-
List<Method> methodList = new ArrayList<Method>();
120-
for (PhpClass plugin: plugins) {
121-
methodList.addAll(getPluginMethods(plugin));
122-
}
123157
return methodList;
124158
}
125159
}
126160

127161
private static class ClassPluginCollector implements Collector<PhpClass, PhpClass> {
128-
private PluginLineMarkerProvider.PluginClassCache pluginClassCache;
129162

130-
ClassPluginCollector(PluginLineMarkerProvider.PluginClassCache pluginClassCache) {
163+
private final PluginLineMarkerProvider.PluginClassCache pluginClassCache;
164+
165+
public ClassPluginCollector(
166+
final PluginLineMarkerProvider.PluginClassCache pluginClassCache
167+
) {
131168
this.pluginClassCache = pluginClassCache;
132169
}
133170

134171
@Override
135-
public List<PhpClass> collect(@NotNull PhpClass psiElement) {
172+
public List<PhpClass> collect(final @NotNull PhpClass psiElement) {
136173
return pluginClassCache.getPluginsForClass(psiElement);
137174
}
138175
}
139176

140177
private static class MethodPluginCollector implements Collector<Method, Method> {
141-
private PluginLineMarkerProvider.PluginClassCache pluginClassCache;
142178

143-
MethodPluginCollector(PluginLineMarkerProvider.PluginClassCache pluginClassCache) {
179+
private final PluginLineMarkerProvider.PluginClassCache pluginClassCache;
180+
181+
public MethodPluginCollector(
182+
final PluginLineMarkerProvider.PluginClassCache pluginClassCache
183+
) {
144184
this.pluginClassCache = pluginClassCache;
145185
}
146186

147187
@Override
148-
public List<Method> collect(@NotNull Method psiElement) {
149-
List<Method> results = new ArrayList<>();
188+
public List<Method> collect(final @NotNull Method psiElement) {
189+
final List<Method> results = new ArrayList<>();
190+
191+
final PhpClass methodClass = psiElement.getContainingClass();
150192

151-
PhpClass methodClass = psiElement.getContainingClass();
152193
if (methodClass == null) {
153194
return results;
154195
}
196+
final List<PhpClass> pluginsList = pluginClassCache.getPluginsForClass(methodClass);
197+
final List<Method> pluginMethods = pluginClassCache.getPluginMethods(pluginsList);
155198

156-
List<PhpClass> pluginsList = pluginClassCache.getPluginsForClass(methodClass);
157-
List<Method> pluginMethods = pluginClassCache.getPluginMethods(pluginsList);
199+
final String classMethodName = WordUtils.capitalize(psiElement.getName());
158200

159-
String classMethodName = WordUtils.capitalize(psiElement.getName());
160-
for (Method pluginMethod: pluginMethods) {
201+
for (final Method pluginMethod: pluginMethods) {
161202
if (isPluginMethodName(pluginMethod.getName(), classMethodName)) {
162203
results.add(pluginMethod);
163204
}
164205
}
206+
165207
return results;
166208
}
167209

168-
private boolean isPluginMethodName(String pluginMethodName, String classMethodName) {
169-
return pluginMethodName.substring(5).equals(classMethodName) || pluginMethodName.substring(6).equals(classMethodName);
210+
private boolean isPluginMethodName(
211+
final String pluginMethodName,
212+
final String classMethodName
213+
) {
214+
return pluginMethodName.substring(5).equals(classMethodName)
215+
|| pluginMethodName.substring(6).equals(classMethodName);
170216
}
171217
}
172218

0 commit comments

Comments
 (0)