Skip to content

Commit e58371d

Browse files
committed
support yaml inline alias #628
1 parent 3b0b07c commit e58371d

File tree

9 files changed

+68
-4
lines changed

9 files changed

+68
-4
lines changed

src/fr/adrienbrault/idea/symfony2plugin/dic/attribute/value/AttributeValueAbstract.java

+13
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
11
package fr.adrienbrault.idea.symfony2plugin.dic.attribute.value;
22

3+
import com.intellij.psi.PsiElement;
34
import org.jetbrains.annotations.NotNull;
45

56
/**
67
* @author Daniel Espendiller <daniel@espendiller.net>
78
*/
89
abstract class AttributeValueAbstract implements AttributeValueInterface {
910

11+
@NotNull
12+
private final PsiElement psiElement;
13+
14+
public AttributeValueAbstract(@NotNull PsiElement psiElement) {
15+
this.psiElement = psiElement;
16+
}
17+
1018
@Override
1119
public Boolean getBoolean(@NotNull String key) {
1220
String value = getString(key);
@@ -36,4 +44,9 @@ public String getString(@NotNull String key, @NotNull String defaultValue) {
3644
String string = getString(key);
3745
return string != null ? string : defaultValue;
3846
}
47+
48+
@NotNull
49+
public PsiElement getPsiElement() {
50+
return this.psiElement;
51+
}
3952
}

src/fr/adrienbrault/idea/symfony2plugin/dic/attribute/value/AttributeValueInterface.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fr.adrienbrault.idea.symfony2plugin.dic.attribute.value;
22

3+
import com.intellij.psi.PsiElement;
34
import org.jetbrains.annotations.NotNull;
45
import org.jetbrains.annotations.Nullable;
56

@@ -15,8 +16,11 @@ public interface AttributeValueInterface {
1516
Boolean getBoolean(@NotNull String key);
1617

1718
@NotNull
18-
String getString(@NotNull String key, String defaultValue);
19+
String getString(@NotNull String key, @Nullable String defaultValue);
1920

2021
@NotNull
21-
Boolean getBoolean(@NotNull String key, Boolean defaultValue);
22+
Boolean getBoolean(@NotNull String key, @Nullable Boolean defaultValue);
23+
24+
@NotNull
25+
PsiElement getPsiElement();
2226
}

src/fr/adrienbrault/idea/symfony2plugin/dic/attribute/value/DummyAttributeValue.java

+17
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
11
package fr.adrienbrault.idea.symfony2plugin.dic.attribute.value;
22

3+
import com.intellij.psi.PsiElement;
4+
import com.intellij.psi.PsiElementFactory;
5+
import com.intellij.psi.impl.PsiElementFactoryImpl;
36
import org.jetbrains.annotations.NotNull;
47
import org.jetbrains.annotations.Nullable;
58

69
/**
710
* @author Daniel Espendiller <daniel@espendiller.net>
811
*/
912
public class DummyAttributeValue implements AttributeValueInterface {
13+
14+
@NotNull
15+
private final PsiElement psiElement;
16+
17+
public DummyAttributeValue(@NotNull PsiElement psiElement) {
18+
this.psiElement = psiElement;
19+
}
20+
1021
@Nullable
1122
@Override
1223
public String getString(@NotNull String key) {
@@ -30,4 +41,10 @@ public String getString(@NotNull String key, String defaultValue) {
3041
public Boolean getBoolean(@NotNull String key, Boolean defaultValue) {
3142
return defaultValue;
3243
}
44+
45+
@NotNull
46+
@Override
47+
public PsiElement getPsiElement() {
48+
return this.psiElement;
49+
}
3350
}

src/fr/adrienbrault/idea/symfony2plugin/dic/attribute/value/XmlTagAttributeValue.java

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public class XmlTagAttributeValue extends AttributeValueAbstract {
1414
private final XmlTag xmlTag;
1515

1616
public XmlTagAttributeValue(@NotNull XmlTag xmlTag) {
17+
super(xmlTag);
1718
this.xmlTag = xmlTag;
1819
}
1920

src/fr/adrienbrault/idea/symfony2plugin/dic/attribute/value/YamlKeyValueAttributeValue.java

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class YamlKeyValueAttributeValue extends AttributeValueAbstract {
1515
private final YAMLKeyValue yamlKeyValue;
1616

1717
public YamlKeyValueAttributeValue(@NotNull YAMLKeyValue yamlKeyValue) {
18+
super(yamlKeyValue);
1819
this.yamlKeyValue = yamlKeyValue;
1920
}
2021

src/fr/adrienbrault/idea/symfony2plugin/dic/container/util/ServiceContainerUtil.java

+16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package fr.adrienbrault.idea.symfony2plugin.dic.container.util;
22

3+
import com.intellij.psi.PsiElement;
34
import com.intellij.psi.PsiFile;
5+
import com.intellij.psi.impl.source.tree.LeafPsiElement;
46
import com.intellij.psi.util.PsiTreeUtil;
57
import com.intellij.psi.xml.XmlDocument;
68
import com.intellij.psi.xml.XmlFile;
@@ -47,6 +49,20 @@ public void consume(ServiceConsumer serviceConsumer) {
4749
visitFile((YAMLFile) psiFile, new Consumer<ServiceConsumer>() {
4850
@Override
4951
public void consume(ServiceConsumer serviceConsumer) {
52+
53+
// alias inline "foo: @bar"
54+
PsiElement yamlKeyValue = serviceConsumer.attributes().getPsiElement();
55+
if(yamlKeyValue instanceof YAMLKeyValue) {
56+
PsiElement value = ((YAMLKeyValue) yamlKeyValue).getValue();
57+
if(value instanceof LeafPsiElement) {
58+
String valueText = ((YAMLKeyValue) yamlKeyValue).getValueText();
59+
if(StringUtils.isNotBlank(valueText) && valueText.startsWith("@")) {
60+
services.add(new SerializableService(serviceConsumer.getServiceId()).setAlias(valueText.substring(1)));
61+
return;
62+
}
63+
}
64+
}
65+
5066
SerializableService serializableService = createService(serviceConsumer);
5167
serializableService.setDecorationInnerName(serviceConsumer.attributes().getString("decoration_inner_name"));
5268

src/fr/adrienbrault/idea/symfony2plugin/util/FileResourceVisitorUtil.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ public AttributeValueInterface getAttributeValue() {
114114
return this.attributeValue = new XmlTagAttributeValue((XmlTag) this.scope);
115115
}
116116

117-
return this.attributeValue = new DummyAttributeValue();
117+
return this.attributeValue = new DummyAttributeValue(this.psiElement);
118118
}
119119

120120
@NotNull

tests/fr/adrienbrault/idea/symfony2plugin/tests/dic/container/util/ServiceContainerUtilTest.java

+7
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,13 @@ public void testYmlDeprecatedAsTilde() {
103103
assertEquals(true, bar.isDeprecated());
104104
}
105105

106+
public void testYmlAliasDefinitionAsInline() {
107+
assertEquals("bar", ContainerUtil.find(ServiceContainerUtil.getServicesInFile(ymlFile), MyStringServiceInterfaceCondition.create("alias.inline_1")).getAlias());
108+
assertEquals("bar", ContainerUtil.find(ServiceContainerUtil.getServicesInFile(ymlFile), MyStringServiceInterfaceCondition.create("alias.inline_2")).getAlias());
109+
assertEquals("bar", ContainerUtil.find(ServiceContainerUtil.getServicesInFile(ymlFile), MyStringServiceInterfaceCondition.create("alias.inline_3")).getAlias());
110+
assertNull(ContainerUtil.find(ServiceContainerUtil.getServicesInFile(ymlFile), MyStringServiceInterfaceCondition.create("alias.inline_4")).getAlias());
111+
}
112+
106113
private static class MyStringServiceInterfaceCondition implements Condition<ServiceInterface> {
107114

108115
@NotNull

tests/fr/adrienbrault/idea/symfony2plugin/tests/dic/container/util/fixtures/services.yml

+6-1
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,9 @@ services:
2121
lazy: true
2222
public: false
2323
alias: foo
24-
parent: foo
24+
parent: foo
25+
26+
alias.inline_1: @bar
27+
alias.inline_2: '@bar'
28+
alias.inline_3: "@bar"
29+
alias.inline_4: bar

0 commit comments

Comments
 (0)