Skip to content

Commit 8652e79

Browse files
committed
add calls support for service usage indexer #890
1 parent 182b5da commit 8652e79

File tree

3 files changed

+58
-16
lines changed

3 files changed

+58
-16
lines changed

src/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ContainerIdUsagesStubIndex.java

+49-16
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,12 @@
1616
import org.apache.commons.lang.StringUtils;
1717
import org.jetbrains.annotations.NotNull;
1818
import org.jetbrains.yaml.YAMLFileType;
19-
import org.jetbrains.yaml.psi.YAMLFile;
20-
import org.jetbrains.yaml.psi.YAMLKeyValue;
21-
import org.jetbrains.yaml.psi.YAMLSequence;
22-
import org.jetbrains.yaml.psi.YAMLValue;
19+
import org.jetbrains.yaml.psi.*;
20+
import org.jetbrains.yaml.psi.impl.YAMLArrayImpl;
2321

2422
import java.util.Collections;
2523
import java.util.HashMap;
24+
import java.util.List;
2625
import java.util.Map;
2726

2827
/**
@@ -101,20 +100,54 @@ private static Map<String, Integer> getIdUsages(@NotNull YAMLFile yamlFile) {
101100
}
102101

103102
YAMLKeyValue arguments = YamlHelper.getYamlKeyValue(yamlKeyValue, "arguments");
104-
if(arguments == null) {
105-
continue;
106-
}
107-
108-
YAMLValue value = arguments.getValue();
109-
if(!(value instanceof YAMLSequence)) {
110-
continue;
103+
if(arguments != null) {
104+
YAMLValue value = arguments.getValue();
105+
if(value instanceof YAMLSequence) {
106+
for (String id : YamlHelper.getYamlArrayValuesAsList((YAMLSequence) value)) {
107+
String idClean = YamlHelper.trimSpecialSyntaxServiceName(id);
108+
if(StringUtils.isNotBlank(idClean)) {
109+
services.putIfAbsent(idClean, 0);
110+
services.put(idClean, services.get(idClean) + 1);
111+
}
112+
}
113+
}
111114
}
112115

113-
for (String id : YamlHelper.getYamlArrayValuesAsList((YAMLSequence) value)) {
114-
String idClean = YamlHelper.trimSpecialSyntaxServiceName(id);
115-
if(StringUtils.isNotBlank(idClean)) {
116-
services.putIfAbsent(idClean, 0);
117-
services.put(idClean, services.get(idClean) + 1);
116+
// calls:
117+
// - [foo, [@bar, @bar]]
118+
YAMLKeyValue calls = YamlHelper.getYamlKeyValue(yamlKeyValue, "calls");
119+
if(calls != null) {
120+
121+
for (YAMLPsiElement yamlPsiElement : calls.getYAMLElements()) {
122+
if(yamlPsiElement instanceof YAMLSequence) {
123+
for (YAMLSequenceItem yamlSequenceItem : ((YAMLSequence) yamlPsiElement).getItems()) {
124+
YAMLValue value = yamlSequenceItem.getValue();
125+
if(value instanceof YAMLSequence) {
126+
List<YAMLSequenceItem> items = ((YAMLSequence) value).getItems();
127+
if(items.size() > 1) {
128+
// [foo, [@bar, @bar2]]
129+
130+
YAMLValue value1 = items.get(1).getValue();
131+
if(value1 instanceof YAMLSequence) {
132+
// [@bar, @bar2]
133+
134+
for (YAMLSequenceItem sequenceItem : ((YAMLArrayImpl) value1).getItems()) {
135+
YAMLValue value2 = sequenceItem.getValue();
136+
if(value2 instanceof YAMLScalar) {
137+
String textValue = ((YAMLScalar) value2).getTextValue();
138+
139+
String idClean = YamlHelper.trimSpecialSyntaxServiceName(textValue);
140+
if(StringUtils.isNotBlank(idClean)) {
141+
services.putIfAbsent(idClean, 0);
142+
services.put(idClean, services.get(idClean) + 1);
143+
}
144+
}
145+
}
146+
}
147+
}
148+
}
149+
}
150+
}
118151
}
119152
}
120153
}

tests/fr/adrienbrault/idea/symfony2plugin/tests/stubs/indexes/ContainerIdUsagesStubIndexTest.java

+6
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,10 @@ public void testThatYamlArgumentUsageExtracted() {
3636
assertIndexContainsKeyWithValue(ContainerIdUsagesStubIndex.KEY, "usage_yml_foobar2", value -> value == 2);
3737
assertIndexContainsKeyWithValue(ContainerIdUsagesStubIndex.KEY, "usage_yml_foobar3", value -> value == 1);
3838
}
39+
40+
public void testThatYamlArgumentUsageOnSetterArgumentsAreExtracted() {
41+
assertIndexContains(ContainerIdUsagesStubIndex.KEY, "yaml_setter_foobar_1", "yaml_setter_foobar_2", "yaml_setter_foobar_3");
42+
43+
assertIndexContainsKeyWithValue(ContainerIdUsagesStubIndex.KEY, "yaml_setter_foobar_1", value -> value == 2);
44+
}
3945
}

tests/fr/adrienbrault/idea/symfony2plugin/tests/stubs/indexes/fixtures/usage.services.yml

+3
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,6 @@ services:
1010
foo3:
1111
arguments:
1212
- @usage_yml_foobar
13+
calls:
14+
- [ setFoo1, [@yaml_setter_foobar_1, @yaml_setter_foobar_2] ]
15+
- [ setFoo2, [@yaml_setter_foobar_3, @yaml_setter_foobar_1] ]

0 commit comments

Comments
 (0)