package gw.plugin.ij.util;
import com.intellij.mock.MockApplicationEx;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.ThrowableComputable;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.lang.reflect.InvocationTargetException;
public class MockApp extends MockApplicationEx {
public boolean inWriteAction;
public MockApp() {
super(new com.intellij.openapi.Disposable() {
public void dispose() {
}
});
}
@Override
public void invokeAndWait(@NotNull Runnable runnable, @NotNull ModalityState modalityState) {
try {
SwingUtilities.invokeAndWait(runnable);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
@Override
public void runWriteAction(@NotNull Runnable action) {
inWriteAction = true;
try {
super.runWriteAction(action);
} finally {
inWriteAction = false;
}
}
@Override
public <T> T runWriteAction(@NotNull Computable<T> computation) {
inWriteAction = true;
try {
return super.runWriteAction(computation);
} finally {
inWriteAction = false;
}
}
@Override
public <T, E extends Throwable> T runWriteAction(@NotNull ThrowableComputable<T, E> computation) throws E {
inWriteAction = true;
try {
return super.runWriteAction(computation);
} finally {
inWriteAction = false;
}
}
@Override
public boolean isDispatchThread() {
return Thread.currentThread().getName().startsWith("AWT-EventQueue-");
}
}