avoid CompletionService/EncodingManager creation if not need

This commit is contained in:
Vladimir Krivosheev
2018-08-09 14:27:22 +02:00
parent 4192c8d88c
commit c5f559d5a4
4 changed files with 29 additions and 12 deletions
@@ -35,6 +35,11 @@ public class ServiceManager {
return doGetService(project, serviceClass, false);
}
@Nullable
public static <T> T getServiceIfCreated(@NotNull Class<T> serviceClass) {
return doGetService(ApplicationManager.getApplication(), serviceClass, false);
}
@Nullable
private static <T> T doGetService(ComponentManager componentManager, @NotNull Class<T> serviceClass, boolean isCreate) {
String componentKey = serviceClass.getName();
@@ -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());
@@ -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();
@@ -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")