From a2306ebdf7dbf93efa96cc71aac532655b0ad076 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Wed, 5 Dec 2012 12:03:18 +0400 Subject: [PATCH] IDEA-96327 Android: "Cannot parse Android SDK" error is shown on adding android module to non-android project [nik] --- .../util/projectWizard/SdkSettingsStep.java | 11 ++++- .../android/AndroidProjectWizardTest.java | 45 +++++++++++++------ 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/java/idea-ui/src/com/intellij/ide/util/projectWizard/SdkSettingsStep.java b/java/idea-ui/src/com/intellij/ide/util/projectWizard/SdkSettingsStep.java index e6d8f357392a..109631e39980 100644 --- a/java/idea-ui/src/com/intellij/ide/util/projectWizard/SdkSettingsStep.java +++ b/java/idea-ui/src/com/intellij/ide/util/projectWizard/SdkSettingsStep.java @@ -37,8 +37,10 @@ public class SdkSettingsStep extends ModuleWizardStep { protected final JdkComboBox myJdkComboBox; protected final WizardContext myWizardContext; protected final ProjectSdksModel myModel; + private final ModuleBuilder myModuleBuilder; public SdkSettingsStep(SettingsStep settingsStep, ModuleBuilder moduleBuilder, @NotNull Condition sdkFilter) { + myModuleBuilder = moduleBuilder; myWizardContext = settingsStep.getContext(); myModel = new ProjectSdksModel(); @@ -82,10 +84,17 @@ public class SdkSettingsStep extends ModuleWizardStep { @Override public void updateDataModel() { - if (myWizardContext.isCreatingNewProject()) { // else, inherit project jdk + Project project = myWizardContext.getProject(); + if (project == null) { Sdk jdk = myJdkComboBox.getSelectedJdk(); myWizardContext.setProjectJdk(jdk); } + else { + Sdk sdk = ProjectRootManager.getInstance(project).getProjectSdk(); + if (sdk == null || !myModuleBuilder.isSuitableSdkType(sdk.getSdkType())) { + myModuleBuilder.setModuleJdk(myJdkComboBox.getSelectedJdk()); + } // else, inherit project jdk + } } @Override diff --git a/plugins/android/testSrc/org/jetbrains/android/AndroidProjectWizardTest.java b/plugins/android/testSrc/org/jetbrains/android/AndroidProjectWizardTest.java index d0f28117852c..02b4295fcc6a 100644 --- a/plugins/android/testSrc/org/jetbrains/android/AndroidProjectWizardTest.java +++ b/plugins/android/testSrc/org/jetbrains/android/AndroidProjectWizardTest.java @@ -19,10 +19,14 @@ import com.intellij.ide.projectWizard.ProjectWizardTestCase; import com.intellij.ide.util.projectWizard.ModuleWizardStep; import com.intellij.ide.util.projectWizard.ProjectBuilder; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.projectRoots.ProjectJdkTable; import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; +import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Consumer; @@ -39,6 +43,8 @@ import java.util.Arrays; */ public class AndroidProjectWizardTest extends ProjectWizardTestCase { + private static final String ANDROID = "Android"; + public void testCreateProject() throws Exception { createProjectFromTemplate(AndroidProjectTemplatesFactory.ANDROID, "Application Module", new Consumer() { @Override @@ -54,21 +60,34 @@ public class AndroidProjectWizardTest extends ProjectWizardTestCase { } public void testCreateLibrary() throws Exception { - createProjectFromTemplate(AndroidProjectTemplatesFactory.ANDROID, AndroidProjectTemplatesFactory.LIBRARY_MODULE, new Consumer() { - @Override - public void consume(ModuleWizardStep step) { - if (step instanceof AndroidModuleWizardStep) { - ProjectBuilder builder = myWizard.getProjectBuilder(); - assertTrue(builder instanceof AndroidModuleBuilder); - String name = ((AndroidModuleBuilder)builder).getName(); - assertTrue(name, StringUtil.isNotEmpty(name)); - } - } - }); + createProjectFromTemplate(AndroidProjectTemplatesFactory.ANDROID, AndroidProjectTemplatesFactory.LIBRARY_MODULE, + new Consumer() { + @Override + public void consume(ModuleWizardStep step) { + if (step instanceof AndroidModuleWizardStep) { + ProjectBuilder builder = myWizard.getProjectBuilder(); + assertTrue(builder instanceof AndroidModuleBuilder); + String name = ((AndroidModuleBuilder)builder).getName(); + assertTrue(name, StringUtil.isNotEmpty(name)); + } + } + }); } public void testCreateEmptyProject() throws Exception { - createProjectFromTemplate(AndroidProjectTemplatesFactory.ANDROID, AndroidProjectTemplatesFactory.EMPTY_MODULE, null); + Project project = createProjectFromTemplate(AndroidProjectTemplatesFactory.ANDROID, AndroidProjectTemplatesFactory.EMPTY_MODULE, null); + assertEquals(ANDROID, ProjectRootManager.getInstance(project).getProjectSdkName()); + Module module = ModuleManager.getInstance(project).getModules()[0]; + assertTrue(ModuleRootManager.getInstance(module).isSdkInherited()); + } + + public void testAddAndroidModuleToJavaProject() throws Exception { + ProjectRootManager.getInstance(getProject()).setProjectSdk(JavaSdkImpl.getMockJdk17()); + Module module = createModuleFromTemplate(AndroidProjectTemplatesFactory.ANDROID, AndroidProjectTemplatesFactory.EMPTY_MODULE, null); + assertNotNull(module); + Sdk moduleSdk = ModuleRootManager.getInstance(module).getSdk(); + assertNotNull(moduleSdk); + assertEquals(ANDROID, moduleSdk.getName()); } @Override @@ -77,7 +96,7 @@ public class AndroidProjectWizardTest extends ProjectWizardTestCase { ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { ProjectJdkTable jdkTable = ProjectJdkTable.getInstance(); - Sdk defaultJdk = jdkTable.createSdk("Android", AndroidSdkType.getInstance()); + Sdk defaultJdk = jdkTable.createSdk(ANDROID, AndroidSdkType.getInstance()); jdkTable.addJdk(defaultJdk); mySdks.add(defaultJdk);