diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/ProblemsViewImpl.java b/java/compiler/impl/src/com/intellij/compiler/impl/ProblemsViewImpl.java index 63cf2cabb1c4..2a8086db8e88 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/ProblemsViewImpl.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/ProblemsViewImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,11 +37,11 @@ import com.intellij.util.concurrency.SequentialTaskExecutor; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.ide.PooledThreadExecutor; import javax.swing.*; import java.util.EnumSet; import java.util.UUID; +import java.util.concurrent.ExecutorService; /** * @author Eugene Zhuravlev @@ -52,7 +52,7 @@ public class ProblemsViewImpl extends ProblemsView{ private static final EnumSet ALL_MESSAGE_KINDS = EnumSet.allOf(ErrorTreeElementKind.class); private final ProblemsViewPanel myPanel; - private final SequentialTaskExecutor myViewUpdater = new SequentialTaskExecutor(PooledThreadExecutor.INSTANCE); + private final ExecutorService myViewUpdater = SequentialTaskExecutor.createSequentialApplicationPoolExecutor(); private final Icon myActiveIcon = AllIcons.Toolwindows.Problems; private final Icon myPassiveIcon = IconLoader.getDisabledIcon(myActiveIcon); diff --git a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java index 8889dcd72741..7e9486d771c0 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -92,7 +92,6 @@ import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; import io.netty.util.internal.ThreadLocalRandom; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.ide.PooledThreadExecutor; import org.jetbrains.io.ChannelRegistrar; import org.jetbrains.io.NettyKt; import org.jetbrains.jps.api.*; @@ -160,7 +159,7 @@ public class BuildManager implements Disposable { private final Map, OSProcessHandler>>> myPreloadedBuilds = Collections.synchronizedMap(new HashMap, OSProcessHandler>>>()); private final BuildProcessClasspathManager myClasspathManager = new BuildProcessClasspathManager(); - private final SequentialTaskExecutor myRequestsProcessor = new SequentialTaskExecutor(PooledThreadExecutor.INSTANCE); + private final ExecutorService myRequestsProcessor = SequentialTaskExecutor.createSequentialApplicationPoolExecutor(); private final Map myProjectDataMap = Collections.synchronizedMap(new HashMap()); private final BuildManagerPeriodicTask myAutoMakeTask = new BuildManagerPeriodicTask() { @@ -688,7 +687,7 @@ public class BuildManager implements Disposable { CmdlineRemoteProto.Message.ControllerMessage.GlobalSettings.newBuilder().setGlobalOptionsPath(PathManager.getOptionsPath()) .build(); CmdlineRemoteProto.Message.ControllerMessage.FSEvent currentFSChanges; - final SequentialTaskExecutor projectTaskQueue; + final ExecutorService projectTaskQueue; final boolean needRescan; synchronized (myProjectDataMap) { final ProjectData data = getProjectData(projectPath); @@ -880,7 +879,7 @@ public class BuildManager implements Disposable { synchronized (myProjectDataMap) { ProjectData data = myProjectDataMap.get(projectPath); if (data == null) { - data = new ProjectData(new SequentialTaskExecutor(PooledThreadExecutor.INSTANCE)); + data = new ProjectData(SequentialTaskExecutor.createSequentialApplicationPoolExecutor()); myProjectDataMap.put(projectPath, data); } return data; @@ -953,7 +952,7 @@ public class BuildManager implements Disposable { return Pair.create(projectJdk, sdkVersion); } - private Future, OSProcessHandler>> launchPreloadedBuildProcess(final Project project, SequentialTaskExecutor projectTaskQueue) throws Exception { + private Future, OSProcessHandler>> launchPreloadedBuildProcess(final Project project, ExecutorService projectTaskQueue) throws Exception { ensureListening(); // launching build process from projectTaskQueue ensures that no other build process for this project is currently running @@ -1619,13 +1618,13 @@ public class BuildManager implements Disposable { private static class ProjectData { @NotNull - final SequentialTaskExecutor taskQueue; + final ExecutorService taskQueue; private final Set myChanged = new THashSet(); private final Set myDeleted = new THashSet(); private long myNextEventOrdinal; private boolean myNeedRescan = true; - private ProjectData(@NotNull SequentialTaskExecutor taskQueue) { + private ProjectData(@NotNull ExecutorService taskQueue) { this.taskQueue = taskQueue; } diff --git a/java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java b/java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java index 8b5a791f8784..086c6fbb9fbc 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,12 +36,12 @@ import com.intellij.util.concurrency.SequentialTaskExecutor; import io.netty.channel.Channel; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.ide.PooledThreadExecutor; import org.jetbrains.jps.api.CmdlineProtoUtil; import org.jetbrains.jps.api.CmdlineRemoteProto; import org.jetbrains.org.objectweb.asm.Opcodes; import java.util.*; +import java.util.concurrent.ExecutorService; /** * @author Eugene Zhuravlev @@ -51,7 +51,7 @@ public abstract class DefaultMessageHandler implements BuilderMessageHandler { private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.server.DefaultMessageHandler"); public static final long CONSTANT_SEARCH_TIME_LIMIT = 60 * 1000L; // one minute private final Project myProject; - private final SequentialTaskExecutor myTaskExecutor = new SequentialTaskExecutor(PooledThreadExecutor.INSTANCE); + private final ExecutorService myTaskExecutor = SequentialTaskExecutor.createSequentialApplicationPoolExecutor(); private volatile long myConstantSearchTime = 0L; protected DefaultMessageHandler(Project project) { diff --git a/java/execution/impl/src/com/intellij/execution/junit2/segments/Extractor.java b/java/execution/impl/src/com/intellij/execution/junit2/segments/Extractor.java index c0e57bd0e2e4..4f5f4a96020a 100644 --- a/java/execution/impl/src/com/intellij/execution/junit2/segments/Extractor.java +++ b/java/execution/impl/src/com/intellij/execution/junit2/segments/Extractor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,7 +24,6 @@ import com.intellij.openapi.util.EmptyRunnable; import com.intellij.rt.execution.junit.segments.PacketProcessor; import com.intellij.util.concurrency.SequentialTaskExecutor; import org.jetbrains.annotations.NotNull; -import org.jetbrains.ide.PooledThreadExecutor; import javax.swing.*; import java.io.InputStream; @@ -33,6 +32,7 @@ import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; /** @@ -45,7 +45,7 @@ public class Extractor implements Disposable { private final SegmentedInputStream myStream; private OutputPacketProcessor myEventsDispatcher; private static final Logger LOG = Logger.getInstance("#" + Extractor.class.getName()); - private final SequentialTaskExecutor myExecutor = new SequentialTaskExecutor(PooledThreadExecutor.INSTANCE); + private final ExecutorService myExecutor = SequentialTaskExecutor.createSequentialApplicationPoolExecutor(); private final BlockingQueue myTaskQueue = new LinkedBlockingQueue(); public Extractor(@NotNull InputStream stream, @NotNull Charset charset) { diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/notification/ExternalSystemNotificationManager.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/notification/ExternalSystemNotificationManager.java index 0b21a51b6fef..49aa338ae1a5 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/notification/ExternalSystemNotificationManager.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/notification/ExternalSystemNotificationManager.java @@ -1,3 +1,18 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.intellij.openapi.externalSystem.service.notification; import com.intellij.execution.rmi.RemoteUtil; @@ -41,11 +56,10 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.ide.PooledThreadExecutor; import java.util.Iterator; -import java.util.List; import java.util.Set; +import java.util.concurrent.ExecutorService; /** * This class is responsible for ide user by external system integration-specific events. @@ -61,7 +75,7 @@ import java.util.Set; public class ExternalSystemNotificationManager implements Disposable { @NotNull private static final Key> CONTENT_ID_KEY = Key.create("CONTENT_ID"); - @NotNull private final SequentialTaskExecutor myUpdater = new SequentialTaskExecutor(PooledThreadExecutor.INSTANCE); + @NotNull private final ExecutorService myUpdater = SequentialTaskExecutor.createSequentialApplicationPoolExecutor(); @NotNull private final Project myProject; @NotNull private final Set myNotifications; diff --git a/platform/lang-impl/src/com/intellij/ui/DeferredIconImpl.java b/platform/lang-impl/src/com/intellij/ui/DeferredIconImpl.java index d912a393509d..b3b524ded3e6 100644 --- a/platform/lang-impl/src/com/intellij/ui/DeferredIconImpl.java +++ b/platform/lang-impl/src/com/intellij/ui/DeferredIconImpl.java @@ -30,13 +30,12 @@ import com.intellij.openapi.util.registry.Registry; import com.intellij.ui.tabs.impl.TabLabel; import com.intellij.util.Alarm; import com.intellij.util.Function; -import com.intellij.util.concurrency.BoundedTaskExecutor; +import com.intellij.util.concurrency.AppExecutorUtil; import com.intellij.util.containers.TransferToEDTQueue; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.ide.PooledThreadExecutor; import javax.swing.*; import javax.swing.plaf.TreeUI; @@ -64,7 +63,7 @@ public class DeferredIconImpl implements DeferredIcon, RetrievableIcon, Scala private float myScale = 1f; private Icon myOriginalDeferredIcon = null; - private static final Executor ourIconsCalculatingExecutor = new BoundedTaskExecutor(PooledThreadExecutor.INSTANCE, 1); + private static final Executor ourIconsCalculatingExecutor = AppExecutorUtil.createBoundedApplicationPoolExecutor(1); private final IconListener myEvalListener; private static final TransferToEDTQueue ourLaterInvocator = TransferToEDTQueue.createRunnableMerger("Deferred icon later invocator", 200); diff --git a/platform/lang-impl/src/com/intellij/util/download/impl/FileDownloaderImpl.java b/platform/lang-impl/src/com/intellij/util/download/impl/FileDownloaderImpl.java index 5d4e4d0552c0..eb898731da48 100644 --- a/platform/lang-impl/src/com/intellij/util/download/impl/FileDownloaderImpl.java +++ b/platform/lang-impl/src/com/intellij/util/download/impl/FileDownloaderImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,7 +37,7 @@ import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.*; -import com.intellij.util.concurrency.BoundedTaskExecutor; +import com.intellij.util.concurrency.AppExecutorUtil; import com.intellij.util.containers.hash.LinkedHashMap; import com.intellij.util.download.DownloadableFileDescription; import com.intellij.util.download.FileDownloader; @@ -45,7 +45,6 @@ import com.intellij.util.io.HttpRequests; import com.intellij.util.net.IOExceptionDialog; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.ide.PooledThreadExecutor; import javax.swing.*; import java.io.File; @@ -54,6 +53,7 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicLong; @@ -167,7 +167,7 @@ public class FileDownloaderImpl implements FileDownloader { int maxParallelDownloads = Runtime.getRuntime().availableProcessors(); LOG.debug("Downloading " + myFileDescriptions.size() + " files using " + maxParallelDownloads + " threads"); long start = System.currentTimeMillis(); - BoundedTaskExecutor executor = new BoundedTaskExecutor(PooledThreadExecutor.INSTANCE, maxParallelDownloads); + ExecutorService executor = AppExecutorUtil.createBoundedApplicationPoolExecutor(maxParallelDownloads); List> results = new ArrayList>(); final AtomicLong totalSize = new AtomicLong(); for (final DownloadableFileDescription description : myFileDescriptions) { diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/AsyncUpdateAction.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/AsyncUpdateAction.java index 1349d5a9169a..b948336425cc 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/AsyncUpdateAction.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/AsyncUpdateAction.java @@ -18,7 +18,6 @@ package com.intellij.openapi.actionSystem; import com.intellij.openapi.diagnostic.Logger; import com.intellij.util.concurrency.AppExecutorUtil; -import com.intellij.util.concurrency.BoundedTaskExecutor; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -32,7 +31,7 @@ import java.util.concurrent.ExecutorService; public abstract class AsyncUpdateAction extends AnAction { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.actionSystem.AsyncUpdateAction"); - private static final ExecutorService ourUpdaterService = new BoundedTaskExecutor(AppExecutorUtil.getAppExecutorService(), 1); + private static final ExecutorService ourUpdaterService = AppExecutorUtil.createBoundedApplicationPoolExecutor(1); // Async update @Override diff --git a/platform/platform-impl/src/com/intellij/ide/customize/CustomizeFeaturedPluginsStepPanel.java b/platform/platform-impl/src/com/intellij/ide/customize/CustomizeFeaturedPluginsStepPanel.java index 887f129c6b14..aa24919594e9 100644 --- a/platform/platform-impl/src/com/intellij/ide/customize/CustomizeFeaturedPluginsStepPanel.java +++ b/platform/platform-impl/src/com/intellij/ide/customize/CustomizeFeaturedPluginsStepPanel.java @@ -30,10 +30,9 @@ import com.intellij.ui.border.CustomLineBorder; import com.intellij.ui.components.JBScrollPane; import com.intellij.ui.components.labels.LinkLabel; import com.intellij.ui.components.labels.LinkListener; -import com.intellij.util.concurrency.BoundedTaskExecutor; +import com.intellij.util.concurrency.AppExecutorUtil; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.ide.PooledThreadExecutor; import javax.swing.*; import javax.swing.border.CompoundBorder; @@ -48,7 +47,7 @@ import java.util.concurrent.atomic.AtomicBoolean; public class CustomizeFeaturedPluginsStepPanel extends AbstractCustomizeWizardStep { private static final int COLS = 3; - private static final ExecutorService ourService = new BoundedTaskExecutor(PooledThreadExecutor.INSTANCE, 4); + private static final ExecutorService ourService = AppExecutorUtil.createBoundedApplicationPoolExecutor(4); public final AtomicBoolean myCanceled = new AtomicBoolean(false); private final PluginGroups myPluginGroups; diff --git a/platform/platform-impl/src/com/intellij/openapi/application/Preloader.java b/platform/platform-impl/src/com/intellij/openapi/application/Preloader.java index ad0c9bec1ae9..27c506c3d9bb 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/Preloader.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/Preloader.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,7 +26,6 @@ import com.intellij.util.TimeoutUtil; import com.intellij.util.concurrency.SequentialTaskExecutor; import com.intellij.util.io.storage.HeavyProcessLatch; import org.jetbrains.annotations.NotNull; -import org.jetbrains.ide.PooledThreadExecutor; import java.util.concurrent.Executor; @@ -35,7 +34,7 @@ import java.util.concurrent.Executor; */ public class Preloader implements ApplicationComponent { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.application.Preloader"); - private final Executor myExecutor = new SequentialTaskExecutor(PooledThreadExecutor.INSTANCE); + private final Executor myExecutor = SequentialTaskExecutor.createSequentialApplicationPoolExecutor(); private final ProgressIndicator myIndicator = new ProgressIndicatorBase(); private final ProgressIndicator myWrappingIndicator = new AbstractProgressIndicatorBase() { @Override diff --git a/platform/platform-impl/src/com/intellij/openapi/project/FileContentQueue.java b/platform/platform-impl/src/com/intellij/openapi/project/FileContentQueue.java index fef55b8f9600..6d955b2ff106 100644 --- a/platform/platform-impl/src/com/intellij/openapi/project/FileContentQueue.java +++ b/platform/platform-impl/src/com/intellij/openapi/project/FileContentQueue.java @@ -25,10 +25,9 @@ import com.intellij.openapi.vfs.VFileProperty; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.SystemProperties; -import com.intellij.util.concurrency.BoundedTaskExecutor; +import com.intellij.util.concurrency.AppExecutorUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.ide.PooledThreadExecutor; import java.io.IOException; import java.util.Collection; @@ -48,7 +47,7 @@ public class FileContentQueue { private static final int ourTasksNumber = SystemProperties.getBooleanProperty("idea.allow.parallel.file.reading", true) ? CacheUpdateRunner.indexingThreadCount() : 1; - private static final ExecutorService ourExecutor = new BoundedTaskExecutor(PooledThreadExecutor.INSTANCE, ourTasksNumber); + private static final ExecutorService ourExecutor = AppExecutorUtil.createBoundedApplicationPoolExecutor(ourTasksNumber); // Unbounded (!) private final LinkedBlockingDeque myLoadedContents = new LinkedBlockingDeque(); diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/FSRecords.java b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/FSRecords.java index 0a5d3e19c417..4cafb787a311 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/FSRecords.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/FSRecords.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,7 +30,7 @@ import com.intellij.openapi.vfs.newvfs.impl.FileNameCache; import com.intellij.util.ArrayUtil; import com.intellij.util.CompressionUtil; import com.intellij.util.SystemProperties; -import com.intellij.util.concurrency.BoundedTaskExecutor; +import com.intellij.util.concurrency.AppExecutorUtil; import com.intellij.util.containers.ConcurrentIntObjectMap; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.IntArrayList; @@ -40,7 +40,6 @@ import com.intellij.util.io.storage.*; import gnu.trove.TIntArrayList; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.ide.PooledThreadExecutor; import javax.swing.*; import java.awt.*; @@ -280,7 +279,7 @@ public class FSRecords implements Forceable { @NotNull @Override protected ExecutorService createExecutor() { - return new BoundedTaskExecutor(PooledThreadExecutor.INSTANCE, 1); + return AppExecutorUtil.createBoundedApplicationPoolExecutor(1); } }; // sources usually zipped with 4x ratio myContentHashesEnumerator = weHaveContentHashes ? new ContentHashesUtil.HashEnumerator(contentsHashesFile, storageLockContext): null; diff --git a/platform/platform-impl/src/com/intellij/ui/EditorNotificationsImpl.java b/platform/platform-impl/src/com/intellij/ui/EditorNotificationsImpl.java index 857982bced77..2fbb979e301d 100644 --- a/platform/platform-impl/src/com/intellij/ui/EditorNotificationsImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/EditorNotificationsImpl.java @@ -32,7 +32,6 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.reference.SoftReference; -import com.intellij.util.concurrency.BoundedTaskExecutor; import com.intellij.util.concurrency.SequentialTaskExecutor; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.messages.MessageBusConnection; @@ -41,11 +40,11 @@ import com.intellij.util.ui.update.MergingUpdateQueue; import com.intellij.util.ui.update.Update; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.ide.PooledThreadExecutor; import javax.swing.*; import java.lang.ref.WeakReference; import java.util.List; +import java.util.concurrent.ExecutorService; /** * @author peter @@ -53,7 +52,7 @@ import java.util.List; public class EditorNotificationsImpl extends EditorNotifications { private static final ExtensionPointName EXTENSION_POINT_NAME = ExtensionPointName.create("com.intellij.editorNotificationProvider"); private static final Key> CURRENT_UPDATES = Key.create("CURRENT_UPDATES"); - private static final BoundedTaskExecutor ourExecutor = new SequentialTaskExecutor(PooledThreadExecutor.INSTANCE); + private static final ExecutorService ourExecutor = SequentialTaskExecutor.createSequentialApplicationPoolExecutor(); private final MergingUpdateQueue myUpdateMerger; public EditorNotificationsImpl(Project project) { diff --git a/platform/platform-impl/src/com/intellij/util/MergingBackgroundExecutor.java b/platform/platform-impl/src/com/intellij/util/MergingBackgroundExecutor.java index e8ef29cbebe4..79382f578ae0 100644 --- a/platform/platform-impl/src/com/intellij/util/MergingBackgroundExecutor.java +++ b/platform/platform-impl/src/com/intellij/util/MergingBackgroundExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,9 +15,10 @@ */ package com.intellij.util; -import com.intellij.util.concurrency.BoundedTaskExecutor; +import com.intellij.util.concurrency.AppExecutorUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.ide.PooledThreadExecutor; + +import java.util.concurrent.ExecutorService; /** * Executes tasks on pooled threads. At any point, at most {@code maxThreads} threads will be active processing tasks. @@ -30,11 +31,11 @@ import org.jetbrains.ide.PooledThreadExecutor; */ public class MergingBackgroundExecutor { private final Consumer myConsumer; - private final BoundedTaskExecutor myExecutorService; + private final ExecutorService myExecutorService; public MergingBackgroundExecutor(int maxThreads, @NotNull Consumer consumer) { myConsumer = consumer; - myExecutorService = new BoundedTaskExecutor(PooledThreadExecutor.INSTANCE, maxThreads); + myExecutorService = AppExecutorUtil.createBoundedApplicationPoolExecutor(maxThreads); } diff --git a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ServerTaskExecutorImpl.java b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ServerTaskExecutorImpl.java index d9c717fd4125..9421b4f5f87a 100644 --- a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ServerTaskExecutorImpl.java +++ b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ServerTaskExecutorImpl.java @@ -1,3 +1,18 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.intellij.remoteServer.impl.runtime; import com.intellij.openapi.diagnostic.Logger; @@ -6,17 +21,18 @@ import com.intellij.remoteServer.runtime.ServerTaskExecutor; import com.intellij.util.ThrowableRunnable; import com.intellij.util.concurrency.SequentialTaskExecutor; import org.jetbrains.annotations.NotNull; -import org.jetbrains.ide.PooledThreadExecutor; + +import java.util.concurrent.ExecutorService; /** * @author nik */ public class ServerTaskExecutorImpl implements ServerTaskExecutor { private static final Logger LOG = Logger.getInstance(ServerTaskExecutorImpl.class); - private final SequentialTaskExecutor myTaskExecutor; + private final ExecutorService myTaskExecutor; public ServerTaskExecutorImpl() { - myTaskExecutor = new SequentialTaskExecutor(PooledThreadExecutor.INSTANCE); + myTaskExecutor = SequentialTaskExecutor.createSequentialApplicationPoolExecutor(); } @Override diff --git a/platform/util/src/com/intellij/util/concurrency/AppExecutorUtil.java b/platform/util/src/com/intellij/util/concurrency/AppExecutorUtil.java index 2d74b3666311..f47aa293af1e 100644 --- a/platform/util/src/com/intellij/util/concurrency/AppExecutorUtil.java +++ b/platform/util/src/com/intellij/util/concurrency/AppExecutorUtil.java @@ -61,4 +61,14 @@ public class AppExecutorUtil { public static ScheduledExecutorService createBoundedScheduledExecutorService(int maxSimultaneousTasks) { return new BoundedScheduledExecutorService(getAppExecutorService(), maxSimultaneousTasks); } + + /** + * @return the bounded executor (executor which runs no more than {@code maxThreads} tasks simultaneously) backed by the application pool + * (i.e. all tasks are run in the {@link #getAppExecutorService()} global thread pool). + * @see #getAppExecutorService() + */ + @NotNull + public static ExecutorService createBoundedApplicationPoolExecutor(int maxThreads) { + return new BoundedTaskExecutor(getAppExecutorService(), maxThreads); + } } diff --git a/platform/util/src/com/intellij/util/concurrency/SequentialTaskExecutor.java b/platform/util/src/com/intellij/util/concurrency/SequentialTaskExecutor.java index 86fa72075e90..5eef580f26a6 100644 --- a/platform/util/src/com/intellij/util/concurrency/SequentialTaskExecutor.java +++ b/platform/util/src/com/intellij/util/concurrency/SequentialTaskExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,9 +19,15 @@ package com.intellij.util.concurrency; import org.jetbrains.annotations.NotNull; import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; public class SequentialTaskExecutor extends BoundedTaskExecutor { public SequentialTaskExecutor(@NotNull Executor executor) { super(executor, 1); } + + @NotNull + public static ExecutorService createSequentialApplicationPoolExecutor() { + return AppExecutorUtil.createBoundedApplicationPoolExecutor(1); + } } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/dsl/GroovyDslFileIndex.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/dsl/GroovyDslFileIndex.java index 0923fc8df0ca..769be8c49fbe 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/dsl/GroovyDslFileIndex.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/dsl/GroovyDslFileIndex.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -45,7 +45,7 @@ import com.intellij.psi.util.CachedValuesManager; import com.intellij.psi.util.PsiModificationTracker; import com.intellij.util.Function; import com.intellij.util.PathUtil; -import com.intellij.util.concurrency.BoundedTaskExecutor; +import com.intellij.util.concurrency.AppExecutorUtil; import com.intellij.util.containers.ConcurrentMultiMap; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; @@ -56,7 +56,6 @@ import com.intellij.util.io.URLUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.ide.PooledThreadExecutor; import org.jetbrains.plugins.groovy.GroovyFileType; import org.jetbrains.plugins.groovy.annotator.GroovyFrameworkConfigNotification; import org.jetbrains.plugins.groovy.dsl.DslActivationStatus.Status; @@ -68,6 +67,7 @@ import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil; import java.io.File; import java.util.*; +import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; @@ -86,7 +86,7 @@ public class GroovyDslFileIndex extends ScalarIndexExtension { private static final MultiMap>> filesInProcessing = new ConcurrentMultiMap>>(); - private static final BoundedTaskExecutor ourPool = new BoundedTaskExecutor(PooledThreadExecutor.INSTANCE, 4); + private static final ExecutorService ourPool = AppExecutorUtil.createBoundedApplicationPoolExecutor(4); private final MyDataIndexer myDataIndexer = new MyDataIndexer(); private final EnumeratorStringDescriptor myKeyDescriptor = new EnumeratorStringDescriptor();