From d82be8763bb76c6d856dce2323ddc9fcfad65761 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Wed, 11 Jan 2017 14:43:03 +0100 Subject: [PATCH] reduce usage of ApplicationComponent.disposeComponent (to dispose in a correct order (as Disposer)) --- .../jetbrains/ide/BuiltInServerManager.java | 3 +- .../ide/BuiltInServerManagerImpl.java | 3 +- .../components/ApplicationComponent.java | 2 +- .../intellij/ide/ClipboardSynchronizer.java | 15 ++--- .../ide/ui/laf/HeadlessLafManagerImpl.java | 24 +------- ...icationStatisticsPersistenceComponent.java | 16 +----- .../impl/DocumentReferenceManagerImpl.java | 16 +----- .../fileTypes/impl/FileTypeManagerImpl.java | 15 +---- .../openapi/util/FoundationLoader.java | 19 ++----- .../ApplicationComponentAdapter.java | 0 ...oyToServerConfigurationTypesRegistrar.java | 16 +----- .../idea/svn/SvnFileUrlMappingImpl.java | 56 ++++++++----------- .../lang/xpath/xslt/impl/XsltConfigImpl.java | 15 +---- .../plugins/relaxNG/ApplicationLoader.java | 22 +------- 14 files changed, 53 insertions(+), 169 deletions(-) rename platform/{platform-impl => projectModel-api}/src/com/intellij/openapi/components/ApplicationComponentAdapter.java (100%) diff --git a/platform/built-in-server-api/src/org/jetbrains/ide/BuiltInServerManager.java b/platform/built-in-server-api/src/org/jetbrains/ide/BuiltInServerManager.java index bd222fa5a57f..94d352e4c119 100644 --- a/platform/built-in-server-api/src/org/jetbrains/ide/BuiltInServerManager.java +++ b/platform/built-in-server-api/src/org/jetbrains/ide/BuiltInServerManager.java @@ -17,14 +17,13 @@ package org.jetbrains.ide; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.components.ApplicationComponent; import com.intellij.util.Url; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.net.URLConnection; -public abstract class BuiltInServerManager extends ApplicationComponent.Adapter { +public abstract class BuiltInServerManager { public static BuiltInServerManager getInstance() { return ApplicationManager.getApplication().getComponent(BuiltInServerManager.class); } diff --git a/platform/built-in-server/src/org/jetbrains/ide/BuiltInServerManagerImpl.java b/platform/built-in-server/src/org/jetbrains/ide/BuiltInServerManagerImpl.java index a07c3c4b5f7f..cb6f1615626e 100644 --- a/platform/built-in-server/src/org/jetbrains/ide/BuiltInServerManagerImpl.java +++ b/platform/built-in-server/src/org/jetbrains/ide/BuiltInServerManagerImpl.java @@ -7,6 +7,7 @@ import com.intellij.notification.NotificationType; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ApplicationNamesInfo; +import com.intellij.openapi.components.ApplicationComponentAdapter; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.NotNullLazyValue; @@ -31,7 +32,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicBoolean; -public class BuiltInServerManagerImpl extends BuiltInServerManager { +public class BuiltInServerManagerImpl extends BuiltInServerManager implements ApplicationComponentAdapter { private static final Logger LOG = Logger.getInstance(BuiltInServerManager.class); public static final NotNullLazyValue NOTIFICATION_GROUP = new NotNullLazyValue() { diff --git a/platform/core-api/src/com/intellij/openapi/components/ApplicationComponent.java b/platform/core-api/src/com/intellij/openapi/components/ApplicationComponent.java index 38d78e516a7d..74774b17c112 100644 --- a/platform/core-api/src/com/intellij/openapi/components/ApplicationComponent.java +++ b/platform/core-api/src/com/intellij/openapi/components/ApplicationComponent.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2017 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. diff --git a/platform/platform-impl/src/com/intellij/ide/ClipboardSynchronizer.java b/platform/platform-impl/src/com/intellij/ide/ClipboardSynchronizer.java index 67dc39c9ad18..7a0e40d1695c 100644 --- a/platform/platform-impl/src/com/intellij/ide/ClipboardSynchronizer.java +++ b/platform/platform-impl/src/com/intellij/ide/ClipboardSynchronizer.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -16,9 +16,10 @@ package com.intellij.ide; import com.intellij.Patches; +import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ex.ClipboardUtil; -import com.intellij.openapi.components.ApplicationComponent; +import com.intellij.openapi.components.ApplicationComponentAdapter; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.SystemInfo; @@ -58,7 +59,7 @@ import java.util.function.Supplier; * * @author nik */ -public class ClipboardSynchronizer implements ApplicationComponent { +public class ClipboardSynchronizer implements ApplicationComponentAdapter, Disposable { private static final Logger LOG = Logger.getInstance("#com.intellij.ide.ClipboardSynchronizer"); private final ClipboardHandler myClipboardHandler; @@ -88,16 +89,10 @@ public class ClipboardSynchronizer implements ApplicationComponent { } @Override - public void disposeComponent() { + public void dispose() { myClipboardHandler.dispose(); } - @NotNull - @Override - public String getComponentName() { - return "ClipboardSynchronizer"; - } - public void areDataFlavorsAvailableAsync(@NotNull Consumer callback, @NotNull DataFlavor... flavors) { final Supplier availabilitySupplier = () -> ClipboardUtil.handleClipboardSafely(() -> myClipboardHandler.areDataFlavorsAvailable(flavors),() -> false); diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/HeadlessLafManagerImpl.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/HeadlessLafManagerImpl.java index 85f997816590..523368a6fa3a 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/HeadlessLafManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/HeadlessLafManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -13,22 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.intellij.ide.ui.laf; import com.intellij.ide.ui.LafManager; import com.intellij.ide.ui.LafManagerListener; -import com.intellij.openapi.components.ApplicationComponent; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; import javax.swing.*; -/** - * User: anna - * Date: 17-May-2006 - */ -public class HeadlessLafManagerImpl extends LafManager implements ApplicationComponent { +public class HeadlessLafManagerImpl extends LafManager { public UIManager.LookAndFeelInfo[] getInstalledLookAndFeels() { return new UIManager.LookAndFeelInfo[0]; } @@ -55,16 +47,4 @@ public class HeadlessLafManagerImpl extends LafManager implements ApplicationCom public void removeLafManagerListener(LafManagerListener l) { } - - @NonNls - @NotNull - public String getComponentName() { - return "HeadlessLafManagerImpl"; - } - - public void initComponent() { - } - - public void disposeComponent() { - } } diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/persistence/ApplicationStatisticsPersistenceComponent.java b/platform/platform-impl/src/com/intellij/internal/statistic/persistence/ApplicationStatisticsPersistenceComponent.java index d5f789a646a1..ff5069e11690 100644 --- a/platform/platform-impl/src/com/intellij/internal/statistic/persistence/ApplicationStatisticsPersistenceComponent.java +++ b/platform/platform-impl/src/com/intellij/internal/statistic/persistence/ApplicationStatisticsPersistenceComponent.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -40,8 +40,7 @@ import java.util.concurrent.TimeUnit; name = "StatisticsApplicationUsages", storages = @Storage(value = "statistics.application.usages.xml", roamingType = RoamingType.DISABLED) ) -public class ApplicationStatisticsPersistenceComponent extends ApplicationStatisticsPersistence - implements ApplicationComponent, PersistentStateComponent { +public class ApplicationStatisticsPersistenceComponent extends ApplicationStatisticsPersistence implements ApplicationComponentAdapter, PersistentStateComponent { private boolean persistOnClosing = !ApplicationManager.getApplication().isUnitTestMode(); private static final String TOKENIZER = ","; @@ -156,13 +155,6 @@ public class ApplicationStatisticsPersistenceComponent extends ApplicationStatis }, TOKENIZER); } - @Override - @NonNls - @NotNull - public String getComponentName() { - return "ApplicationStatisticsPersistenceComponent"; - } - @Override public void initComponent() { ApplicationManager.getApplication().getMessageBus().connect().subscribe(AppLifecycleListener.TOPIC, new AppLifecycleListener() { @@ -194,8 +186,4 @@ public class ApplicationStatisticsPersistenceComponent extends ApplicationStatis UsagesCollector.doPersistProjectUsages(project); } } - - @Override - public void disposeComponent() { - } } diff --git a/platform/platform-impl/src/com/intellij/openapi/command/impl/DocumentReferenceManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/command/impl/DocumentReferenceManagerImpl.java index de343011ad0f..4b053d097958 100644 --- a/platform/platform-impl/src/com/intellij/openapi/command/impl/DocumentReferenceManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/command/impl/DocumentReferenceManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -18,7 +18,7 @@ package com.intellij.openapi.command.impl; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.undo.DocumentReference; import com.intellij.openapi.command.undo.DocumentReferenceManager; -import com.intellij.openapi.components.ApplicationComponent; +import com.intellij.openapi.components.ApplicationComponentAdapter; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.util.Key; @@ -39,7 +39,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -public class DocumentReferenceManagerImpl extends DocumentReferenceManager implements ApplicationComponent { +public class DocumentReferenceManagerImpl extends DocumentReferenceManager implements ApplicationComponentAdapter { private static final Key> DELETED_FILES = Key.create(DocumentReferenceManagerImpl.class.getName() + ".DELETED_FILES"); private final Map myDocToRef = new WeakKeyWeakValueHashMap<>(); @@ -48,12 +48,6 @@ public class DocumentReferenceManagerImpl extends DocumentReferenceManager imple private static final Key FILE_TO_STRONG_REF_KEY = Key.create("FILE_TO_STRONG_REF_KEY"); private final Map myDeletedFilePathToRef = new WeakValueHashMap<>(); - @Override - @NotNull - public String getComponentName() { - return getClass().getSimpleName(); - } - @Override public void initComponent() { VirtualFileManager.getInstance().addVirtualFileListener(new VirtualFileAdapter() { @@ -105,10 +99,6 @@ public class DocumentReferenceManagerImpl extends DocumentReferenceManager imple return files; } - @Override - public void disposeComponent() { - } - @NotNull @Override public DocumentReference create(@NotNull Document document) { diff --git a/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java index caee56482aca..e0cc65cc9699 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -23,7 +23,7 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.components.ApplicationComponent; +import com.intellij.openapi.components.ApplicationComponentAdapter; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.components.State; import com.intellij.openapi.components.Storage; @@ -82,7 +82,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; @State(name = "FileTypeManager", storages = @Storage("filetypes.xml"), additionalExportFile = FileTypeManagerImpl.FILE_SPEC ) -public class FileTypeManagerImpl extends FileTypeManagerEx implements PersistentStateComponent, ApplicationComponent, Disposable { +public class FileTypeManagerImpl extends FileTypeManagerEx implements PersistentStateComponent, ApplicationComponentAdapter, Disposable { private static final Logger LOG = Logger.getInstance(FileTypeManagerImpl.class); // You must update all existing default configurations accordingly @@ -475,10 +475,6 @@ public class FileTypeManagerImpl extends FileTypeManagerEx implements Persistent return stdFileType != null ? stdFileType.fileType : PlainTextFileType.INSTANCE; } - @Override - public void disposeComponent() { - } - @Override public void initComponent() { if (!myUnresolvedMappings.isEmpty()) { @@ -1459,11 +1455,6 @@ public class FileTypeManagerImpl extends FileTypeManagerEx implements Persistent // Setup // ------------------------------------------------------------------------- - @Override - @NotNull - public String getComponentName() { - return getFileTypeComponentName(); - } @NotNull public static String getFileTypeComponentName() { diff --git a/platform/platform-impl/src/com/intellij/openapi/util/FoundationLoader.java b/platform/platform-impl/src/com/intellij/openapi/util/FoundationLoader.java index fbef49583b7c..671a46ca5965 100644 --- a/platform/platform-impl/src/com/intellij/openapi/util/FoundationLoader.java +++ b/platform/platform-impl/src/com/intellij/openapi/util/FoundationLoader.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2017 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,28 +15,17 @@ */ package com.intellij.openapi.util; -import com.intellij.openapi.components.ApplicationComponent; +import com.intellij.openapi.components.ApplicationComponentAdapter; import com.intellij.ui.mac.foundation.Foundation; -import org.jetbrains.annotations.NotNull; /** * User: spLeaner */ -public class FoundationLoader implements ApplicationComponent { - - @NotNull - public String getComponentName() { - return "FoundationLoader"; - } - +public class FoundationLoader implements ApplicationComponentAdapter { + @Override public void initComponent() { if (SystemInfo.isMac) { Foundation.init(); } } - - public void disposeComponent() { - - } - } diff --git a/platform/platform-impl/src/com/intellij/openapi/components/ApplicationComponentAdapter.java b/platform/projectModel-api/src/com/intellij/openapi/components/ApplicationComponentAdapter.java similarity index 100% rename from platform/platform-impl/src/com/intellij/openapi/components/ApplicationComponentAdapter.java rename to platform/projectModel-api/src/com/intellij/openapi/components/ApplicationComponentAdapter.java diff --git a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/deployment/DeployToServerConfigurationTypesRegistrar.java b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/deployment/DeployToServerConfigurationTypesRegistrar.java index c8970fdffbf2..c18081bac4f4 100644 --- a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/deployment/DeployToServerConfigurationTypesRegistrar.java +++ b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/deployment/DeployToServerConfigurationTypesRegistrar.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -16,7 +16,7 @@ package com.intellij.remoteServer.impl.configuration.deployment; import com.intellij.execution.configurations.ConfigurationType; -import com.intellij.openapi.components.ApplicationComponent; +import com.intellij.openapi.components.ApplicationComponentAdapter; import com.intellij.openapi.extensions.ExtensionPoint; import com.intellij.openapi.extensions.Extensions; import com.intellij.remoteServer.ServerType; @@ -25,7 +25,7 @@ import org.jetbrains.annotations.NotNull; /** * @author nik */ -public class DeployToServerConfigurationTypesRegistrar implements ApplicationComponent { +public class DeployToServerConfigurationTypesRegistrar implements ApplicationComponentAdapter { @Override public void initComponent() { //todo[nik] improve this: configuration types should be loaded lazily @@ -47,14 +47,4 @@ public class DeployToServerConfigurationTypesRegistrar implements ApplicationCom } throw new IllegalArgumentException("Cannot find run configuration type for " + serverType.getClass()); } - - @Override - public void disposeComponent() { - } - - @NotNull - @Override - public String getComponentName() { - return "DeployToServerConfigurationTypesRegistrar"; - } } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnFileUrlMappingImpl.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnFileUrlMappingImpl.java index 6f4a46aa2648..81f47347b236 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnFileUrlMappingImpl.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnFileUrlMappingImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -260,15 +260,12 @@ public class SvnFileUrlMappingImpl implements SvnFileUrlMapping, PersistentState private void runUpdateMappings() { // TODO: Not clear so far why read action is used here - may be because of ROOTS_RELOADED message sent? - ApplicationManager.getApplication().runReadAction(new Runnable() { - @Override - public void run() { - if (myProject.isDisposed()) return; + ApplicationManager.getApplication().runReadAction(() -> { + if (myProject.isDisposed()) return; - boolean mappingsChanged = updateMappings(); + boolean mappingsChanged = updateMappings(); - notifyRootsReloaded(mappingsChanged); - } + notifyRootsReloaded(mappingsChanged); }); } @@ -349,7 +346,7 @@ public class SvnFileUrlMappingImpl implements SvnFileUrlMapping, PersistentState return result; } - private SvnCopyRootSimple convert(final RootUrlInfo info) { + private static SvnCopyRootSimple convert(final RootUrlInfo info) { final SvnCopyRootSimple copy = new SvnCopyRootSimple(); copy.myVcsRoot = FileUtil.toSystemDependentName(info.getRoot().getPath()); copy.myCopyRoot = info.getIoFile().getAbsolutePath(); @@ -358,31 +355,24 @@ public class SvnFileUrlMappingImpl implements SvnFileUrlMapping, PersistentState public void loadState(final SvnMappingSavedPart state) { ((ProjectLevelVcsManagerImpl) ProjectLevelVcsManager.getInstance(myProject)).addInitializationRequest( - VcsInitObject.AFTER_COMMON, new DumbAwareRunnable() { - public void run() { - ApplicationManager.getApplication().executeOnPooledThread(new Runnable() { - @Override - public void run() { - final SvnMapping mapping = new SvnMapping(); - final SvnMapping realMapping = new SvnMapping(); - try { - fillMapping(mapping, state.getMappingRoots()); - fillMapping(realMapping, state.getMoreRealMappingRoots()); - } catch (ProcessCanceledException e) { - throw e; - } catch (Throwable t) { - LOG.info(t); - return; - } - - synchronized (myMonitor) { - myMapping.copyFrom(mapping); - myMoreRealMapping.copyFrom(realMapping); - } - } - }); + VcsInitObject.AFTER_COMMON, (DumbAwareRunnable)() -> ApplicationManager.getApplication().executeOnPooledThread(() -> { + final SvnMapping mapping = new SvnMapping(); + final SvnMapping realMapping = new SvnMapping(); + try { + fillMapping(mapping, state.getMappingRoots()); + fillMapping(realMapping, state.getMoreRealMappingRoots()); + } catch (ProcessCanceledException e) { + throw e; + } catch (Throwable t) { + LOG.info(t); + return; } - }); + + synchronized (myMonitor) { + myMapping.copyFrom(mapping); + myMoreRealMapping.copyFrom(realMapping); + } + })); } private void fillMapping(final SvnMapping mapping, final List list) { diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltConfigImpl.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltConfigImpl.java index e93bf3def58e..1a6c5066b8a0 100644 --- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltConfigImpl.java +++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltConfigImpl.java @@ -20,7 +20,7 @@ import com.intellij.lang.Language; import com.intellij.lang.LanguageFormatting; import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.components.ApplicationComponent; +import com.intellij.openapi.components.ApplicationComponentAdapter; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.components.State; import com.intellij.openapi.components.Storage; @@ -44,7 +44,7 @@ import java.awt.*; storages = { @Storage("other.xml")} ) -class XsltConfigImpl extends XsltConfig implements PersistentStateComponent, ApplicationComponent { +class XsltConfigImpl extends XsltConfig implements PersistentStateComponent, ApplicationComponentAdapter { public boolean SHOW_LINKED_FILES = true; @Nullable @@ -81,17 +81,6 @@ class XsltConfigImpl extends XsltConfig implements PersistentStateComponent