Skip to content

Commit cd5cfef

Browse files
authored
Merge pull request #2359 from Haehnchen/feature/recursive-visit-variable-collect
use controlflow to collect variables
2 parents f441115 + 6fbe368 commit cd5cfef

File tree

3 files changed

+24
-8
lines changed

3 files changed

+24
-8
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/security/utils/VoterUtil.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ private static void visitAttributeForeach(@NotNull Method method, @NotNull Consu
173173
return;
174174
}
175175

176-
for (Variable variable : PhpElementsUtil.getVariablesInScope(method, parameters[2])) {
176+
for (Variable variable : PhpElementsUtil.getVariablesInScopeByName(method, parameters[2].getName())) {
177177
// foreach ($attributes as $attribute)
178178
PsiElement psiElement = PsiTreeUtil.nextVisibleLeaf(variable);
179179
if (psiElement != null && psiElement.getNode().getElementType() == PhpTokenTypes.kwAS) {
@@ -182,9 +182,8 @@ private static void visitAttributeForeach(@NotNull Method method, @NotNull Consu
182182
continue;
183183
}
184184

185-
PhpPsiElement variableDecl = variable.getNextPsiSibling();
186-
if (variableDecl instanceof Variable) {
187-
for (Variable variable1 : PhpElementsUtil.getVariablesInScope(parent, (Variable) variableDecl)) {
185+
if (variable.getNextPsiSibling() instanceof Variable variableDecl) {
186+
for (Variable variable1 : PhpElementsUtil.getVariablesInScope(parent, variableDecl)) {
188187
visitVariable(variable1, consumer);
189188
}
190189
}
@@ -213,7 +212,7 @@ private static void visitAttribute(@NotNull Method method, @NotNull Consumer<Pai
213212
return;
214213
}
215214

216-
for (Variable variable : PhpElementsUtil.getVariablesInScope(method, parameters[0])) {
215+
for (Variable variable : PhpElementsUtil.getVariablesInScopeByName(method, parameters[0].getName())) {
217216
visitVariable(variable, consumer);
218217
}
219218
}

src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/util/PhpMethodVariableResolveUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ private static List<PsiElement> collectPossibleTemplateArrays(@NotNull Function
168168
private static Map<String, PsiVariable> collectOnVariableReferences(@NotNull Function function, @NotNull Variable variable) {
169169
Map<String, PsiVariable> collectedTypes = new HashMap<>();
170170

171-
for (Variable scopeVar : PhpElementsUtil.getVariablesInScope(function, variable)) {
171+
for (Variable scopeVar : PhpElementsUtil.getVariablesInScopeByName(function, variable.getName())) {
172172
PsiElement parent = scopeVar.getParent();
173173
if (parent instanceof ArrayAccessExpression) {
174174
// $template['variable'] = $foo

src/main/java/fr/adrienbrault/idea/symfony2plugin/util/PhpElementsUtil.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1261,7 +1261,7 @@ public static Collection<Variable> getVariableReferencesInScope(@NotNull Variabl
12611261

12621262
final List<Variable> variables = new ArrayList<>();
12631263

1264-
for (Variable variableRef : PhpElementsUtil.getVariablesInScope(function, variableDecl)) {
1264+
for (Variable variableRef : PhpElementsUtil.getVariablesInScopeByName(function, variableDecl.getName())) {
12651265
if (!variableRef.equals(variable)) {
12661266
variables.add(variableRef);
12671267
}
@@ -1506,7 +1506,7 @@ public static String getFirstVariableTypeInScope(@NotNull Variable variable) {
15061506
@Override
15071507
public boolean processAccessVariableInstruction(PhpAccessVariableInstruction instruction) {
15081508
PhpPsiElement element = instruction.getAnchor();
1509-
if(element instanceof Variable variableVisit && name.equals(variableVisit.getName())) {
1509+
if (name.contentEquals(instruction.getVariableName()) && element instanceof Variable) {
15101510
PsiElement assignmentExpression = element.getParent();
15111511
if(assignmentExpression instanceof AssignmentExpression) {
15121512
PhpPsiElement value = ((AssignmentExpression) assignmentExpression).getValue();
@@ -1786,6 +1786,23 @@ public static Set<Variable> getVariablesInScope(@NotNull PsiElement psiElement,
17861786
return MyVariableRecursiveElementVisitor.visit(psiElement, variable.getName());
17871787
}
17881788

1789+
public static Set<Variable> getVariablesInScopeByName(@NotNull PhpScopeHolder phpScopeHolder, @NotNull String name) {
1790+
Set<Variable> variables = new HashSet<>();
1791+
1792+
PhpControlFlowUtil.processFlow(phpScopeHolder.getControlFlow(), new PhpInstructionProcessor() {
1793+
@Override
1794+
public boolean processAccessVariableInstruction(PhpAccessVariableInstruction instruction) {
1795+
if (name.contentEquals(instruction.getVariableName()) && instruction.getAnchor() instanceof Variable variable) {
1796+
variables.add(variable);
1797+
}
1798+
1799+
return super.processAccessVariableInstruction(instruction);
1800+
}
1801+
});
1802+
1803+
return variables;
1804+
}
1805+
17891806
/**
17901807
* Provide array key pattern. we need incomplete array key support, too.
17911808
*

0 commit comments

Comments
 (0)