Library created under write action

This commit is contained in:
Andrey Breslav
2013-01-25 13:49:53 +04:00
parent 96c6e604fb
commit 2ec03acd17
@@ -28,6 +28,7 @@ import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable; import com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable;
import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.roots.libraries.LibraryTable; import com.intellij.openapi.roots.libraries.LibraryTable;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.JarFileSystem;
@@ -128,8 +129,8 @@ public class KotlinRuntimeLibraryUtil {
@Nullable @Nullable
static Library findOrCreateRuntimeLibrary(@NotNull Project project, @NotNull FindRuntimeLibraryHandler handler) { static Library findOrCreateRuntimeLibrary(@NotNull Project project, @NotNull FindRuntimeLibraryHandler handler) {
LibraryTable table = ProjectLibraryTable.getInstance(project); final LibraryTable table = ProjectLibraryTable.getInstance(project);
Library kotlinRuntime = table.getLibraryByName(LIBRARY_NAME); final Library kotlinRuntime = table.getLibraryByName(LIBRARY_NAME);
if (kotlinRuntime != null) { if (kotlinRuntime != null) {
for (VirtualFile root : kotlinRuntime.getFiles(OrderRootType.CLASSES)) { for (VirtualFile root : kotlinRuntime.getFiles(OrderRootType.CLASSES)) {
if (root.getName().equals(KOTLIN_RUNTIME_JAR)) { if (root.getName().equals(KOTLIN_RUNTIME_JAR)) {
@@ -158,22 +159,20 @@ public class KotlinRuntimeLibraryUtil {
return null; return null;
} }
if (kotlinRuntime == null) { return ApplicationManager.getApplication().runWriteAction(new Computable<Library>() {
kotlinRuntime = table.createLibrary("KotlinRuntime");
}
final Library finalKotlinRuntime = kotlinRuntime;
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override @Override
public void run() { public Library compute() {
Library.ModifiableModel model = finalKotlinRuntime.getModifiableModel(); Library result = kotlinRuntime == null
? table.createLibrary("KotlinRuntime")
: kotlinRuntime;
Library.ModifiableModel model = result.getModifiableModel();
model.addRoot(VfsUtil.getUrlForLibraryRoot(targetJar), OrderRootType.CLASSES); model.addRoot(VfsUtil.getUrlForLibraryRoot(targetJar), OrderRootType.CLASSES);
model.addRoot(VfsUtil.getUrlForLibraryRoot(targetJar) + "src", OrderRootType.SOURCES); model.addRoot(VfsUtil.getUrlForLibraryRoot(targetJar) + "src", OrderRootType.SOURCES);
model.commit(); model.commit();
return result;
} }
}); });
return kotlinRuntime;
} }
public static void updateRuntime( public static void updateRuntime(