1
1
package fr .adrienbrault .idea .symfony2plugin .stubs .indexes ;
2
2
3
+ import com .intellij .openapi .vfs .VfsUtil ;
3
4
import com .intellij .psi .PsiElement ;
4
5
import com .intellij .psi .PsiFile ;
5
6
import com .intellij .psi .PsiRecursiveElementVisitor ;
14
15
import com .jetbrains .php .lang .psi .PhpFile ;
15
16
import com .jetbrains .php .lang .psi .elements .*;
16
17
import fr .adrienbrault .idea .symfony2plugin .Symfony2InterfacesUtil ;
18
+ import fr .adrienbrault .idea .symfony2plugin .Symfony2ProjectComponent ;
17
19
import fr .adrienbrault .idea .symfony2plugin .dic .container .dict .ContainerBuilderCall ;
18
20
import fr .adrienbrault .idea .symfony2plugin .stubs .indexes .externalizer .ObjectStreamDataExternalizer ;
19
21
import gnu .trove .THashMap ;
24
26
import java .util .Set ;
25
27
26
28
29
+ /**
30
+ * @author Daniel Espendiller <daniel@espendiller.net>
31
+ *
32
+ * @see fr.adrienbrault.idea.symfony2plugin.stubs.indexes.ContainerBuilderStubIndex
33
+ */
27
34
public class ContainerBuilderStubIndex extends FileBasedIndexExtension <String , ContainerBuilderCall > {
28
35
29
36
public static final ID <String , ContainerBuilderCall > KEY = ID .create ("fr.adrienbrault.idea.symfony2plugin.container_builder" );
30
37
private final KeyDescriptor <String > myKeyDescriptor = new EnumeratorStringDescriptor ();
31
38
private final static ObjectStreamDataExternalizer <ContainerBuilderCall > EXTERNALIZER = new ObjectStreamDataExternalizer <>();
32
39
40
+ private static int MAX_FILE_BYTE_SIZE = 2621440 ;
41
+
33
42
private static final Set <String > SET = new HashSet <String >() {{
34
43
add ("Symfony\\ Component\\ DependencyInjection\\ Container" );
35
44
add ("Symfony\\ Component\\ DependencyInjection\\ ContainerBuilder" );
@@ -53,7 +62,11 @@ public DataIndexer<String, ContainerBuilderCall, FileContent> getIndexer() {
53
62
Map <String , ContainerBuilderCall > map = new THashMap <>();
54
63
55
64
PsiFile psiFile = inputData .getPsiFile ();
56
- if (!(psiFile instanceof PhpFile )) {
65
+ if (!(psiFile instanceof PhpFile ) ||
66
+ !Symfony2ProjectComponent .isEnabledForIndex (psiFile .getProject ()) ||
67
+ !isValidForIndex (inputData , psiFile )
68
+ ){
69
+
57
70
return map ;
58
71
}
59
72
@@ -97,6 +110,27 @@ public int getVersion() {
97
110
return 1 ;
98
111
}
99
112
113
+ private static boolean isValidForIndex (FileContent inputData , PsiFile psiFile ) {
114
+
115
+ String fileName = psiFile .getName ();
116
+ if (fileName .startsWith ("." ) || fileName .contains ("Test" )) {
117
+ return false ;
118
+ }
119
+
120
+ // is Test file in path name
121
+ String relativePath = VfsUtil .getRelativePath (inputData .getFile (), psiFile .getProject ().getBaseDir (), '/' );
122
+ if (relativePath != null && (relativePath .contains ("/Test/" ) || relativePath .contains ("/Tests/" ) || relativePath .contains ("/Fixture/" ) || relativePath .contains ("/Fixtures/" ))) {
123
+ return false ;
124
+ }
125
+
126
+ // dont index files larger then files; use 5 MB here
127
+ if (inputData .getFile ().getLength () > MAX_FILE_BYTE_SIZE ) {
128
+ return false ;
129
+ }
130
+
131
+ return true ;
132
+ }
133
+
100
134
private class MyPsiRecursiveElementWalkingVisitor extends PsiRecursiveElementVisitor {
101
135
102
136
private final Map <String , ContainerBuilderCall > map ;
0 commit comments