@@ -5,10 +5,16 @@ import com.intellij.openapi.project.Project
5
5
import com.intellij.openapi.roots.DependencyScope
6
6
import com.intellij.openapi.roots.ExternalLibraryDescriptor
7
7
import com.intellij.openapi.roots.JavaProjectModelModificationService
8
+ import com.intellij.openapi.roots.LibraryOrderEntry
9
+ import com.intellij.openapi.roots.ModifiableRootModel
10
+ import com.intellij.openapi.roots.ModuleRootModificationUtil
11
+ import com.intellij.openapi.roots.ModuleSourceOrderEntry
8
12
import com.intellij.openapi.ui.Messages
9
13
import org.jetbrains.concurrency.Promise
14
+ import org.jetbrains.concurrency.thenRun
10
15
import org.utbot.framework.plugin.api.MockFramework
11
16
import org.utbot.intellij.plugin.ui.utils.LibrarySearchScope
17
+ import org.utbot.intellij.plugin.ui.utils.allLibraries
12
18
import org.utbot.intellij.plugin.ui.utils.findFrameworkLibrary
13
19
import org.utbot.intellij.plugin.ui.utils.parseVersion
14
20
@@ -40,8 +46,28 @@ fun configureMockFramework(project: Project, module: Module) {
40
46
* Otherwise latest release version will be installed.
41
47
*/
42
48
fun addDependency (project : Project , module : Module , libraryDescriptor : ExternalLibraryDescriptor ): Promise <Void > {
43
- return JavaProjectModelModificationService
49
+ val promise = JavaProjectModelModificationService
44
50
.getInstance(project)
45
51
// this method returns JetBrains internal Promise that is difficult to deal with, but it is our way
46
52
.addDependency(module, libraryDescriptor, DependencyScope .TEST )
53
+ promise.thenRun {
54
+ module.allLibraries()
55
+ .firstOrNull { library -> library.libraryName == libraryDescriptor.presentableName }?.let {
56
+ ModuleRootModificationUtil .updateModel(module) { model -> placeEntryToCorrectPlace(model, it) }
57
+ }
58
+ }
59
+ return promise
60
+ }
61
+
62
+ fun placeEntryToCorrectPlace (model : ModifiableRootModel , addedEntry : LibraryOrderEntry ) {
63
+ val order = model.orderEntries
64
+ val lastEntry = order.last()
65
+ if (lastEntry is LibraryOrderEntry && lastEntry.library == addedEntry.library) {
66
+ val insertionPoint = order.indexOfFirst { it is ModuleSourceOrderEntry } + 1
67
+ if (insertionPoint > 0 ) {
68
+ System .arraycopy(order, insertionPoint, order, insertionPoint + 1 , order.size - 1 - insertionPoint)
69
+ order[insertionPoint] = lastEntry
70
+ model.rearrangeOrderEntries(order)
71
+ }
72
+ }
47
73
}
0 commit comments