Use LibraryJarDescriptor in CustomLibraryDescriptorWithDeferredConfig
This commit is contained in:
+42
-37
@@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user