From 72a7c46665c3c96bdf3e80c4b1a55b2017123ddb Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 19 Aug 2011 14:47:12 +0400 Subject: [PATCH] introduce ApplicationComponentLocator; use it for implementing getInstance() --- .../ApplicationComponentLocator.java | 42 +++++++++++++++++++ .../openapi/components/ServiceManager.java | 4 +- .../openapi/fileTypes/FileTypeManager.java | 6 +-- .../com/intellij/openapi/vfs/VirtualFile.java | 1 - .../openapi/vfs/VirtualFileManager.java | 4 +- .../application/ex/ApplicationManagerEx.java | 2 + 6 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 platform/core-api/src/com/intellij/openapi/application/ApplicationComponentLocator.java diff --git a/platform/core-api/src/com/intellij/openapi/application/ApplicationComponentLocator.java b/platform/core-api/src/com/intellij/openapi/application/ApplicationComponentLocator.java new file mode 100644 index 000000000000..58741c32e16b --- /dev/null +++ b/platform/core-api/src/com/intellij/openapi/application/ApplicationComponentLocator.java @@ -0,0 +1,42 @@ +/* + * Copyright 2000-2011 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.application; + +import com.intellij.openapi.components.ComponentManager; + +/** + * @author yole + */ +public class ApplicationComponentLocator { + private static ComponentManager ourInstance; + + public static T getComponent(Class interfaceClass) { + return ourInstance.getComponent(interfaceClass); + } + + public static Object getComponentInstance(Object componentKey) { + return ourInstance.getPicoContainer().getComponentInstance(componentKey); + } + + public static void setInstance(ComponentManager instance) { + ourInstance = instance; + } + + public static boolean initialized() { + return ourInstance != null; + } +} + 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 2e7b6e448670..78a55abe0160 100644 --- a/platform/core-api/src/com/intellij/openapi/components/ServiceManager.java +++ b/platform/core-api/src/com/intellij/openapi/components/ServiceManager.java @@ -16,7 +16,7 @@ package com.intellij.openapi.components; -import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.ApplicationComponentLocator; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.NotNullLazyKey; import com.intellij.util.NotNullFunction; @@ -33,7 +33,7 @@ public class ServiceManager { } public static T getService(@NotNull Class serviceClass) { - return (T)ApplicationManager.getApplication().getPicoContainer().getComponentInstance(serviceClass.getName()); + return (T)ApplicationComponentLocator.getComponentInstance(serviceClass.getName()); } public static T getService(@NotNull Project project, @NotNull Class serviceClass) { diff --git a/platform/core-api/src/com/intellij/openapi/fileTypes/FileTypeManager.java b/platform/core-api/src/com/intellij/openapi/fileTypes/FileTypeManager.java index a8a7818fd6f8..e8b98ff595a7 100644 --- a/platform/core-api/src/com/intellij/openapi/fileTypes/FileTypeManager.java +++ b/platform/core-api/src/com/intellij/openapi/fileTypes/FileTypeManager.java @@ -15,8 +15,7 @@ */ package com.intellij.openapi.fileTypes; -import com.intellij.openapi.application.Application; -import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.ApplicationComponentLocator; import com.intellij.openapi.application.CachedSingletonsRegistry; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NonNls; @@ -39,8 +38,7 @@ public abstract class FileTypeManager{ */ public static FileTypeManager getInstance() { if (ourInstance == null) { - Application app = ApplicationManager.getApplication(); - ourInstance = app != null ? app.getComponent(FileTypeManager.class) : new MockFileTypeManager(); + ourInstance = ApplicationComponentLocator.initialized() ? ApplicationComponentLocator.getComponent(FileTypeManager.class) : new MockFileTypeManager(); } return ourInstance; } diff --git a/platform/core-api/src/com/intellij/openapi/vfs/VirtualFile.java b/platform/core-api/src/com/intellij/openapi/vfs/VirtualFile.java index 467765ee78a5..3c9cfa19a11f 100644 --- a/platform/core-api/src/com/intellij/openapi/vfs/VirtualFile.java +++ b/platform/core-api/src/com/intellij/openapi/vfs/VirtualFile.java @@ -15,7 +15,6 @@ */ package com.intellij.openapi.vfs; -import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileTypes.FileType; diff --git a/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileManager.java b/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileManager.java index 5bef2cda67b0..f78ebe5c8d30 100644 --- a/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileManager.java +++ b/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileManager.java @@ -16,7 +16,7 @@ package com.intellij.openapi.vfs; import com.intellij.openapi.Disposable; -import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.ApplicationComponentLocator; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.util.ModificationTracker; import com.intellij.openapi.vfs.newvfs.BulkFileListener; @@ -42,7 +42,7 @@ public abstract class VirtualFileManager implements ModificationTracker{ */ @NotNull public static VirtualFileManager getInstance(){ - return ApplicationManager.getApplication().getComponent(VirtualFileManager.class); + return ApplicationComponentLocator.getComponent(VirtualFileManager.class); } /** diff --git a/platform/platform-impl/src/com/intellij/openapi/application/ex/ApplicationManagerEx.java b/platform/platform-impl/src/com/intellij/openapi/application/ex/ApplicationManagerEx.java index e081a0dbe9b8..e85094efa7f0 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/ex/ApplicationManagerEx.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/ex/ApplicationManagerEx.java @@ -17,6 +17,7 @@ package com.intellij.openapi.application.ex; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.Application; +import com.intellij.openapi.application.ApplicationComponentLocator; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.CachedSingletonsRegistry; import com.intellij.openapi.application.impl.ApplicationImpl; @@ -45,6 +46,7 @@ public class ApplicationManagerEx extends ApplicationManager { public static void setApplication(Application instance) { ourApplication = instance; + ApplicationComponentLocator.setInstance(instance); CachedSingletonsRegistry.cleanupCachedFields(); }