package fr.adrienbrault.idea.symfony2plugin.templating;
import com.intellij.codeInsight.navigation.actions.GotoDeclarationHandler;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.editor.Editor;
import com.intellij.patterns.PlatformPatterns;
import com.intellij.psi.PsiElement;
import com.jetbrains.php.lang.PhpLanguage;
import com.jetbrains.php.lang.psi.PhpFile;
import com.jetbrains.php.lang.psi.elements.StringLiteralExpression;
import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent;
import fr.adrienbrault.idea.symfony2plugin.TwigHelper;
import fr.adrienbrault.idea.symfony2plugin.util.PsiElementUtils;
import org.apache.commons.lang.StringUtils;
import org.jetbrains.annotations.Nullable;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*/
public class PhpTemplateGlobalStringGoToDeclarationHandler implements GotoDeclarationHandler {
@Nullable
@Override
public PsiElement[] getGotoDeclarationTargets(PsiElement psiElement, int i, Editor editor) {
if(!Symfony2ProjectComponent.isEnabled(psiElement)) {
return null;
}
if(!(psiElement.getContainingFile() instanceof PhpFile) || !(psiElement.getContext() instanceof StringLiteralExpression)) {
return new PsiElement[0];
}
if(!Symfony2ProjectComponent.isEnabled(psiElement) || !PlatformPatterns.or(
PlatformPatterns
.psiElement(StringLiteralExpression.class)
.withText(PlatformPatterns.or(
PlatformPatterns.string().endsWith("twig'"),
PlatformPatterns.string().endsWith("twig\"")
))
.withLanguage(PhpLanguage.INSTANCE),
PlatformPatterns
.psiElement(StringLiteralExpression.class)
.withText(PlatformPatterns.or(
PlatformPatterns.string().endsWith("twig'"),
PlatformPatterns.string().endsWith("twig\"")
))
.withLanguage(PhpLanguage.INSTANCE)
).accepts(psiElement.getContext())) {
return new PsiElement[0];
}
String templateName = PsiElementUtils.getText(psiElement);
if(StringUtils.isBlank(templateName)) {
return new PsiElement[0];
}
return TwigHelper.getTemplatePsiElements(psiElement.getProject(), templateName);
}
@Nullable
@Override
public String getActionText(DataContext dataContext) {
return null;
}
}