Use LibraryJarDescriptor in CustomLibraryDescriptorWithDeferredConfig

This commit is contained in:
Dmitry Jemerov
2017-04-03 17:23:56 +02:00
parent 2bb1b670f7
commit 09fbbb369a
@@ -56,15 +56,11 @@ abstract class CustomLibraryDescriptorWithDeferredConfig
private val libraryKind: LibraryKind, private val libraryKind: LibraryKind,
private val suitableLibraryKinds: Set<LibraryKind> private val suitableLibraryKinds: Set<LibraryKind>
) : CustomLibraryDescription() { ) : CustomLibraryDescription() {
private val projectBaseDir: VirtualFile? private val projectBaseDir: VirtualFile? = project?.baseDir
var copyFileRequests: DeferredCopyFileRequests? = null var copyFileRequests: DeferredCopyFileRequests? = null
private set private set
init {
this.projectBaseDir = project?.baseDir
}
override fun getSuitableLibraryKinds(): Set<LibraryKind> { override fun getSuitableLibraryKinds(): Set<LibraryKind> {
return suitableLibraryKinds return suitableLibraryKinds
} }
@@ -125,27 +121,25 @@ abstract class CustomLibraryDescriptorWithDeferredConfig
else else
FileUIUtils.createRelativePath(null, projectBaseDir, DEFAULT_LIB_DIR_NAME) FileUIUtils.createRelativePath(null, projectBaseDir, DEFAULT_LIB_DIR_NAME)
val files = configurator.existingJarFiles val jarDescriptors = configurator.libraryJarDescriptors
val runtimeJar: File val stdJarInDefaultPath = File(defaultPathToJarFile, jarDescriptors.first().jarName)
var reflectJar: File? val libraryFiles = mutableListOf<File>()
var runtimeSrcJar: File val librarySourceFiles = mutableListOf<File>()
val stdJarInDefaultPath = files.getRuntimeDestination(defaultPathToJarFile)
if (projectBaseDir != null && stdJarInDefaultPath.exists()) { if (projectBaseDir != null && stdJarInDefaultPath.exists()) {
runtimeJar = stdJarInDefaultPath libraryFiles.add(stdJarInDefaultPath)
for (jarDescriptor in jarDescriptors) {
reflectJar = files.getReflectDestination(defaultPathToJarFile) var destination = File(defaultPathToJarFile, jarDescriptor.jarName)
if (reflectJar != null && !reflectJar.exists()) { if (!destination.exists()) {
reflectJar = files.reflectJar copyFileRequests!!.addCopyWithReplaceRequest(jarDescriptor.getPathInPlugin(), defaultPathToJarFile)
assert(reflectJar != null) { "getReflectDestination != null, but getReflectJar == null" } destination = jarDescriptor.getPathInPlugin()
copyFileRequests!!.addCopyWithReplaceRequest(reflectJar!!, runtimeJar.parent) }
} if (jarDescriptor.orderRootType == OrderRootType.SOURCES) {
librarySourceFiles.add(destination)
runtimeSrcJar = files.getRuntimeSourcesDestination(defaultPathToJarFile) }
if (!runtimeSrcJar.exists()) { else {
runtimeSrcJar = files.runtimeSourcesJar libraryFiles.add(destination)
copyFileRequests!!.addCopyWithReplaceRequest(runtimeSrcJar, runtimeJar.parent) }
} }
} }
else { else {
@@ -156,17 +150,22 @@ abstract class CustomLibraryDescriptorWithDeferredConfig
val copyIntoPath = dialog.copyIntoPath val copyIntoPath = dialog.copyIntoPath
if (copyIntoPath != null) { if (copyIntoPath != null) {
for (file in files.getAllJars()) { for (libraryJarDescriptor in configurator.libraryJarDescriptors) {
copyFileRequests!!.addCopyWithReplaceRequest(file, copyIntoPath) copyFileRequests!!.addCopyWithReplaceRequest(libraryJarDescriptor.getPathInPlugin(), copyIntoPath)
} }
} }
runtimeJar = files.runtimeJar for (jarDescriptor in jarDescriptors) {
reflectJar = files.reflectJar if (jarDescriptor.orderRootType == OrderRootType.SOURCES) {
runtimeSrcJar = files.runtimeSourcesJar librarySourceFiles.add(jarDescriptor.getPathInPlugin())
}
else {
libraryFiles.add(jarDescriptor.getPathInPlugin())
}
}
} }
return createConfiguration(Arrays.asList<File>(runtimeJar, reflectJar), runtimeSrcJar) return createConfiguration(libraryFiles, librarySourceFiles)
} }
private val configurator: KotlinWithLibraryConfigurator private val configurator: KotlinWithLibraryConfigurator
@@ -177,19 +176,25 @@ abstract class CustomLibraryDescriptorWithDeferredConfig
// Implements an API added in IDEA 16 // Implements an API added in IDEA 16
override fun createNewLibraryWithDefaultSettings(contextDirectory: VirtualFile?): NewLibraryConfiguration? { override fun createNewLibraryWithDefaultSettings(contextDirectory: VirtualFile?): NewLibraryConfiguration? {
val files = configurator.existingJarFiles return createConfiguration(collectPathsInPlugin(OrderRootType.CLASSES),
return createConfiguration(Arrays.asList<File>(files.runtimeJar, files.reflectJar), files.runtimeSourcesJar) collectPathsInPlugin(OrderRootType.SOURCES))
} }
protected fun createConfiguration(libraryFiles: List<File>, librarySrcFile: File): NewLibraryConfiguration { private fun collectPathsInPlugin(rootType: OrderRootType): List<File> {
return configurator.libraryJarDescriptors
.filter { it.orderRootType == rootType }
.map { it.getPathInPlugin() }
}
protected fun createConfiguration(libraryFiles: List<File>, librarySourceFiles: List<File>): NewLibraryConfiguration {
return object : NewLibraryConfiguration(libraryName, null, LibraryVersionProperties()) { return object : NewLibraryConfiguration(libraryName, null, LibraryVersionProperties()) {
override fun addRoots(editor: LibraryEditor) { override fun addRoots(editor: LibraryEditor) {
for (libraryFile in libraryFiles) { 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)
} }
} }
} }