8000 add xml completion, navigation and linemarker for Doctrine 2.5 "Embed… · Koc/idea-php-symfony2-plugin@3ef1042 · GitHub
[go: up one dir, main page]

Skip to content

Commit 3ef1042

Browse files
committed
add xml completion, navigation and linemarker for Doctrine 2.5 "Embeddables" Haehnchen#471
1 parent f7522d1 commit 3ef1042

File tree

7 files changed

+48
-4
lines changed

7 files changed

+48
-4
lines changed

src/fr/adrienbrault/idea/symfony2plugin/doctrine/metadata/DoctrineMetadataLineMarkerProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void collectSlowLineMarkers(@NotNull List<PsiElement> psiElements, @NotNu
4545
}
4646

4747
for(PsiElement psiElement: psiElements) {
48-
if(psiElement instanceof XmlAttributeValue && (DoctrineMetadataPattern.getXmlTargetDocumentClass().accepts(psiElement) || DoctrineMetadataPattern.getXmlTargetEntityClass().accepts(psiElement))) {
48+
if(psiElement instanceof XmlAttributeValue && (DoctrineMetadataPattern.getXmlTargetDocumentClass().accepts(psiElement) || DoctrineMetadataPattern.getXmlTargetEntityClass().accepts(psiElement) || DoctrineMetadataPattern.getEmbeddableNameClassPattern().accepts(psiElement))) {
4949
attachXmlRelationMarker((XmlAttributeValue) psiElement, results);
5050
}
5151
}

src/fr/adrienbrault/idea/symfony2plugin/doctrine/metadata/DoctrineMetadataPattern.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,20 @@ public static XmlAttributeValuePattern getXmlModelClass() {
4141
);
4242
}
4343

44+
public static XmlAttributeValuePattern getEmbeddableNameClassPattern() {
45+
return XmlPatterns
46+
.xmlAttributeValue()
47+
.withParent(XmlPatterns
48+
.xmlAttribute("name")
49+
.withParent(XmlPatterns
50+
.xmlTag().withName("embeddable")
51+
.withParent(XmlPatterns
52+
.xmlTag().withName(PlatformPatterns.string().matches(DOCTRINE_MAPPING))
53+
)
54+
)
55+
);
56+
}
57+
4458
/**
4559
* <doctrine-mapping|doctrine-*-mapping>
4660
* <document repository-class="Class\Name"/>

src/fr/adrienbrault/idea/symfony2plugin/doctrine/metadata/DoctrineXmlCompletionContributor.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,14 @@ public class DoctrineXmlCompletionContributor extends CompletionContributor {
1818
public DoctrineXmlCompletionContributor() {
1919

2020
// <entity name="Class\Name"/>
21-
// <document name="Class\Name"/>,
22-
extend(CompletionType.BASIC, XmlPatterns.psiElement().withParent(PlatformPatterns.or(DoctrineMetadataPattern.getXmlModelClass(), DoctrineMetadataPattern.getXmlTargetEntityClass(), DoctrineMetadataPattern.getXmlTargetDocumentClass())), new CompletionProvider<CompletionParameters>() {
21+
// <document name="Class\Name"/>
22+
// <embeddable name="Class\Name"/>
23+
extend(CompletionType.BASIC, XmlPatterns.psiElement().withParent(PlatformPatterns.or(
24+
DoctrineMetadataPattern.getXmlModelClass(),
25+
DoctrineMetadataPattern.getXmlTargetEntityClass(),
26+
DoctrineMetadataPattern.getXmlTargetDocumentClass(),
27+
DoctrineMetadataPattern.getEmbeddableNameClassPattern()
28+
)), new CompletionProvider<CompletionParameters>() {
2329
@Override
2430
protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext processingContext, @NotNull CompletionResultSet resultSet) {
2531

src/fr/adrienbrault/idea/symfony2plugin/doctrine/metadata/DoctrineXmlGotoCompletionRegistrar.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ public void register(GotoCompletionRegistrarParameter registrar) {
2929
DoctrineMetadataPattern.getXmlModelClass(),
3030
DoctrineMetadataPattern.getXmlRepositoryClass(),
3131
DoctrineMetadataPattern.getXmlTargetDocumentClass(),
32-
DoctrineMetadataPattern.getXmlTargetEntityClass()
32+
DoctrineMetadataPattern.getXmlTargetEntityClass(),
33+
DoctrineMetadataPattern.getEmbeddableNameClassPattern()
3334
)), ClassGotoCompletionProvider::new);
3435
}
3536

tests/fr/adrienbrault/idea/symfony2plugin/tests/doctrine/metadata/DoctrineMetadataLineMarkerProviderTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ public void testTargetDocumentLineMarker() {
4747
);
4848
}
4949

50+
public void testEmbeddableClassLineMarker() {
51+
assertLineMarker(
52+
createXmlFile("<doctrine-mapping><embeddable name=\"Datetime\"/></doctrine-mapping>"),
53+
new LineMarker.ToolTipEqualsAssert("Navigate to class")
54+
);
55+
}
56+
5057
public void testTargetDocumentLineMarkerInSameNamespace() {
5158
myFixture.configureByText(PhpFileType.INSTANCE, "<?php\n" +
5259
"namespace Entity{\n" +

tests/fr/adrienbrault/idea/symfony2plugin/tests/doctrine/metadata/DoctrineXmlCompletionContributorTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,4 +121,12 @@ public void testRelationCompletion() {
121121
"DateTime"
122122
);
123123
}
124+
125+
public void testEmbeddableNameShouldCompleteClass() {
126+
assertCompletionContains(
127+
XmlFileType.INSTANCE,
128+
"<doctrine-mapping><embeddable name=\"<caret>\"/></doctrine-mapping>",
129+
"DateTime"
130+
);
131+
}
124132
}

tests/fr/adrienbrault/idea/symfony2plugin/tests/doctrine/metadata/DoctrineXmlGotoCompletionRegistrarTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,4 +116,12 @@ public void testTargetEntityNavigation() {
116116
);
117117
}
118118
}
119+
120+
public void testEmbeddedNameNavigation() {
121+
assertNavigationMatch(
122+
XmlFileType.INSTANCE,
123+
"<doctrine-mapping><embedded name=\"Foo\\Bar\\Ns<caret>\\Bar\"/></doctrine-mapping>",
124+
PlatformPatterns.psiElement(PhpClass.class)
125+
);
126+
}
119127
}

0 commit comments

Comments
 (0)
0