package com.siberika.idea.pascal.lang.compiled;
import com.intellij.ide.highlighter.JavaClassFileType;
import com.intellij.lang.Language;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.FileIndexFacade;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.ClassFileViewProvider;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiReference;
import com.siberika.idea.pascal.DCUFileType;
import com.siberika.idea.pascal.PascalLanguage;
import org.jetbrains.annotations.NotNull;
/**
* Author: George Bakhtadze
* Date: 14/11/2013
*/
public class PPUViewProvider extends ClassFileViewProvider implements FileViewProvider {
public PPUViewProvider(@NotNull PsiManager manager, @NotNull VirtualFile virtualFile, boolean physical) {
super(manager, virtualFile, physical);
}
// WTF in ascending method?
@Override
public PsiReference findReferenceAt(final int offset) {
return findReferenceAt(offset, PascalLanguage.INSTANCE);
}
@Override
protected PsiFile createFile(@NotNull final Project project, @NotNull final VirtualFile vFile, @NotNull final FileType fileType) {
final FileIndexFacade fileIndex = ServiceManager.getService(project, FileIndexFacade.class);
FileType fType = fileType instanceof JavaClassFileType ? vFile.getFileType() : fileType;
if (fileIndex.isInLibraryClasses(vFile) || !fileIndex.isInSource(vFile)) {
if (fType instanceof DCUFileType) {
return new DCUFileImpl(getManager(), this);
} else {
return new PPUFileImpl(getManager(), this);
}
}
return null;
}
@NotNull
@Override
public Language getBaseLanguage() {
return PascalLanguage.INSTANCE;
}
}