下面列出了com.intellij.psi.PsiFile#getContext ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public static String getEnvironment(PsiFile file) {
if (file instanceof JSFile) {
// for JS Files we have to check the kind of environment being used
final Ref<String> envRef = new Ref<>();
file.accept(new PsiRecursiveElementVisitor() {
@Override
public void visitElement(PsiElement element) {
if (!isJSGraphQLLanguageInjectionTarget(element, envRef)) {
// no match yet, so keep visiting
super.visitElement(element);
}
}
});
final String environment = envRef.get();
if (environment != null) {
return environment;
}
} else if (file instanceof GraphQLFile) {
final Ref<String> tag = new Ref<>();
if (file.getContext() != null && isJSGraphQLLanguageInjectionTarget(file.getContext(), tag)) {
return tag.get();
}
}
// fallback is traditional GraphQL
return GRAPHQL_ENVIRONMENT;
}
@Nullable
private static ExternalLintAnnotationInput collectInformation(@NotNull PsiFile psiFile, @Nullable Editor editor) {
if (psiFile.getContext() != null || !SassLintConfigFileUtil.isSassFile(psiFile)) {
return null;
}
VirtualFile virtualFile = psiFile.getVirtualFile();
if (virtualFile == null || !virtualFile.isInLocalFileSystem()) {
return null;
}
if (psiFile.getViewProvider() instanceof MultiplePsiFilesPerDocumentFileViewProvider) {
return null;
}
Project project = psiFile.getProject();
SassLintProjectComponent component = project.getComponent(SassLintProjectComponent.class);
if (!component.isSettingsValid() || !component.isEnabled()) {
return null;
}
Document document = PsiDocumentManager.getInstance(project).getDocument(psiFile);
if (document == null) {
return null;
}
String fileContent = document.getText();
if (StringUtil.isEmptyOrSpaces(fileContent)) {
return null;
}
EditorColorsScheme colorsScheme = editor != null ? editor.getColorsScheme() : null;
// tabSize = getTabSize(editor);
// tabSize = 4;
return new ExternalLintAnnotationInput(project, psiFile, fileContent, colorsScheme);
}
@Nullable
private static ExternalLintAnnotationInput collectInformation(@NotNull PsiFile psiFile, @Nullable Editor editor) {
if (psiFile.getContext() != null || !RTFileUtil.isRTFile(psiFile)) {
return null;
}
VirtualFile virtualFile = psiFile.getVirtualFile();
if (virtualFile == null || !virtualFile.isInLocalFileSystem()) {
return null;
}
if (psiFile.getViewProvider() instanceof MultiplePsiFilesPerDocumentFileViewProvider) {
return null;
}
Project project = psiFile.getProject();
RTProjectComponent component = project.getComponent(RTProjectComponent.class);
if (component == null || !component.isValidAndEnabled()) {
return null;
}
Document document = PsiDocumentManager.getInstance(project).getDocument(psiFile);
if (document == null) {
return null;
}
String fileContent = document.getText();
if (StringUtil.isEmptyOrSpaces(fileContent)) {
return null;
}
EditorColorsScheme colorsScheme = editor == null ? null : editor.getColorsScheme();
// tabSize = getTabSize(editor);
// tabSize = 4;
return new ExternalLintAnnotationInput(project, psiFile, fileContent, colorsScheme);
}
@NotNull
@Override
public SearchScope getUseScope() {
SearchScope useScope = super.getUseScope();
final PsiFile psiFile = getContainingFile();
if(psiFile != null) {
PsiElement context = psiFile.getContext();
if(context != null && context.getLanguage() != this.getLanguage()) {
// this PSI element is part of injected GraphQL, so we have to expand the use scope which defaults to the current file only
useScope = useScope.union(GraphQLPsiSearchHelper.getService(getProject()).getUseScope(this));
}
}
return useScope;
}
@Nullable
private static ExternalLintAnnotationInput collectInformation(@NotNull PsiFile psiFile, @Nullable Editor editor) {
if (psiFile.getContext() != null || !RTFileUtil.isRTFile(psiFile)) {
return null;
}
VirtualFile virtualFile = psiFile.getVirtualFile();
if (virtualFile == null || !virtualFile.isInLocalFileSystem()) {
return null;
}
if (psiFile.getViewProvider() instanceof MultiplePsiFilesPerDocumentFileViewProvider) {
return null;
}
Project project = psiFile.getProject();
RTProjectComponent component = project.getComponent(RTProjectComponent.class);
if (component == null || !component.isValidAndEnabled()) {
return null;
}
Document document = PsiDocumentManager.getInstance(project).getDocument(psiFile);
if (document == null) {
return null;
}
String fileContent = document.getText();
if (StringUtil.isEmptyOrSpaces(fileContent)) {
return null;
}
EditorColorsScheme colorsScheme = editor == null ? null : editor.getColorsScheme();
// tabSize = getTabSize(editor);
// tabSize = 4;
return new ExternalLintAnnotationInput(project, psiFile, fileContent, colorsScheme);
}
@Nullable
private static ExternalLintAnnotationInput collectInformation(@NotNull PsiFile psiFile, @Nullable Editor editor) {
if (psiFile.getContext() != null) {
return null;
}
VirtualFile virtualFile = psiFile.getVirtualFile();
if (virtualFile == null || !virtualFile.isInLocalFileSystem()) {
return null;
}
if (psiFile.getViewProvider() instanceof MultiplePsiFilesPerDocumentFileViewProvider) {
return null;
}
Project project = psiFile.getProject();
ESLintProjectComponent component = project.getComponent(ESLintProjectComponent.class);
if (!component.isSettingsValid() || !component.isEnabled() || !isJavaScriptFile(psiFile, component.ext)) {
return null;
}
Document document = PsiDocumentManager.getInstance(project).getDocument(psiFile);
if (document == null) {
return null;
}
String fileContent = document.getText();
if (StringUtil.isEmptyOrSpaces(fileContent)) {
return null;
}
EditorColorsScheme colorsScheme = editor == null ? null : editor.getColorsScheme();
// tabSize = getTabSize(editor);
// tabSize = 4;
return new ExternalLintAnnotationInput(project, psiFile, fileContent, colorsScheme);
}
public static boolean isInScope(@Nonnull GlobalSearchScope globalScope, @Nonnull PsiElement element) {
PsiFile file = element.getContainingFile();
if (file == null) {
return true;
}
final PsiElement context = file.getContext();
if (context != null) file = context.getContainingFile();
if (file == null) return false;
VirtualFile virtualFile = file.getVirtualFile();
return virtualFile == null || globalScope.contains(file.getVirtualFile());
}
@Nullable
public static PsiFile getContextFile(@Nonnull PsiElement element) {
if (!element.isValid()) return null;
PsiFile file = element.getContainingFile();
if (file == null) return null;
PsiElement context = file.getContext();
if (context == null) {
return file;
}
else {
return getContextFile(context);
}
}