diff --git a/idea/src/org/jetbrains/jet/plugin/configuration/KotlinJavaModuleConfigurator.java b/idea/src/org/jetbrains/jet/plugin/configuration/KotlinJavaModuleConfigurator.java index 4169793e8a0..e10ac059249 100644 --- a/idea/src/org/jetbrains/jet/plugin/configuration/KotlinJavaModuleConfigurator.java +++ b/idea/src/org/jetbrains/jet/plugin/configuration/KotlinJavaModuleConfigurator.java @@ -1,11 +1,16 @@ package org.jetbrains.jet.plugin.configuration; import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.impl.scopes.LibraryScope; import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.OrderRootType; +import com.intellij.openapi.roots.libraries.Library; +import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.plugin.framework.JavaRuntimeLibraryDescription; import org.jetbrains.jet.plugin.framework.KotlinFrameworkDetector; import org.jetbrains.jet.plugin.framework.ui.CreateJavaLibraryDialogWithModules; +import org.jetbrains.jet.plugin.versions.KotlinRuntimeLibraryUtil; import org.jetbrains.jet.utils.PathUtil; import java.io.File; @@ -89,6 +94,16 @@ public class KotlinJavaModuleConfigurator extends KotlinWithLibraryConfigurator return assertFileExists(getKotlinPaths().getRuntimeSourcesPath()); } + @Override + protected boolean isKotlinLibrary(@NotNull Project project, @NotNull Library library) { + if (super.isKotlinLibrary(project, library)) { + return true; + } + + LibraryScope scope = new LibraryScope(project, library); + return KotlinRuntimeLibraryUtil.getKotlinRuntimeMarkerClass(scope) != null; + } + KotlinJavaModuleConfigurator() { } } diff --git a/idea/src/org/jetbrains/jet/plugin/configuration/KotlinWithLibraryConfigurator.java b/idea/src/org/jetbrains/jet/plugin/configuration/KotlinWithLibraryConfigurator.java index 6fb2b755e48..7f5ce0dae54 100644 --- a/idea/src/org/jetbrains/jet/plugin/configuration/KotlinWithLibraryConfigurator.java +++ b/idea/src/org/jetbrains/jet/plugin/configuration/KotlinWithLibraryConfigurator.java @@ -15,6 +15,7 @@ import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Ref; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VfsUtilCore; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Processor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -170,12 +171,12 @@ public abstract class KotlinWithLibraryConfigurator implements KotlinProjectConf public Library getKotlinLibrary(@NotNull Project project) { LibrariesContainer librariesContainer = LibrariesContainerFactory.createContainer(project); for (Library library : librariesContainer.getLibraries(LibrariesContainer.LibraryLevel.PROJECT)) { - if (isKotlinLibrary(library)) { + if (isKotlinLibrary(project, library)) { return library; } } for (Library library : librariesContainer.getLibraries(LibrariesContainer.LibraryLevel.GLOBAL)) { - if (isKotlinLibrary(library)) { + if (isKotlinLibrary(project, library)) { return library; } } @@ -286,12 +287,12 @@ public abstract class KotlinWithLibraryConfigurator implements KotlinProjectConf } @Nullable - private Library getKotlinLibrary(@NotNull Module module) { + private Library getKotlinLibrary(@NotNull final Module module) { final Ref result = Ref.create(null); OrderEnumerator.orderEntries(module).forEachLibrary(new Processor() { @Override public boolean process(Library library) { - if (isKotlinLibrary(library)) { + if (isKotlinLibrary(module.getProject(), library)) { result.set(library); return false; } @@ -301,8 +302,18 @@ public abstract class KotlinWithLibraryConfigurator implements KotlinProjectConf return result.get(); } - private boolean isKotlinLibrary(@NotNull Library library) { - return getLibraryName().equals(library.getName()); + protected boolean isKotlinLibrary(@NotNull Project project, @NotNull Library library) { + if (getLibraryName().equals(library.getName())) { + return true; + } + + for (VirtualFile root : library.getFiles(OrderRootType.CLASSES)) { + if (root.getName().equals(getJarName())) { + return true; + } + } + + return false; } private File copyJarToDir(@NotNull String toDir) {