package fr.adrienbrault.idea.symfony2plugin.templating.path;
import com.intellij.psi.PsiDirectory;
import com.jetbrains.php.PhpIndex;
import fr.adrienbrault.idea.symfony2plugin.extension.TwigNamespaceExtension;
import fr.adrienbrault.idea.symfony2plugin.extension.TwigNamespaceExtensionParameter;
import fr.adrienbrault.idea.symfony2plugin.util.SymfonyBundleUtil;
import fr.adrienbrault.idea.symfony2plugin.util.dict.SymfonyBundle;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Collection;
/**
* FooBundle/Resources/views/foo.html.twig => FooBundle:foo.html.twig
* FooBundle/Resources/views/foo.html.twig => @Foo/foo.html.twig
*
* @author Daniel Espendiller <daniel@espendiller.net>
*/
public class BundleTwigNamespaceExtension implements TwigNamespaceExtension {
@NotNull
@Override
public Collection<TwigPath> getNamespaces(@NotNull TwigNamespaceExtensionParameter parameter) {
Collection<TwigPath> twigPaths = new ArrayList<>();
Collection<SymfonyBundle> symfonyBundles = new SymfonyBundleUtil(PhpIndex.getInstance(parameter.getProject())).getBundles();
for (SymfonyBundle bundle : symfonyBundles) {
PsiDirectory views = bundle.getSubDirectory("Resources", "views");
if(views == null) {
continue;
}
// @TODO: use relative path and make os independent
String path = views.getVirtualFile().getPath();
String bundleName = bundle.getName();
twigPaths.add(new TwigPath(path, bundleName, TwigPathIndex.NamespaceType.BUNDLE));
if(bundleName.endsWith("Bundle")) {
twigPaths.add(new TwigPath(path, bundleName.substring(0, bundleName.length() - 6), TwigPathIndex.NamespaceType.ADD_PATH));
}
}
return twigPaths;
}
}