4
4
import com .intellij .openapi .util .Key ;
5
5
import com .intellij .patterns .PlatformPatterns ;
6
6
import com .intellij .psi .PsiElement ;
7
+ import com .intellij .psi .search .GlobalSearchScope ;
7
8
import com .intellij .psi .util .*;
8
9
import com .jetbrains .php .PhpIcons ;
9
10
import com .jetbrains .php .PhpIndex ;
11
+ import com .jetbrains .php .lang .PhpFileType ;
10
12
import com .jetbrains .php .lang .parser .PhpElementTypes ;
11
13
import com .jetbrains .php .lang .psi .PhpPsiUtil ;
12
14
import com .jetbrains .php .lang .psi .elements .*;
15
+ import fr .adrienbrault .idea .symfony2plugin .stubs .cache .FileIndexCaches ;
16
+ import fr .adrienbrault .idea .symfony2plugin .stubs .indexes .TwigAttributeIndex ;
13
17
import fr .adrienbrault .idea .symfony2plugin .templating .dict .TwigExtension ;
14
18
import fr .adrienbrault .idea .symfony2plugin .util .PhpElementsUtil ;
15
19
import fr .adrienbrault .idea .symfony2plugin .util .PsiElementUtils ;
@@ -30,6 +34,15 @@ public class TwigExtensionParser {
30
34
private static final Key <CachedValue <Map <String , TwigExtension >>> FILTERS_CACHE = new Key <>("TWIG_EXTENSIONS_FILTERS" );
31
35
private static final Key <CachedValue <Map <String , TwigExtension >>> OPERATORS_CACHE = new Key <>("TWIG_EXTENSIONS_OPERATORS" );
32
36
37
+ private static final Key <CachedValue <Map <String , List <String >>>> TWIG_ATTRIBUTE_FUNCTION_INDEX = new Key <>("TWIG_ATTRIBUTE_FUNCTION_INDEX" );
38
+ private static final Key <CachedValue <Set <String >>> TWIG_ATTRIBUTE_FUNCTION_INDEX_NAMES = new Key <>("TWIG_ATTRIBUTE_FUNCTION_INDEX_NAMES" );
39
+
40
+ private static final Key <CachedValue <Map <String , List <String >>>> TWIG_ATTRIBUTE_FILTER_INDEX = new Key <>("TWIG_ATTRIBUTE_FILTER_INDEX" );
41
+ private static final Key <CachedValue <Set <String >>> TWIG_ATTRIBUTE_FILTER_NAMES = new Key <>("TWIG_ATTRIBUTE_FILTER_NAMES" );
42
+
43
+ private static final Key <CachedValue <Map <String , List <String >>>> TWIG_ATTRIBUTE_TEST_INDEX = new Key <>("TWIG_ATTRIBUTE_TEST_INDEX" );
44
+ private static final Key <CachedValue <Set <String >>> TWIG_ATTRIBUTE_TEST_NAMES = new Key <>("TWIG_ATTRIBUTE_FUNCTION_FILTER_NAMES" );
45
+
33
46
public enum TwigExtensionType {
34
47
FUNCTION_METHOD , FUNCTION_NODE , SIMPLE_FUNCTION , FILTER , SIMPLE_TEST , OPERATOR
35
48
}
@@ -39,7 +52,7 @@ public static Map<String, TwigExtension> getFunctions(@NotNull Project project)
39
52
return CachedValuesManager .getManager (project ).getCachedValue (
40
53
project ,
41
54
FUNCTION_CACHE ,
42
- () -> CachedValueProvider .Result .create (parseFunctions (TwigUtil .getTwigExtensionClasses (project )), PsiModificationTracker .MODIFICATION_COUNT ),
55
+ () -> CachedValueProvider .Result .create (parseFunctions (project , TwigUtil .getTwigExtensionClasses (project )), PsiModificationTracker .MODIFICATION_COUNT ),
43
56
false
44
57
);
45
58
}
@@ -49,7 +62,7 @@ public static Map<String, TwigExtension> getFilters(@NotNull Project project) {
49
62
return CachedValuesManager .getManager (project ).getCachedValue (
50
63
project ,
51
64
FILTERS_CACHE ,
52
- () -> CachedValueProvider .Result .create (parseFilters (TwigUtil .getTwigExtensionClasses (project )), PsiModificationTracker .MODIFICATION_COUNT ),
65
+ () -> CachedValueProvider .Result .create (parseFilters (project , TwigUtil .getTwigExtensionClasses (project )), PsiModificationTracker .MODIFICATION_COUNT ),
53
66
false
54
67
);
55
68
}
@@ -59,7 +72,7 @@ public static Map<String, TwigExtension> getSimpleTest(@NotNull Project project)
59
72
return CachedValuesManager .getManager (project ).getCachedValue (
60
73
project ,
61
74
TEST_CACHE ,
62
- () -> CachedValueProvider .Result .create (parseTests (TwigUtil .getTwigExtensionClasses (project )), PsiModificationTracker .MODIFICATION_COUNT ),
75
+ () -> CachedValueProvider .Result .create (parseTests (project , TwigUtil .getTwigExtensionClasses (project )), PsiModificationTracker .MODIFICATION_COUNT ),
63
76
false
64
77
);
65
78
}
@@ -75,7 +88,7 @@ public static Map<String, TwigExtension> getOperators(@NotNull Project project)
75
88
}
76
89
77
90
@ NotNull
78
- private static Map <String , TwigExtension > parseFilters (@ NotNull Collection <PhpClass > phpClasses ) {
91
+ private static Map <String , TwigExtension > parseFilters (@ NotNull Project project , @ NotNull Collection <PhpClass > phpClasses ) {
79
92
Map <String , TwigExtension > extensions = new HashMap <>();
80
93
81
94
for (PhpClass phpClass : phpClasses ) {
@@ -92,11 +105,15 @@ private static Map<String, TwigExtension> parseFilters(@NotNull Collection<PhpCl
92
105
}
93
106
}
94
107
108
+ for (Map .Entry <String , List <String >> entry : FileIndexCaches .getStringDataCache (project , TWIG_ATTRIBUTE_FILTER_INDEX , TWIG_ATTRIBUTE_FILTER_NAMES , TwigAttributeIndex .KEY , GlobalSearchScope .getScopeRestrictedByFileTypes (GlobalSearchScope .allScope (project ), PhpFileType .INSTANCE )).entrySet ()) {
109
+ extensions .put (entry .getKey (), new TwigExtension (TwigExtensionType .FILTER , entry .getValue ().getFirst ()));
110
+ }
111
+
95
112
return Collections .unmodifiableMap (extensions );
96
113
}
97
114
98
115
@ NotNull
99
- private static Map <String , TwigExtension > parseFunctions (@ NotNull Collection <PhpClass > phpClasses ) {
116
+ private static Map <String , TwigExtension > parseFunctions (@ NotNull Project project , @ NotNull Collection <PhpClass > phpClasses ) {
100
117
Map <String , TwigExtension > extensions = new HashMap <>();
101
118
102
119
for (PhpClass phpClass : phpClasses ) {
@@ -113,11 +130,15 @@ private static Map<String, TwigExtension> parseFunctions(@NotNull Collection<Php
113
130
}
114
131
}
115
132
133
+ for (Map .Entry <String , List <String >> entry : FileIndexCaches .getStringDataCache (project , TWIG_ATTRIBUTE_FUNCTION_INDEX , TWIG_ATTRIBUTE_FUNCTION_INDEX_NAMES , TwigAttributeIndex .KEY , GlobalSearchScope .getScopeRestrictedByFileTypes (GlobalSearchScope .allScope (project ), PhpFileType .INSTANCE )).entrySet ()) {
134
+ extensions .put (entry .getKey (), new TwigExtension (TwigExtensionType .FUNCTION_METHOD , entry .getValue ().getFirst ()));
135
+ }
136
+
116
137
return Collections .unmodifiableMap (extensions );
117
138
}
118
139
119
140
@ NotNull
120
- private static Map <String , TwigExtension > parseTests (@ NotNull Collection <PhpClass > phpClasses ) {
141
+ private static Map <String , TwigExtension > parseTests (@ NotNull Project project , @ NotNull Collection <PhpClass > phpClasses ) {
121
142
Map <String , TwigExtension > extensions = new HashMap <>();
122
143
123
144
for (PhpClass phpClass : phpClasses ) {
@@ -129,6 +150,10 @@ private static Map<String, TwigExtension> parseTests(@NotNull Collection<PhpClas
129
150
}
130
151
}
131
152
153
+ for (Map .Entry <String , List <String >> entry : FileIndexCaches .getStringDataCache (project , TWIG_ATTRIBUTE_TEST_INDEX , TWIG_ATTRIBUTE_TEST_NAMES , TwigAttributeIndex .KEY , GlobalSearchScope .getScopeRestrictedByFileTypes (GlobalSearchScope .allScope (project ), PhpFileType .INSTANCE )).entrySet ()) {
154
+ extensions .put (entry .getKey (), new TwigExtension (TwigExtensionType .SIMPLE_TEST , entry .getValue ().getFirst ()));
155
+ }
156
+
132
157
return Collections .unmodifiableMap (extensions );
133
158
}
134
159
0 commit comments