package fr.adrienbrault.idea.symfony2plugin.doctrine.metadata;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.patterns.PlatformPatterns;
import com.intellij.psi.PsiElement;
import com.jetbrains.php.lang.psi.elements.PhpClass;
import fr.adrienbrault.idea.symfony2plugin.codeInsight.GotoCompletionProvider;
import fr.adrienbrault.idea.symfony2plugin.codeInsight.GotoCompletionRegistrar;
import fr.adrienbrault.idea.symfony2plugin.codeInsight.GotoCompletionRegistrarParameter;
import fr.adrienbrault.idea.symfony2plugin.config.yaml.YamlElementPatternHelper;
import fr.adrienbrault.idea.symfony2plugin.doctrine.metadata.util.DoctrineMetadataUtil;
import fr.adrienbrault.idea.symfony2plugin.util.PsiElementUtils;
import org.apache.commons.lang.StringUtils;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*/
public class DoctrineYamlGotoCompletionRegistrar implements GotoCompletionRegistrar {
@Override
public void register(GotoCompletionRegistrarParameter registrar) {
registrar.register(PlatformPatterns.or(
YamlElementPatternHelper.getOrmSingleLineScalarKey("repositoryClass")
), ClassGotoCompletionProvider::new);
}
private static class ClassGotoCompletionProvider extends GotoCompletionProvider {
public ClassGotoCompletionProvider(PsiElement element) {
super(element);
}
@NotNull
@Override
public Collection<LookupElement> getLookupElements() {
return DoctrineMetadataUtil.getObjectRepositoryLookupElements(getProject());
}
@NotNull
@Override
public Collection<PsiElement> getPsiTargets(PsiElement element) {
String psiText = PsiElementUtils.getText(element);
if(StringUtils.isBlank(psiText)) {
return Collections.emptyList();
}
Collection<PsiElement> classes = new ArrayList<>();
for (PhpClass phpClass : DoctrineMetadataUtil.getClassInsideScope(element, psiText)) {
classes.add(phpClass);
}
return classes;
}
}
}