diff --git a/platform/core-api/src/com/intellij/openapi/components/ServiceManager.java b/platform/core-api/src/com/intellij/openapi/components/ServiceManager.java index a03af87a9683..5f50d7a84f33 100644 --- a/platform/core-api/src/com/intellij/openapi/components/ServiceManager.java +++ b/platform/core-api/src/com/intellij/openapi/components/ServiceManager.java @@ -35,6 +35,11 @@ public class ServiceManager { return doGetService(project, serviceClass, false); } + @Nullable + public static T getServiceIfCreated(@NotNull Class serviceClass) { + return doGetService(ApplicationManager.getApplication(), serviceClass, false); + } + @Nullable private static T doGetService(ComponentManager componentManager, @NotNull Class serviceClass, boolean isCreate) { String componentKey = serviceClass.getName(); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionProgressIndicator.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionProgressIndicator.java index 367c25279caf..e3e1c24fe4f6 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionProgressIndicator.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionProgressIndicator.java @@ -23,6 +23,7 @@ import com.intellij.openapi.actionSystem.IdeActions; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Caret; import com.intellij.openapi.editor.Document; @@ -64,9 +65,9 @@ import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.beans.PropertyChangeListener; -import java.util.*; import java.util.List; import java.util.Queue; +import java.util.*; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; @@ -175,6 +176,7 @@ public class CompletionProgressIndicator extends ProgressIndicatorBase implement myHandler.lookupItemSelected(this, lookupItem, completionChar, myLookup.getItems()); } + @Override @NotNull @SuppressWarnings("WeakerAccess") public OffsetMap getOffsetMap() { @@ -340,6 +342,7 @@ public class CompletionProgressIndicator extends ProgressIndicatorBase implement myParameters = parameters; } + @Override public LookupImpl getLookup() { return myLookup; } @@ -523,7 +526,12 @@ public class CompletionProgressIndicator extends ProgressIndicatorBase implement @TestOnly public static void cleanupForNextTest() { - CompletionProgressIndicator currentCompletion = CompletionServiceImpl.getCompletionService().getCurrentCompletion(); + CompletionService completionService = ServiceManager.getServiceIfCreated(CompletionService.class); + if (!(completionService instanceof CompletionServiceImpl)) { + return; + } + + CompletionProgressIndicator currentCompletion = ((CompletionServiceImpl)completionService).getCurrentCompletion(); if (currentCompletion != null) { currentCompletion.finishCompletionProcess(true); CompletionServiceImpl.assertPhase(CompletionPhase.NoCompletion.getClass()); @@ -635,6 +643,7 @@ public class CompletionProgressIndicator extends ProgressIndicatorBase implement return reused ? Math.max(myInvocationCount + 1, 2) : invocation; } + @Override @NotNull public Editor getEditor() { return myEditor; @@ -663,6 +672,7 @@ public class CompletionProgressIndicator extends ProgressIndicatorBase implement return myInvocationCount == 0; } + @Override @NotNull public Project getProject() { return ObjectUtils.assertNotNull(myEditor.getProject()); diff --git a/platform/platform-tests/testSrc/com/intellij/usages/impl/UsageViewTest.java b/platform/platform-tests/testSrc/com/intellij/usages/impl/UsageViewTest.java index 50a0f8d8d0ca..0cd35a63cd10 100644 --- a/platform/platform-tests/testSrc/com/intellij/usages/impl/UsageViewTest.java +++ b/platform/platform-tests/testSrc/com/intellij/usages/impl/UsageViewTest.java @@ -1,6 +1,4 @@ -/* - * Copyright 2000-2017 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. - */ +// Copyright 2000-2018 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.usages.impl; import com.intellij.find.FindManager; @@ -20,14 +18,13 @@ import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.Task; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.encoding.EncodingManager; -import com.intellij.openapi.vfs.encoding.EncodingManagerImpl; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiNamedElement; import com.intellij.psi.impl.source.PsiFileImpl; import com.intellij.testFramework.LeakHunter; +import com.intellij.testFramework.LightPlatformTestCase; import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase; import com.intellij.usageView.UsageInfo; import com.intellij.usages.*; @@ -62,7 +59,7 @@ public class UsageViewTest extends LightPlatformCodeInsightFixtureTestCase { UsageView usageView = createUsageView(usages); - ((EncodingManagerImpl)EncodingManager.getInstance()).clearDocumentQueue(); + LightPlatformTestCase.clearEncodingManagerDocumentQueue(); FileDocumentManager.getInstance().saveAllDocuments(); UIUtil.dispatchAllInvocationEvents(); diff --git a/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java b/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java index be81ec3ac5be..36c261a9dd4a 100644 --- a/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java @@ -28,6 +28,7 @@ import com.intellij.openapi.command.impl.DocumentReferenceManagerImpl; import com.intellij.openapi.command.impl.UndoManagerImpl; import com.intellij.openapi.command.undo.DocumentReferenceManager; import com.intellij.openapi.command.undo.UndoManager; +import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.EditorFactory; @@ -413,10 +414,7 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da })). append(() -> assertFalse(PsiManager.getInstance(project).isDisposed())). append(() -> { - EncodingManager encodingManager = EncodingManager.getInstance(); - if (encodingManager instanceof EncodingManagerImpl) { - ((EncodingManagerImpl)encodingManager).clearDocumentQueue(); - } + clearEncodingManagerDocumentQueue(); if (!ourAssertionsInTestDetected) { if (IdeaLogger.ourErrorsOccurred != null) { @@ -445,6 +443,13 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da run(); } + public static void clearEncodingManagerDocumentQueue() { + EncodingManager encodingManager = ServiceManager.getServiceIfCreated(EncodingManager.class); + if (encodingManager instanceof EncodingManagerImpl) { + ((EncodingManagerImpl)encodingManager).clearDocumentQueue(); + } + } + private static int ourTestCount; @ReviseWhenPortedToJDK("9")