mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fix tests - add invokeAndWait
This commit is contained in:
@@ -2,15 +2,12 @@ package com.intellij.compiler;
|
||||
|
||||
import com.intellij.compiler.server.BuildManager;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.PathManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.application.Result;
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.application.ex.ApplicationManagerEx;
|
||||
import com.intellij.openapi.application.impl.ApplicationImpl;
|
||||
import com.intellij.openapi.components.*;
|
||||
import com.intellij.openapi.components.impl.stores.ComponentStoreImpl;
|
||||
import com.intellij.openapi.components.impl.stores.StateStorageManager;
|
||||
import com.intellij.openapi.components.impl.stores.StoreUtil;
|
||||
import com.intellij.openapi.fileTypes.FileTypeManager;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
@@ -20,24 +17,7 @@ import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.roots.ModuleRootModificationUtil;
|
||||
import com.intellij.openapi.util.JDOMExternalizable;
|
||||
import com.intellij.openapi.util.JDOMUtil;
|
||||
import com.intellij.openapi.util.NamedJDOMExternalizable;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess;
|
||||
import com.intellij.util.SystemProperties;
|
||||
import junit.framework.AssertionFailedError;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jps.model.serialization.JDomSerializationUtil;
|
||||
import org.junit.Assert;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -61,80 +41,27 @@ public class CompilerTestUtil {
|
||||
}
|
||||
|
||||
public static void saveApplicationSettings() {
|
||||
saveApplicationComponent(ProjectJdkTable.getInstance());
|
||||
saveApplicationComponent(FileTypeManager.getInstance());
|
||||
ApplicationManager.getApplication().invokeAndWait(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
doSaveComponent(ProjectJdkTable.getInstance());
|
||||
doSaveComponent(FileTypeManager.getInstance());
|
||||
}
|
||||
}, ModalityState.any());
|
||||
}
|
||||
|
||||
public static void saveApplicationComponent(Object appComponent) {
|
||||
//noinspection ConstantConditions
|
||||
if (true) {
|
||||
//noinspection TestOnlyProblems
|
||||
((ComponentStoreImpl)((ApplicationImpl)ApplicationManager.getApplication()).getStateStore()).saveApplicationComponent(appComponent);
|
||||
}
|
||||
|
||||
try {
|
||||
final File file;
|
||||
String componentName;
|
||||
State state = StoreUtil.getStateSpec(appComponent.getClass());
|
||||
if (state != null) {
|
||||
componentName = state.name();
|
||||
Storage storageToWrite = findNonDeprecated(state.storages());
|
||||
StateStorageManager storageManager = ((ApplicationImpl)ApplicationManager.getApplication()).getStateStore().getStateStorageManager();
|
||||
file = new File(storageManager.expandMacros(storageToWrite.file()));
|
||||
public static void saveApplicationComponent(final Object appComponent) {
|
||||
ApplicationManager.getApplication().invokeAndWait(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
doSaveComponent(appComponent);
|
||||
}
|
||||
else if (appComponent instanceof ExportableApplicationComponent && appComponent instanceof NamedJDOMExternalizable) {
|
||||
componentName = ((ExportableApplicationComponent)appComponent).getComponentName();
|
||||
file = PathManager.getOptionsFile((NamedJDOMExternalizable)appComponent);
|
||||
}
|
||||
else {
|
||||
throw new AssertionError( appComponent.getClass() + " doesn't have @State annotation and doesn't implement ExportableApplicationComponent");
|
||||
}
|
||||
|
||||
final Element root = new Element("application");
|
||||
Element element = JDomSerializationUtil.createComponentElement(componentName);
|
||||
if (appComponent instanceof JDOMExternalizable) {
|
||||
((JDOMExternalizable)appComponent).writeExternal(element);
|
||||
}
|
||||
else {
|
||||
//noinspection unchecked
|
||||
element.addContent(((PersistentStateComponent<Element>)appComponent).getState().cloneContent());
|
||||
}
|
||||
root.addContent(element);
|
||||
Assert.assertTrue("Cannot create " + file, FileUtil.createIfDoesntExist(file));
|
||||
new WriteAction() {
|
||||
@Override
|
||||
protected void run(@NotNull final Result result) throws IOException {
|
||||
VfsRootAccess.allowRootAccess(file.getAbsolutePath());
|
||||
try {
|
||||
VirtualFile virtualFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file);
|
||||
Assert.assertNotNull(file.getAbsolutePath(), virtualFile);
|
||||
//emulate save via 'saveSettings' so file won't be treated as changed externally
|
||||
OutputStream stream = virtualFile.getOutputStream(new SaveSessionRequestor());
|
||||
try {
|
||||
JDOMUtil.writeParent(root, stream, SystemProperties.getLineSeparator());
|
||||
}
|
||||
finally {
|
||||
stream.close();
|
||||
}
|
||||
}
|
||||
finally {
|
||||
VfsRootAccess.disallowRootAccess(file.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
}.execute().throwException();
|
||||
}
|
||||
catch (WriteExternalException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}, ModalityState.any());
|
||||
}
|
||||
|
||||
private static Storage findNonDeprecated(Storage[] storages) {
|
||||
for (Storage storage : storages) {
|
||||
if (!storage.deprecated()) {
|
||||
return storage;
|
||||
}
|
||||
}
|
||||
throw new AssertionFailedError("All storages are deprecated");
|
||||
private static void doSaveComponent(Object appComponent) {
|
||||
//noinspection TestOnlyProblems
|
||||
((ComponentStoreImpl)((ApplicationImpl)ApplicationManager.getApplication()).getStateStore()).saveApplicationComponent(appComponent);
|
||||
}
|
||||
|
||||
public static void enableExternalCompiler() {
|
||||
@@ -171,10 +98,4 @@ public class CompilerTestUtil {
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
|
||||
private static class SaveSessionRequestor implements StateStorage.SaveSession {
|
||||
@Override
|
||||
public void save() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user