package pro.opcode.bitrix; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public abstract class BxReference implements PsiReference { private PsiElement element; public BxReference(PsiElement element) { this.element = element; } @Override public PsiElement getElement() { return element; } @Override public TextRange getRangeInElement() { return new TextRange(1, getCanonicalText().length() - 1); } @Nullable @Override public abstract PsiElement resolve(); @NotNull @Override public String getCanonicalText() { return element.getText(); } @Override public PsiElement handleElementRename(String newElementName) throws IncorrectOperationException { return null; } @Override public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException { return resolve(); } @Override public boolean isReferenceTo(PsiElement element) { PsiElement resolvedElement = resolve(); return resolvedElement != null && resolvedElement.equals(element); } @NotNull @Override public Object[] getVariants() { return EMPTY_ARRAY; } @Override public boolean isSoft() { return false; } public PsiReference[] getReference() { return resolve() == null ? EMPTY_ARRAY : new PsiReference[]{this}; } }