forked from magento/magento2-phpstorm-plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCronGroupIndexer.java
106 lines (90 loc) · 3.19 KB
/
CronGroupIndexer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
package com.magento.idea.magento2plugin.stubs.indexes;
import com.intellij.ide.highlighter.XmlFileType;
import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.xml.XmlDocument;
import com.intellij.psi.xml.XmlFile;
import com.intellij.psi.xml.XmlTag;
import com.intellij.util.indexing.*;
import com.intellij.util.io.DataExternalizer;
import com.intellij.util.io.EnumeratorStringDescriptor;
import com.intellij.util.io.KeyDescriptor;
import com.magento.idea.magento2plugin.magento.files.CronGroups;
import com.magento.idea.magento2plugin.project.Settings;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Map;
/**
* CronGroupIndex collects all cron groups from cron_groups.xml files.
*/
public class CronGroupIndexer extends FileBasedIndexExtension<String, String> {
public static final ID<String, String> KEY
= ID.create("com.magento.idea.magento2plugin.stubs.indexes.cron_tabs");
private final KeyDescriptor<String> myKeyDescriptor = new EnumeratorStringDescriptor();
@NotNull
@Override
public ID<String, String> getName() {
return KEY;
}
@NotNull
@Override
public DataIndexer<String, String, FileContent> getIndexer() {
return fileContent -> {
Map<String, String> map = new HashMap<>();
PsiFile psiFile = fileContent.getPsiFile();
if (!Settings.isEnabled(psiFile.getProject())) {
return map;
}
if (!(psiFile instanceof XmlFile)) {
return map;
}
XmlDocument document = ((XmlFile) psiFile).getDocument();
if (document == null) {
return map;
}
XmlTag[] xmlTags = PsiTreeUtil.getChildrenOfType(psiFile.getFirstChild(), XmlTag.class);
if (xmlTags == null) {
return map;
}
for (XmlTag xmlTag: xmlTags) {
if (xmlTag.getName().equals(CronGroups.CONFIG_TAG)) {
for (XmlTag typeNode: xmlTag.findSubTags(CronGroups.GROUP_TAG)) {
String groupId = typeNode.getAttributeValue(CronGroups.ID_ATTRIBUTE);
if (groupId != null) {
map.put(groupId, fileContent.getFile().getPath());
}
}
}
}
return map;
};
}
@NotNull
@Override
public KeyDescriptor<String> getKeyDescriptor() {
return myKeyDescriptor;
}
@NotNull
@Override
public DataExternalizer<String> getValueExternalizer() {
return new EnumeratorStringDescriptor();
}
@NotNull
@Override
public FileBasedIndex.InputFilter getInputFilter() {
return virtualFile -> (virtualFile.getFileType() == XmlFileType.INSTANCE
&& virtualFile.getNameWithoutExtension().equals(CronGroups.FILE_NAME_NO_EXTENSION));
}
@Override
public boolean dependsOnFileContent() {
return true;
}
@Override
public int getVersion() {
return 1;
}
}