From 09fbbb369a9a20686820e271d09a944e10685cbc Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 3 Apr 2017 17:23:56 +0200 Subject: [PATCH] Use LibraryJarDescriptor in CustomLibraryDescriptorWithDeferredConfig --- ...stomLibraryDescriptorWithDeferredConfig.kt | 79 ++++++++++--------- 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/framework/CustomLibraryDescriptorWithDeferredConfig.kt b/idea/src/org/jetbrains/kotlin/idea/framework/CustomLibraryDescriptorWithDeferredConfig.kt index ebbe39d56de..80647a600c0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/framework/CustomLibraryDescriptorWithDeferredConfig.kt +++ b/idea/src/org/jetbrains/kotlin/idea/framework/CustomLibraryDescriptorWithDeferredConfig.kt @@ -56,15 +56,11 @@ abstract class CustomLibraryDescriptorWithDeferredConfig private val libraryKind: LibraryKind, private val suitableLibraryKinds: Set ) : CustomLibraryDescription() { - private val projectBaseDir: VirtualFile? + private val projectBaseDir: VirtualFile? = project?.baseDir var copyFileRequests: DeferredCopyFileRequests? = null private set - init { - this.projectBaseDir = project?.baseDir - } - override fun getSuitableLibraryKinds(): Set { return suitableLibraryKinds } @@ -125,27 +121,25 @@ abstract class CustomLibraryDescriptorWithDeferredConfig else FileUIUtils.createRelativePath(null, projectBaseDir, DEFAULT_LIB_DIR_NAME) - val files = configurator.existingJarFiles + val jarDescriptors = configurator.libraryJarDescriptors - val runtimeJar: File - var reflectJar: File? - var runtimeSrcJar: File - - val stdJarInDefaultPath = files.getRuntimeDestination(defaultPathToJarFile) + val stdJarInDefaultPath = File(defaultPathToJarFile, jarDescriptors.first().jarName) + val libraryFiles = mutableListOf() + val librarySourceFiles = mutableListOf() if (projectBaseDir != null && stdJarInDefaultPath.exists()) { - runtimeJar = stdJarInDefaultPath - - reflectJar = files.getReflectDestination(defaultPathToJarFile) - if (reflectJar != null && !reflectJar.exists()) { - reflectJar = files.reflectJar - assert(reflectJar != null) { "getReflectDestination != null, but getReflectJar == null" } - copyFileRequests!!.addCopyWithReplaceRequest(reflectJar!!, runtimeJar.parent) - } - - runtimeSrcJar = files.getRuntimeSourcesDestination(defaultPathToJarFile) - if (!runtimeSrcJar.exists()) { - runtimeSrcJar = files.runtimeSourcesJar - copyFileRequests!!.addCopyWithReplaceRequest(runtimeSrcJar, runtimeJar.parent) + libraryFiles.add(stdJarInDefaultPath) + for (jarDescriptor in jarDescriptors) { + var destination = File(defaultPathToJarFile, jarDescriptor.jarName) + if (!destination.exists()) { + copyFileRequests!!.addCopyWithReplaceRequest(jarDescriptor.getPathInPlugin(), defaultPathToJarFile) + destination = jarDescriptor.getPathInPlugin() + } + if (jarDescriptor.orderRootType == OrderRootType.SOURCES) { + librarySourceFiles.add(destination) + } + else { + libraryFiles.add(destination) + } } } else { @@ -156,17 +150,22 @@ abstract class CustomLibraryDescriptorWithDeferredConfig val copyIntoPath = dialog.copyIntoPath if (copyIntoPath != null) { - for (file in files.getAllJars()) { - copyFileRequests!!.addCopyWithReplaceRequest(file, copyIntoPath) + for (libraryJarDescriptor in configurator.libraryJarDescriptors) { + copyFileRequests!!.addCopyWithReplaceRequest(libraryJarDescriptor.getPathInPlugin(), copyIntoPath) } } - runtimeJar = files.runtimeJar - reflectJar = files.reflectJar - runtimeSrcJar = files.runtimeSourcesJar + for (jarDescriptor in jarDescriptors) { + if (jarDescriptor.orderRootType == OrderRootType.SOURCES) { + librarySourceFiles.add(jarDescriptor.getPathInPlugin()) + } + else { + libraryFiles.add(jarDescriptor.getPathInPlugin()) + } + } } - return createConfiguration(Arrays.asList(runtimeJar, reflectJar), runtimeSrcJar) + return createConfiguration(libraryFiles, librarySourceFiles) } private val configurator: KotlinWithLibraryConfigurator @@ -177,19 +176,25 @@ abstract class CustomLibraryDescriptorWithDeferredConfig // Implements an API added in IDEA 16 override fun createNewLibraryWithDefaultSettings(contextDirectory: VirtualFile?): NewLibraryConfiguration? { - val files = configurator.existingJarFiles - return createConfiguration(Arrays.asList(files.runtimeJar, files.reflectJar), files.runtimeSourcesJar) + return createConfiguration(collectPathsInPlugin(OrderRootType.CLASSES), + collectPathsInPlugin(OrderRootType.SOURCES)) } - protected fun createConfiguration(libraryFiles: List, librarySrcFile: File): NewLibraryConfiguration { + private fun collectPathsInPlugin(rootType: OrderRootType): List { + return configurator.libraryJarDescriptors + .filter { it.orderRootType == rootType } + .map { it.getPathInPlugin() } + } + + protected fun createConfiguration(libraryFiles: List, librarySourceFiles: List): NewLibraryConfiguration { return object : NewLibraryConfiguration(libraryName, null, LibraryVersionProperties()) { override fun addRoots(editor: LibraryEditor) { for (libraryFile in libraryFiles) { - if (libraryFile != null) { - editor.addRoot(VfsUtil.getUrlForLibraryRoot(libraryFile), OrderRootType.CLASSES) - } + editor.addRoot(VfsUtil.getUrlForLibraryRoot(libraryFile), OrderRootType.CLASSES) + } + for (librarySrcFile in librarySourceFiles) { + editor.addRoot(VfsUtil.getUrlForLibraryRoot(librarySrcFile), OrderRootType.SOURCES) } - editor.addRoot(VfsUtil.getUrlForLibraryRoot(librarySrcFile), OrderRootType.SOURCES) } } }