This commit is contained in:
Alexey Kudravtsev
2013-06-17 10:35:02 +04:00
parent 225afaa3bf
commit 93e34542ae
13 changed files with 64 additions and 38 deletions
@@ -331,6 +331,7 @@ public interface Application extends ComponentManager {
* @param action to be executed
* @return future result
*/
@NotNull
Future<?> executeOnPooledThread(@NotNull Runnable action);
/**
@@ -338,6 +339,7 @@ public interface Application extends ComponentManager {
* @param action to be executed
* @return future result
*/
@NotNull
<T> Future<T> executeOnPooledThread(@NotNull Callable<T> action);
/**
@@ -355,7 +357,7 @@ public interface Application extends ComponentManager {
/**
* Exits and restarts IDEA. If the current platform is not restart capable, only exits.
*
*
* @since 8.1
*/
void restart();
@@ -370,11 +372,13 @@ public interface Application extends ComponentManager {
/**
* Returns lock used for read operations, should be closed in finally block
*/
@NotNull
AccessToken acquireReadActionLock();
/**
* Returns lock used for write operations, should be closed in finally block
*/
@NotNull
AccessToken acquireWriteActionLock(@Nullable Class marker);
boolean isInternal();
@@ -40,7 +40,7 @@ public interface ComponentManager extends UserDataHolder, Disposable {
* @return component with given name or null if there is no such component
* @see com.intellij.openapi.components.NamedComponent#getComponentName()
*/
BaseComponent getComponent(String name);
BaseComponent getComponent(@NotNull String name);
/**
* Gets the component by its interface class.
@@ -48,7 +48,7 @@ public interface ComponentManager extends UserDataHolder, Disposable {
* @param interfaceClass the interface class of the component
* @return component that matches interface class or null if there is no such component
*/
<T> T getComponent(Class<T> interfaceClass);
<T> T getComponent(@NotNull Class<T> interfaceClass);
/**
* Gets the component by its interface class but returns a specified default implementation
@@ -58,7 +58,7 @@ public interface ComponentManager extends UserDataHolder, Disposable {
* @param defaultImplementationIfAbsent the default implementation
* @return component that matches interface class or default if there is no such component
*/
<T> T getComponent(Class<T> interfaceClass, T defaultImplementationIfAbsent);
<T> T getComponent(@NotNull Class<T> interfaceClass, T defaultImplementationIfAbsent);
/**
* Checks whether there is a component with the specified interface class.
@@ -72,21 +72,22 @@ public interface ComponentManager extends UserDataHolder, Disposable {
/**
* Gets all components whose implementation class is derived from <code>baseClass</code>.
*
* @param baseClass
* @return array of components
* @deprecated use extension points instead
*/
@NotNull
<T> T[] getComponents(Class<T> baseClass);
<T> T[] getComponents(@NotNull Class<T> baseClass);
@NotNull
PicoContainer getPicoContainer();
@NotNull
MessageBus getMessageBus();
boolean isDisposed();
<T> T[] getExtensions(ExtensionPointName<T> extensionPointName);
@NotNull
<T> T[] getExtensions(@NotNull ExtensionPointName<T> extensionPointName);
/**
* @return condition for this component being disposed.
@@ -85,11 +85,13 @@ public class MockApplication extends MockComponentManager implements Application
return true;
}
@NotNull
@Override
public Future<?> executeOnPooledThread(@NotNull Runnable action) {
return ExecutorServiceHolder.ourThreadExecutorsService.submit(action);
}
@NotNull
@Override
public <T> Future<T> executeOnPooledThread(@NotNull Callable<T> action) {
return ExecutorServiceHolder.ourThreadExecutorsService.submit(action);
@@ -139,11 +141,13 @@ public class MockApplication extends MockComponentManager implements Application
return computation.compute();
}
@NotNull
@Override
public AccessToken acquireReadActionLock() {
return AccessToken.EMPTY_ACCESS_TOKEN;
}
@NotNull
@Override
public AccessToken acquireWriteActionLock(@Nullable Class marker) {
return AccessToken.EMPTY_ACCESS_TOKEN;
@@ -250,10 +254,10 @@ public class MockApplication extends MockComponentManager implements Application
@Override
public void saveSettings() {
}
private static class ExecutorServiceHolder {
private static final ExecutorService ourThreadExecutorsService = createServiceImpl();
private static ThreadPoolExecutor createServiceImpl() {
return new ThreadPoolExecutor(10, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>(), new ThreadFactory() {
@NotNull
@@ -63,7 +63,7 @@ public class MockComponentManager extends UserDataHolderBase implements Componen
}
@Override
public BaseComponent getComponent(String name) {
public BaseComponent getComponent(@NotNull String name) {
return null;
}
@@ -85,13 +85,13 @@ public class MockComponentManager extends UserDataHolderBase implements Componen
}
@Override
public <T> T getComponent(Class<T> interfaceClass) {
public <T> T getComponent(@NotNull Class<T> interfaceClass) {
final Object o = myPicoContainer.getComponentInstance(interfaceClass);
return (T)(o != null ? o : myComponents.get(interfaceClass));
}
@Override
public <T> T getComponent(Class<T> interfaceClass, T defaultImplementation) {
public <T> T getComponent(@NotNull Class<T> interfaceClass, T defaultImplementation) {
return getComponent(interfaceClass);
}
@@ -102,7 +102,7 @@ public class MockComponentManager extends UserDataHolderBase implements Componen
@Override
@NotNull
public <T> T[] getComponents(Class<T> baseClass) {
public <T> T[] getComponents(@NotNull Class<T> baseClass) {
final List<?> list = myPicoContainer.getComponentInstancesOfType(baseClass);
return list.toArray((T[])Array.newInstance(baseClass, 0));
}
@@ -113,6 +113,7 @@ public class MockComponentManager extends UserDataHolderBase implements Componen
return myPicoContainer;
}
@NotNull
@Override
public MessageBus getMessageBus() {
return myMessageBus;
@@ -127,8 +128,9 @@ public class MockComponentManager extends UserDataHolderBase implements Componen
public void dispose() {
}
@NotNull
@Override
public <T> T[] getExtensions(final ExtensionPointName<T> extensionPointName) {
public <T> T[] getExtensions(@NotNull final ExtensionPointName<T> extensionPointName) {
throw new UnsupportedOperationException("getExtensions()");
}
@@ -136,8 +136,9 @@ public class MockProject extends MockComponentManager implements Project {
public void save() {
}
@NotNull
@Override
public <T> T[] getExtensions(final ExtensionPointName<T> extensionPointName) {
public <T> T[] getExtensions(@NotNull final ExtensionPointName<T> extensionPointName) {
return Extensions.getArea(this).getExtensionPoint(extensionPointName).getExtensions();
}
@@ -90,6 +90,7 @@ public abstract class ComponentManagerImpl extends UserDataHolderBase implements
initComponents();
}
@NotNull
@Override
public MessageBus getMessageBus() {
assert !myDisposeCompleted && !myDisposed : "Already disposed";
@@ -185,13 +186,13 @@ public abstract class ComponentManagerImpl extends UserDataHolderBase implements
}
@Override
public <T> T getComponent(Class<T> interfaceClass) {
public <T> T getComponent(@NotNull Class<T> interfaceClass) {
assert !myDisposeCompleted : "Already disposed: "+this;
return getComponent(interfaceClass, null);
}
@Override
public <T> T getComponent(Class<T> interfaceClass, T defaultImplementation) {
public <T> T getComponent(@NotNull Class<T> interfaceClass, T defaultImplementation) {
final T fromContainer = getComponentFromContainer(interfaceClass);
if (fromContainer != null) return fromContainer;
if (defaultImplementation != null) return defaultImplementation;
@@ -255,7 +256,7 @@ public abstract class ComponentManagerImpl extends UserDataHolderBase implements
@Override
@SuppressWarnings({"unchecked"})
@NotNull
public synchronized <T> T[] getComponents(Class<T> baseClass) {
public synchronized <T> T[] getComponents(@NotNull Class<T> baseClass) {
return myComponentsRegistry.getComponentsByType(baseClass);
}
@@ -280,7 +281,7 @@ public abstract class ComponentManagerImpl extends UserDataHolderBase implements
}
@Override
public synchronized BaseComponent getComponent(String name) {
public synchronized BaseComponent getComponent(@NotNull String name) {
return myComponentsRegistry.getComponentByName(name);
}
@@ -26,7 +26,7 @@ import com.intellij.openapi.util.Key;
import org.jetbrains.annotations.NotNull;
/**
*
*
* @author Kirill Likhodedov
*/
public class MockProject implements Project {
@@ -106,17 +106,17 @@ public class MockProject implements Project {
}
@Override
public BaseComponent getComponent(String name) {
public BaseComponent getComponent(@NotNull String name) {
throw new UnsupportedOperationException();
}
@Override
public <T> T getComponent(Class<T> interfaceClass) {
public <T> T getComponent(@NotNull Class<T> interfaceClass) {
throw new UnsupportedOperationException();
}
@Override
public <T> T getComponent(Class<T> interfaceClass, T defaultImplementationIfAbsent) {
public <T> T getComponent(@NotNull Class<T> interfaceClass, T defaultImplementationIfAbsent) {
throw new UnsupportedOperationException();
}
@@ -127,7 +127,7 @@ public class MockProject implements Project {
@NotNull
@Override
public <T> T[] getComponents(Class<T> baseClass) {
public <T> T[] getComponents(@NotNull Class<T> baseClass) {
throw new UnsupportedOperationException();
}
@@ -137,9 +137,10 @@ public class MockProject implements Project {
throw new UnsupportedOperationException();
}
@NotNull
@Override
public MessageBus getMessageBus() {
return null;
throw new UnsupportedOperationException();
}
@Override
@@ -147,8 +148,9 @@ public class MockProject implements Project {
return false;
}
@NotNull
@Override
public <T> T[] getExtensions(ExtensionPointName<T> extensionPointName) {
public <T> T[] getExtensions(@NotNull ExtensionPointName<T> extensionPointName) {
throw new UnsupportedOperationException();
}
@@ -329,8 +329,9 @@ public class ModuleImpl extends ComponentManagerImpl implements ModuleEx {
return StringUtil.trimEnd(fileName, ModuleFileType.DOT_DEFAULT_EXTENSION);
}
@NotNull
@Override
public <T> T[] getExtensions(final ExtensionPointName<T> extensionPointName) {
public <T> T[] getExtensions(@NotNull final ExtensionPointName<T> extensionPointName) {
return Extensions.getArea(this).getExtensionPoint(extensionPointName).getExtensions();
}
@@ -421,6 +421,7 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application
return myCommandLineMode;
}
@NotNull
@Override
public Future<?> executeOnPooledThread(@NotNull final Runnable action) {
return ourThreadExecutorsService.submit(new Runnable() {
@@ -443,6 +444,7 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application
});
}
@NotNull
@Override
public <T> Future<T> executeOnPooledThread(@NotNull final Callable<T> action) {
return ourThreadExecutorsService.submit(new Callable<T>() {
@@ -1209,6 +1211,7 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application
return myActive;
}
@NotNull
@Override
public AccessToken acquireReadActionLock() {
// if we are inside read action, do not try to acquire read lock again since it will deadlock if there is a pending writeAction
@@ -1217,6 +1220,7 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application
return new ReadAccessToken();
}
@NotNull
@Override
public AccessToken acquireWriteActionLock(Class clazz) {
return new WriteAccessToken(clazz);
@@ -1468,8 +1472,9 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application
return myDoNotSave;
}
@NotNull
@Override
public <T> T[] getExtensions(final ExtensionPointName<T> extensionPointName) {
public <T> T[] getExtensions(@NotNull final ExtensionPointName<T> extensionPointName) {
return Extensions.getRootArea().getExtensionPoint(extensionPointName).getExtensions();
}
@@ -105,12 +105,12 @@ public class DummyProject extends UserDataHolderBase implements Project {
}
@Override
public BaseComponent getComponent(String name) {
public BaseComponent getComponent(@NotNull String name) {
return null;
}
@Override
public <T> T getComponent(Class<T> interfaceClass) {
public <T> T getComponent(@NotNull Class<T> interfaceClass) {
return null;
}
@@ -121,7 +121,7 @@ public class DummyProject extends UserDataHolderBase implements Project {
@Override
@NotNull
public <T> T[] getComponents(Class<T> baseClass) {
public <T> T[] getComponents(@NotNull Class<T> baseClass) {
return (T[]) ArrayUtil.EMPTY_OBJECT_ARRAY;
}
@@ -132,7 +132,7 @@ public class DummyProject extends UserDataHolderBase implements Project {
}
@Override
public <T> T getComponent(Class<T> interfaceClass, T defaultImplementation) {
public <T> T getComponent(@NotNull Class<T> interfaceClass, T defaultImplementation) {
return null;
}
@@ -177,17 +177,19 @@ public class DummyProject extends UserDataHolderBase implements Project {
return false;
}
@NotNull
@Override
public MessageBus getMessageBus() {
return null;
throw new UnsupportedOperationException();
}
@Override
public void dispose() {
}
@NotNull
@Override
public <T> T[] getExtensions(final ExtensionPointName<T> extensionPointName) {
public <T> T[] getExtensions(@NotNull final ExtensionPointName<T> extensionPointName) {
throw new UnsupportedOperationException("getExtensions()");
}
@@ -438,15 +438,16 @@ public class ProjectImpl extends ComponentManagerImpl implements ProjectEx {
}
}
@NotNull
@Override
public <T> T[] getExtensions(final ExtensionPointName<T> extensionPointName) {
public <T> T[] getExtensions(@NotNull final ExtensionPointName<T> extensionPointName) {
return Extensions.getArea(this).getExtensionPoint(extensionPointName).getExtensions();
}
public String getDefaultName() {
if (isDefault()) return TEMPLATE_PROJECT_NAME;
return getStateStore().getProjectName();
return getStateStore().getProjectName();
}
private class MyProjectManagerListener extends ProjectManagerAdapter {
@@ -71,7 +71,7 @@ public class MockApplicationEx extends MockApplication implements ApplicationEx
@Override
public boolean isDoNotSave() {
return false;
return false;
}
@Override
@@ -104,8 +104,9 @@ public class MockApplicationEx extends MockApplication implements ApplicationEx
}
@NotNull
@Override
public <T> T[] getExtensions(final ExtensionPointName<T> extensionPointName) {
public <T> T[] getExtensions(@NotNull final ExtensionPointName<T> extensionPointName) {
return Extensions.getRootArea().getExtensionPoint(extensionPointName).getExtensions();
}
@@ -24,6 +24,7 @@ public abstract class FlyIdeaTestCase extends TestCase {
final Application old = ApplicationManagerEx.getApplication();
myRootDisposable = Disposer.newDisposable();
MockApplicationEx app = new MockApplicationEx(getRootDisposable()) {
@NotNull
@Override
public Future<?> executeOnPooledThread(@NotNull Runnable action) {
return old != null ? old.executeOnPooledThread(action) : super.executeOnPooledThread(action);