EA-210457 - IAE: PsiDocumentManager.$$$reportNull$$$: project is missed while indexing unsaved scratch file

GitOrigin-RevId: a97b8d2a370d5975dbcc029471c09f180eda7793
This commit is contained in:
Dmitry Avdeev
2019-08-16 16:06:48 +03:00
committed by intellij-monorepo-bot
parent c2b58ffbbf
commit 48fb1aef4a
3 changed files with 37 additions and 3 deletions
@@ -152,7 +152,7 @@ public class ScratchFileActions {
return context;
}
static void doCreateNewScratch(@NotNull Project project, @NotNull ScratchFileCreationHelper.Context context) {
static PsiFile doCreateNewScratch(@NotNull Project project, @NotNull ScratchFileCreationHelper.Context context) {
FeatureUsageTracker.getInstance().triggerFeatureUsed("scratch");
Language language = ObjectUtils.notNull(context.language);
if (context.fileExtension == null) {
@@ -172,13 +172,14 @@ public class ScratchFileActions {
context.fileExtension);
VirtualFile file = ScratchRootType.getInstance().createScratchFile(
project, fileName, language, context.text, context.createOption);
if (file == null) return;
if (file == null) return null;
PsiNavigationSupport.getInstance().createNavigatable(project, file, context.caretOffset).navigate(true);
PsiFile psiFile = PsiManager.getInstance(project).findFile(file);
if (context.ideView != null && psiFile != null) {
context.ideView.selectElement(psiFile);
}
return psiFile;
}
private static void checkLanguageAndTryToFixText(@NotNull Project project,
@@ -0,0 +1,33 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.ide.scratch;
import com.intellij.codeInsight.completion.CodeCompletionHandlerBase;
import com.intellij.codeInsight.completion.CompletionType;
import com.intellij.lang.xml.XMLLanguage;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.TextEditor;
import com.intellij.psi.PsiFile;
import com.intellij.testFramework.LightPlatformCodeInsightTestCase;
public class ScratchFileTest extends LightPlatformCodeInsightTestCase {
public void testXmlCompletion() {
ScratchFileCreationHelper.Context context = new ScratchFileCreationHelper.Context();
context.language = XMLLanguage.INSTANCE;
PsiFile file = ScratchFileActions.doCreateNewScratch(getProject(), context);
assertNotNull(file);
Document document = FileDocumentManager.getInstance().getDocument(file.getVirtualFile());
document.setText("<");
Editor editor = ((TextEditor)FileEditorManager.getInstance(getProject()).openFile(file.getVirtualFile(), true)[0]).getEditor();
editor.getCaretModel().moveToOffset(1);
new CodeCompletionHandlerBase(CompletionType.BASIC).invokeCompletion(getProject(), editor);
}
@Override
protected boolean isRunInWriteAction() {
return true;
}
}
@@ -111,7 +111,7 @@ public class DefaultXmlTagNameProvider implements XmlTagNameProvider {
Processor<String> processor = Processors.cancelableCollectProcessor(result);
fbi.processAllKeys(XmlNamespaceIndex.NAME, processor, tag.getProject());
final GlobalSearchScope scope = new EverythingGlobalScope();
final GlobalSearchScope scope = new EverythingGlobalScope(tag.getProject());
for (final String ns : result) {
if (ns.isEmpty()) continue;
fbi.processValues(XmlNamespaceIndex.NAME, ns, null, new FileBasedIndex.ValueProcessor<XsdNamespaceBuilder>() {