diff --git a/idea/src/org/jetbrains/jet/plugin/sdk/KotlinSdkDescription.java b/idea/src/org/jetbrains/jet/plugin/sdk/KotlinSdkDescription.java index 670db995111..9a675b349ae 100644 --- a/idea/src/org/jetbrains/jet/plugin/sdk/KotlinSdkDescription.java +++ b/idea/src/org/jetbrains/jet/plugin/sdk/KotlinSdkDescription.java @@ -68,11 +68,11 @@ public class KotlinSdkDescription extends CustomLibraryDescription { descriptor.setTitle("Kotlin SDK"); descriptor.setDescription("Choose a directory containing Kotlin distribution"); - final VirtualFile sdkHome = FileChooser.chooseFile(parentComponent, descriptor, initial); - if (sdkHome == null) return null; + final VirtualFile sdkHomeVFile = FileChooser.chooseFile(parentComponent, descriptor, initial); + if (sdkHomeVFile == null) return null; - final String sdkHomePath = sdkHome.getPath(); - final String sdkVersion = KotlinSdkUtil.getSDKVersion(new File(sdkHomePath)); + final File sdkHome = new File(sdkHomeVFile.getPath()); + final String sdkVersion = KotlinSdkUtil.getSDKVersion(sdkHome); if (sdkVersion == null) { Messages.showErrorDialog(parentComponent, "Failed to find Kotlin SDK in the specified path: cannot determine Kotlin version.", @@ -83,7 +83,7 @@ public class KotlinSdkDescription extends CustomLibraryDescription { return new NewLibraryConfiguration(KotlinSdkUtil.getSDKName(sdkVersion)) { @Override public void addRoots(@NotNull final LibraryEditor editor) { - addSDKRoots(editor, sdkHomePath); + addSDKRoots(editor, sdkHome); } }; } @@ -95,8 +95,8 @@ public class KotlinSdkDescription extends CustomLibraryDescription { return LocalFileSystem.getInstance().findFileByPath(FileUtil.toSystemIndependentName(path)); } - private static void addSDKRoots(@NotNull final LibraryEditor editor, @NotNull final String sdkHomePath) { - final File libDir = new File(sdkHomePath, "lib"); + public static void addSDKRoots(@NotNull final LibraryEditor editor, @NotNull final File sdkHome) { + final File libDir = new File(sdkHome, "lib"); if (!libDir.isDirectory()) return; final List jars = new ArrayList(); diff --git a/idea/tests/org/jetbrains/jet/plugin/compilerMessages/IDECompilerMessagingTest.java b/idea/tests/org/jetbrains/jet/plugin/compilerMessages/IDECompilerMessagingTest.java index abeec1abfad..17a6c285764 100644 --- a/idea/tests/org/jetbrains/jet/plugin/compilerMessages/IDECompilerMessagingTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/compilerMessages/IDECompilerMessagingTest.java @@ -22,13 +22,19 @@ import com.intellij.openapi.compiler.TranslatingCompiler; import com.intellij.openapi.roots.ContentEntry; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.roots.libraries.Library; +import com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEditor; +import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer; +import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.testFramework.PlatformTestCase; import jet.Function1; import junit.framework.Assert; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.plugin.sdk.KotlinSdkDescription; +import java.io.File; import java.io.IOException; /** @@ -49,6 +55,7 @@ public abstract class IDECompilerMessagingTest extends PlatformTestCase { MockCompileContext mockCompileContext = new MockCompileContext(myModule, outDirectory, root); MockModuleChunk mockModuleChunk = new MockModuleChunk(myModule); setSourceEntryForModule(root); + setKotlinSdkForModule(); assert sampleFile != null; compile(compiler, sampleFile, mockCompileContext, mockModuleChunk); checkMessages(whatToExpect, mockCompileContext); @@ -80,6 +87,25 @@ public abstract class IDECompilerMessagingTest extends PlatformTestCase { }); } + private void setKotlinSdkForModule() { + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + final ModifiableRootModel model = ModuleRootManager.getInstance(myModule).getModifiableModel(); + model.addLibraryEntry(createKotlinSdkLibrary()); + model.commit(); + } + }); + } + + @NotNull + private Library createKotlinSdkLibrary() { + final NewLibraryEditor editor = new NewLibraryEditor(); + editor.setName("Kotlin SDK"); + KotlinSdkDescription.addSDKRoots(editor, new File("dist/kotlinc")); + return LibrariesContainerFactory.createContainer(myModule).createLibrary(editor, LibrariesContainer.LibraryLevel.GLOBAL); + } + protected abstract void checkHeader(@NotNull MessageChecker checker); @NotNull