introduce ApplicationComponentLocator; use it for implementing getInstance()

This commit is contained in:
Dmitry Jemerov
2011-08-19 20:48:29 +04:00
parent 1eaa28394a
commit 72a7c46665
6 changed files with 50 additions and 9 deletions
@@ -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> T getComponent(Class<T> 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;
}
}
@@ -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> T getService(@NotNull Class<T> serviceClass) {
return (T)ApplicationManager.getApplication().getPicoContainer().getComponentInstance(serviceClass.getName());
return (T)ApplicationComponentLocator.getComponentInstance(serviceClass.getName());
}
public static <T> T getService(@NotNull Project project, @NotNull Class<T> serviceClass) {
@@ -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;
}
@@ -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;
@@ -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);
}
/**
@@ -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();
}