added utility for common ModuleRootModel modifications

This commit is contained in:
nik
2012-06-18 10:33:53 +04:00
parent 5f277b6472
commit f4e5a9dd15
41 changed files with 571 additions and 589 deletions
@@ -1,16 +1,15 @@
package org.jetbrains.android.importDependencies;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.ModuleRootModificationUtil;
import org.jetbrains.android.util.AndroidBundle;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Eugene.Kudelevsky
*/
* @author Eugene.Kudelevsky
*/
class AddModuleDependencyTask extends ImportDependenciesTask {
private final ModuleProvider myModuleProvider;
private final ModuleProvider myDepModuleProvider;
@@ -31,14 +30,7 @@ class AddModuleDependencyTask extends ImportDependenciesTask {
final ModuleRootManager rootManager = ModuleRootManager.getInstance(module);
if (!rootManager.isDependsOn(depModule)) {
final ModifiableRootModel model = rootManager.getModifiableModel();
model.addModuleOrderEntry(depModule);
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
model.commit();
}
});
ModuleRootModificationUtil.addDependency(module, depModule);
}
return null;
}
@@ -35,10 +35,7 @@ import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.*;
import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil;
import com.intellij.openapi.roots.JavadocOrderRootType;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.roots.libraries.ui.OrderRoot;
import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService;
import com.intellij.openapi.ui.Messages;
@@ -133,7 +130,8 @@ public class AndroidSdkUtils {
if (sdkPath != null) {
// todo: check if we should do it for new android platforms (api_level >= 15)
final VirtualFile annotationsJar = JarFileSystem.getInstance()
.findFileByPath(FileUtil.toSystemIndependentName(sdkPath) + AndroidCommonUtils.ANNOTATIONS_JAR_RELATIVE_PATH + JarFileSystem.JAR_SEPARATOR);
.findFileByPath(
FileUtil.toSystemIndependentName(sdkPath) + AndroidCommonUtils.ANNOTATIONS_JAR_RELATIVE_PATH + JarFileSystem.JAR_SEPARATOR);
if (annotationsJar != null) {
result.add(new OrderRoot(annotationsJar, OrderRootType.CLASSES));
}
@@ -289,23 +287,12 @@ public class AndroidSdkUtils {
private static boolean tryToSetAndroidPlatform(Module module, Sdk sdk) {
AndroidPlatform platform = AndroidPlatform.parse(sdk);
if (platform != null) {
setSdk(module, sdk);
ModuleRootModificationUtil.setModuleSdk(module, sdk);
return true;
}
return false;
}
private static void setSdk(Module module, Sdk sdk) {
final ModifiableRootModel model = ModuleRootManager.getInstance(module).getModifiableModel();
model.setSdk(sdk);
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
model.commit();
}
});
}
private static void setupPlatform(@NotNull Module module) {
if (tryToImportSdkFromPropertyFiles(module)) {
return;
@@ -359,7 +346,7 @@ public class AndroidSdkUtils {
final Sdk sdk = findSuitableAndroidSdk(targetHashString, sdkDir);
if (sdk != null) {
setSdk(module, sdk);
ModuleRootModificationUtil.setModuleSdk(module, sdk);
return true;
}
@@ -388,7 +375,7 @@ public class AndroidSdkUtils {
if (target != null) {
final Sdk androidSdk = createNewAndroidPlatform(target, sdkData.getLocation(), true);
if (androidSdk != null) {
setSdk(module, androidSdk);
ModuleRootModificationUtil.setModuleSdk(module, androidSdk);
return true;
}
}
@@ -26,8 +26,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.ProjectJdkTable;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.SdkModificator;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.ModuleRootModificationUtil;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.vfs.JarFileSystem;
import com.intellij.openapi.vfs.LocalFileSystem;
@@ -80,7 +79,8 @@ public abstract class AndroidTestCase extends UsefulTestCase {
public void setUp() throws Exception {
super.setUp();
final TestFixtureBuilder<IdeaProjectTestFixture> projectBuilder = IdeaTestFixtureFactory.getFixtureFactory().createFixtureBuilder(getName());
final TestFixtureBuilder<IdeaProjectTestFixture> projectBuilder =
IdeaTestFixtureFactory.getFixtureFactory().createFixtureBuilder(getName());
myFixture = JavaTestFixtureFactory.getFixtureFactory().createCodeInsightFixture(projectBuilder.getFixture());
final JavaModuleFixtureBuilder moduleFixtureBuilder = projectBuilder.addModule(JavaModuleFixtureBuilder.class);
tuneModule(moduleFixtureBuilder, myFixture.getTempDirPath());
@@ -144,14 +144,7 @@ public abstract class AndroidTestCase extends UsefulTestCase {
private static void addAndroidSdk(Module module, String sdkPath) {
Sdk androidSdk = createAndroidSdk(sdkPath);
final ModifiableRootModel moduleModel = ModuleRootManager.getInstance(module).getModifiableModel();
moduleModel.setSdk(androidSdk);
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
moduleModel.commit();
}
});
ModuleRootModificationUtil.setModuleSdk(module, androidSdk);
}
private static Sdk createAndroidSdk(String sdkPath) {
@@ -5,11 +5,11 @@ import com.intellij.codeInsight.completion.CompletionType;
import com.intellij.codeInsight.navigation.actions.GotoDeclarationAction;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.roots.ModuleRootModificationUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.testFramework.IdeaTestCase;
import com.intellij.testFramework.PsiTestUtil;
import com.intellij.testFramework.UsefulTestCase;
import com.intellij.testFramework.builders.JavaModuleFixtureBuilder;
import com.intellij.testFramework.fixtures.*;
@@ -48,7 +48,8 @@ public class AndroidLibraryProjectTest extends UsefulTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
final TestFixtureBuilder<IdeaProjectTestFixture> projectBuilder = IdeaTestFixtureFactory.getFixtureFactory().createFixtureBuilder(getName());
final TestFixtureBuilder<IdeaProjectTestFixture> projectBuilder =
IdeaTestFixtureFactory.getFixtureFactory().createFixtureBuilder(getName());
myFixture = JavaTestFixtureFactory.getFixtureFactory().createCodeInsightFixture(projectBuilder.getFixture());
myFixture.enableInspections(AndroidDomInspection.class);
@@ -81,8 +82,8 @@ public class AndroidLibraryProjectTest extends UsefulTestCase {
myLibFacet = AndroidTestCase.addAndroidFacet(myLibModule, getTestSdkPath());
myLibFacet.getConfiguration().LIBRARY_PROJECT = true;
PsiTestUtil.addDependency(myAppModule, myLibModule);
PsiTestUtil.addDependency(myLibModule, myLibGenModule);
ModuleRootModificationUtil.addDependency(myAppModule, myLibModule);
ModuleRootModificationUtil.addDependency(myLibModule, myLibGenModule);
}
private void createInitialStructure() {