package fr.adrienbrault.idea.symfony2plugin.doctrine.metadata; import com.intellij.codeInsight.completion.*; import com.intellij.patterns.PlatformPatterns; import com.intellij.patterns.XmlPatterns; import com.intellij.psi.PsiElement; import com.intellij.util.ProcessingContext; import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent; import fr.adrienbrault.idea.symfony2plugin.doctrine.metadata.util.DoctrineMetadataUtil; import fr.adrienbrault.idea.symfony2plugin.util.completion.PhpClassCompletionProvider; import org.jetbrains.annotations.NotNull; /** * @author Daniel Espendiller <daniel@espendiller.net> */ public class DoctrineXmlCompletionContributor extends CompletionContributor { public DoctrineXmlCompletionContributor() { // <entity name="Class\Name"/> // <document name="Class\Name"/> // <embeddable name="Class\Name"/> extend(CompletionType.BASIC, XmlPatterns.psiElement().withParent(PlatformPatterns.or( DoctrineMetadataPattern.getXmlModelClass(), DoctrineMetadataPattern.getXmlTargetEntityClass(), DoctrineMetadataPattern.getXmlTargetDocumentClass(), DoctrineMetadataPattern.getEmbeddableNameClassPattern() )), new CompletionProvider<CompletionParameters>() { @Override protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext processingContext, @NotNull CompletionResultSet resultSet) { PsiElement psiElement = parameters.getOriginalPosition(); if(psiElement == null || !Symfony2ProjectComponent.isEnabled(psiElement)) { return; } PhpClassCompletionProvider.addClassCompletion(parameters, resultSet, psiElement, false); } }); // <entity repository-class="Class\Name"/> // <document repository-class="Class\Name"/> extend(CompletionType.BASIC, XmlPatterns.psiElement().withParent(PlatformPatterns.or(DoctrineMetadataPattern.getXmlRepositoryClass())), new CompletionProvider<CompletionParameters>() { @Override protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext processingContext, @NotNull CompletionResultSet resultSet) { PsiElement psiElement = parameters.getOriginalPosition(); if(psiElement == null || !Symfony2ProjectComponent.isEnabled(psiElement)) { return; } // @TODO: filter on doctrine manager resultSet.addAllElements( DoctrineMetadataUtil.getObjectRepositoryLookupElements(psiElement.getProject()) ); } }); } }