package fr.adrienbrault.idea.symfony2plugin.util.controller;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.psi.PsiReferenceBase;
import com.jetbrains.php.lang.psi.elements.StringLiteralExpression;
import fr.adrienbrault.idea.symfony2plugin.routing.RouteHelper;
import org.apache.commons.lang.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*/
public class ControllerReference extends PsiReferenceBase<PsiElement> implements PsiReference {
private StringLiteralExpression element;
public ControllerReference(@NotNull StringLiteralExpression element) {
super(element);
this.element = element;
}
@Nullable
@Override
public PsiElement resolve() {
// @TODO: multiresolve
String contents = element.getContents();
if(StringUtils.isBlank(contents)) {
return null;
}
PsiElement[] methods = RouteHelper.getMethodsOnControllerShortcut(this.element.getProject(), contents);
if(methods.length > 0) {
return methods[0];
}
return null;
}
@NotNull
@Override
public Object[] getVariants() {
return ControllerIndex.getControllerLookupElements(this.element.getProject()).toArray();
}
}