package com.seventh7.mybatis.alias;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReferenceBase;
import com.intellij.psi.xml.XmlAttributeValue;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
/**
* @author yanglin
*/
public class AliasClassReference extends PsiReferenceBase<XmlAttributeValue> {
private Function<AliasDesc, String> function = new Function<AliasDesc, String>() {
@Override
public String apply(AliasDesc input) {
return input.getAlias();
}
};
public AliasClassReference(@NotNull XmlAttributeValue element) {
super(element, true);
}
@Nullable @Override
public PsiElement resolve() {
XmlAttributeValue attributeValue = getElement();
return AliasFacade.getInstance(attributeValue.getProject()).findPsiClass(attributeValue, attributeValue.getValue()).orNull();
}
@NotNull @Override
public Object[] getVariants() {
AliasFacade aliasFacade = AliasFacade.getInstance(getElement().getProject());
Collection<String> result = Collections2.transform(aliasFacade.getAliasDescs(getElement()), function);
return result.toArray(new String[result.size()]);
}
}