package com.siberika.idea.pascal.lang.psi.impl; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; import com.intellij.psi.PsiReferenceBase; import com.intellij.psi.util.PsiTreeUtil; import com.siberika.idea.pascal.lang.parser.PascalFile; import com.siberika.idea.pascal.lang.psi.PasModule; import com.siberika.idea.pascal.lang.psi.PascalNamedElement; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; /** * Author: George Bakhtadze * Date: 12/25/12 */ public class PascalPsiImplUtil { public static final Logger LOG = Logger.getInstance(PascalPsiImplUtil.class.getName()); @NotNull public static PsiReference[] getReferences(PasModule o) { final PascalFile file = PsiTreeUtil.getParentOfType(o, PascalFile.class); if (file == null) return PsiReference.EMPTY_ARRAY; return new PsiReference[] { new PsiReferenceBase<PascalFile>(file, TextRange.from(o.getStartOffsetInParent(), o.getTextLength())) { @Override public PsiElement resolve() { return file.getContainingFile(); } @NotNull @Override public Object[] getVariants() { final ArrayList<LookupElement> list = new ArrayList<LookupElement>(); return list.toArray(new Object[list.size()]); } } }; } public static void logNullContainingFile(PascalNamedElement element) { LOG.info(String.format("ERROR: Containing file is null for class %s, name %s", element.getClass().getSimpleName(), element.getName())); } }