/
GlobalExtensionVariableCollector.java
37 lines (34 loc) · 1.85 KB
/
GlobalExtensionVariableCollector.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
package fr.adrienbrault.idea.symfony2plugin.templating.variable.collector;
import com.intellij.psi.util.PsiTreeUtil;
import com.jetbrains.php.lang.psi.elements.*;
import com.jetbrains.php.phpunit.PhpUnitUtil;
import fr.adrienbrault.idea.symfony2plugin.templating.util.PhpMethodVariableResolveUtil;
import fr.adrienbrault.idea.symfony2plugin.templating.util.TwigUtil;
import fr.adrienbrault.idea.symfony2plugin.templating.variable.TwigFileVariableCollector;
import fr.adrienbrault.idea.symfony2plugin.templating.variable.TwigFileVariableCollectorParameter;
import fr.adrienbrault.idea.symfony2plugin.templating.variable.dict.PsiVariable;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.Map;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*/
public class GlobalExtensionVariableCollector implements TwigFileVariableCollector {
@Override
public void collectPsiVariables(@NotNull TwigFileVariableCollectorParameter parameter, @NotNull Map<String, PsiVariable> variables) {
for(PhpClass phpClass : TwigUtil.getTwigExtensionClasses(parameter.getProject())) {
if(!PhpUnitUtil.isPhpUnitTestFile(phpClass.getContainingFile())) {
Method method = phpClass.findMethodByName("getGlobals");
if(method != null) {
Collection<PhpReturn> phpReturns = PsiTreeUtil.findChildrenOfType(method, PhpReturn.class);
for(PhpReturn phpReturn: phpReturns) {
PhpPsiElement returnPsiElement = phpReturn.getFirstPsiChild();
if(returnPsiElement instanceof ArrayCreationExpression) {
variables.putAll(PhpMethodVariableResolveUtil.getTypesOnArrayHash((ArrayCreationExpression) returnPsiElement));
}
}
}
}
}
}
}