From 48fb1aef4aca0816b65154433842f12fdac6dc0f Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Fri, 16 Aug 2019 14:40:27 +0300 Subject: [PATCH] EA-210457 - IAE: PsiDocumentManager.$$$reportNull$$$: project is missed while indexing unsaved scratch file GitOrigin-RevId: a97b8d2a370d5975dbcc029471c09f180eda7793 --- .../ide/scratch/ScratchFileActions.java | 5 +-- .../intellij/ide/scratch/ScratchFileTest.java | 33 +++++++++++++++++++ .../source/xml/DefaultXmlTagNameProvider.java | 2 +- 3 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 platform/platform-tests/testSrc/com/intellij/ide/scratch/ScratchFileTest.java diff --git a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileActions.java b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileActions.java index e0a22b949647..f57026e88cca 100644 --- a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileActions.java +++ b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileActions.java @@ -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, diff --git a/platform/platform-tests/testSrc/com/intellij/ide/scratch/ScratchFileTest.java b/platform/platform-tests/testSrc/com/intellij/ide/scratch/ScratchFileTest.java new file mode 100644 index 000000000000..32fe9ced9dc4 --- /dev/null +++ b/platform/platform-tests/testSrc/com/intellij/ide/scratch/ScratchFileTest.java @@ -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; + } +} diff --git a/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java b/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java index 9863da046061..fd5c4ca56cc8 100644 --- a/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java +++ b/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java @@ -111,7 +111,7 @@ public class DefaultXmlTagNameProvider implements XmlTagNameProvider { Processor 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() {