package com.jetbrains.lang.dart.psi;
import com.intellij.extapi.psi.PsiFileBase;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.PsiElement;
import com.intellij.psi.ResolveState;
import com.intellij.psi.scope.PsiScopeProcessor;
import com.intellij.psi.search.SearchScope;
import com.intellij.psi.tree.IElementType;
import com.jetbrains.lang.dart.DartFileType;
import com.jetbrains.lang.dart.DartLanguage;
import com.jetbrains.lang.dart.psi.impl.DartPsiCompositeElementImpl;
import com.jetbrains.lang.dart.resolve.DartUseScope;
import com.jetbrains.lang.dart.util.DartResolveUtil;
import org.jetbrains.annotations.NotNull;
public class DartFile extends PsiFileBase implements DartExecutionScope {
public DartFile(@NotNull FileViewProvider viewProvider) {
super(viewProvider, DartLanguage.INSTANCE);
}
@NotNull
@Override
public FileType getFileType() {
return DartFileType.INSTANCE;
}
@Override
public String toString() {
return "Dart File";
}
@NotNull
@Override
public SearchScope getUseScope() {
final VirtualFile file = DartResolveUtil.getRealVirtualFile(getContainingFile());
if (file == null || !ProjectRootManager.getInstance(getProject()).getFileIndex().isInContent(file)) {
return super.getUseScope();
}
return new DartUseScope(getProject(), file);
}
@Override
public boolean processDeclarations(@NotNull PsiScopeProcessor processor,
@NotNull ResolveState state,
PsiElement lastParent,
@NotNull PsiElement place) {
return DartPsiCompositeElementImpl.processDeclarationsImpl(this, processor, state, lastParent)
&& super.processDeclarations(processor, state, lastParent, place);
}
@Override
public IElementType getTokenType() {
return getNode().getElementType();
}
}