1
1
package org.utbot.framework.util
2
2
3
- import org.utbot.api.mock.UtMock
4
3
import org.utbot.common.FileUtil
5
- import org.utbot.engine.UtNativeStringWrapper
6
4
import org.utbot.engine.jimpleBody
7
- import org.utbot.engine.overrides.Boolean
8
- import org.utbot.engine.overrides.Byte
9
- import org.utbot.engine.overrides.Character
10
- import org.utbot.engine.overrides.Class
11
- import org.utbot.engine.overrides.Integer
12
- import org.utbot.engine.overrides.Long
13
- import org.utbot.engine.overrides.PrintStream
14
- import org.utbot.engine.overrides.Short
15
- import org.utbot.engine.overrides.System
16
- import org.utbot.engine.overrides.UtArrayMock
17
- import org.utbot.engine.overrides.UtLogicMock
18
- import org.utbot.engine.overrides.UtOverrideMock
19
- import org.utbot.engine.overrides.collections.AbstractCollection
20
- import org.utbot.engine.overrides.collections.AssociativeArray
21
- import org.utbot.engine.overrides.collections.Collection
22
- import org.utbot.engine.overrides.collections.List
23
- import org.utbot.engine.overrides.collections.RangeModifiableUnlimitedArray
24
- import org.utbot.engine.overrides.collections.UtArrayList
25
- import org.utbot.engine.overrides.collections.UtGenericAssociative
26
- import org.utbot.engine.overrides.collections.UtGenericStorage
27
- import org.utbot.engine.overrides.collections.UtHashMap
28
- import org.utbot.engine.overrides.collections.UtHashSet
29
- import org.utbot.engine.overrides.collections.UtLinkedList
30
- import org.utbot.engine.overrides.collections.UtLinkedListWithNullableCheck
31
- import org.utbot.engine.overrides.collections.UtOptional
32
- import org.utbot.engine.overrides.collections.UtOptionalDouble
33
- import org.utbot.engine.overrides.collections.UtOptionalInt
34
- import org.utbot.engine.overrides.collections.UtOptionalLong
35
- import org.utbot.engine.overrides.stream.*
36
- import org.utbot.engine.overrides.strings.UtString
37
- import org.utbot.engine.overrides.strings.UtStringBuffer
38
- import org.utbot.engine.overrides.strings.UtStringBuilder
39
5
import org.utbot.engine.pureJavaSignature
40
6
import org.utbot.framework.plugin.api.ExecutableId
41
7
import org.utbot.framework.plugin.services.JdkInfo
@@ -56,40 +22,40 @@ object SootUtils {
56
22
*
57
23
* @param jdkInfo specifies the JRE and the runtime library version used for analysing system classes and user's
58
24
* code.
59
- * @param forceReload forces to reinitialize Soot even if the [previousBuildDir ] equals to the class buildDir.
25
+ * @param forceReload forces to reinitialize Soot even if the [previousBuildDirs ] equals to the class buildDir.
60
26
*/
61
- fun runSoot (clazz : java.lang. Class <* >, forceReload : kotlin. Boolean , jdkInfo : JdkInfo ) {
27
+ fun runSoot (clazz : Class <* >, forceReload : Boolean , jdkInfo : JdkInfo ) {
62
28
val buildDir = FileUtil .locateClassPath(clazz) ? : FileUtil .isolateClassFiles(clazz)
63
29
val buildDirPath = buildDir.toPath()
64
30
65
- runSoot(buildDirPath, null , forceReload, jdkInfo)
31
+ runSoot(listOf ( buildDirPath) , null , forceReload, jdkInfo)
66
32
}
67
33
68
34
69
35
/* *
70
36
* @param jdkInfo specifies the JRE and the runtime library version used for analysing system classes and user's
71
37
* code.
72
- * @param forceReload forces to reinitialize Soot even if the [previousBuildDir ] equals to [buildDirPath ] and
38
+ * @param forceReload forces to reinitialize Soot even if the [previousBuildDirs ] equals to [buildDirPaths ] and
73
39
* [previousClassPath] equals to [classPath].
74
40
*/
75
- fun runSoot (buildDirPath : Path , classPath : String? , forceReload : kotlin. Boolean , jdkInfo : JdkInfo ) {
41
+ fun runSoot (buildDirPaths : List < Path > , classPath : String? , forceReload : Boolean , jdkInfo : JdkInfo ) {
76
42
synchronized(this ) {
77
- if (buildDirPath != previousBuildDir || classPath != previousClassPath || forceReload) {
78
- initSoot(buildDirPath , classPath, jdkInfo)
79
- previousBuildDir = buildDirPath
43
+ if (buildDirPaths != previousBuildDirs || classPath != previousClassPath || forceReload) {
44
+ initSoot(buildDirPaths , classPath, jdkInfo)
45
+ previousBuildDirs = buildDirPaths
80
46
previousClassPath = classPath
81
47
}
82
48
}
83
49
}
84
50
85
- private var previousBuildDir : Path ? = null
51
+ private var previousBuildDirs : List < Path > ? = null
86
52
private var previousClassPath: String? = null
87
53
}
88
54
89
55
/* *
90
56
* Convert code to Jimple
91
57
*/
92
- private fun initSoot (buildDir : Path , classpath : String? , jdkInfo : JdkInfo ) {
58
+ private fun initSoot (buildDirs : List < Path > , classpath : String? , jdkInfo : JdkInfo ) {
93
59
G .reset()
94
60
val options = Options .v()
95
61
@@ -105,7 +71,7 @@ private fun initSoot(buildDir: Path, classpath: String?, jdkInfo: JdkInfo) {
105
71
+ if (! classpath.isNullOrEmpty()) File .pathSeparator + " $classpath " else " "
106
72
)
107
73
set_src_prec(Options .src_prec_only_class)
108
- set_process_dir(listOf ( " $buildDir " ) )
74
+ set_process_dir(buildDirs.map { it.toString() } )
109
75
set_keep_line_number(true )
110
76
set_ignore_classpath_errors(true ) // gradle/build/resources/main does not exists, but it's not a problem
111
77
set_output_format(Options .output_format_jimple)
@@ -141,69 +107,69 @@ fun jimpleBody(method: ExecutableId): JimpleBody =
141
107
method.sootMethod.jimpleBody()
142
108
143
109
144
- private fun addBasicClasses (vararg classes : java.lang. Class <* >) {
110
+ private fun addBasicClasses (vararg classes : Class <* >) {
145
111
classes.forEach {
146
112
Scene .v().addBasicClass(it.name, SootClass .BODIES )
147
113
}
148
114
}
149
115
150
116
private val classesToLoad = arrayOf(
151
- AbstractCollection ::class ,
152
- UtMock ::class ,
153
- UtOverrideMock ::class ,
154
- UtLogicMock ::class ,
155
- UtArrayMock ::class ,
156
- Boolean ::class ,
157
- Byte ::class ,
158
- Character ::class ,
159
- Class ::class ,
160
- Integer ::class ,
161
- Long ::class ,
162
- Short ::class ,
163
- System ::class ,
164
- UtOptional ::class ,
165
- UtOptionalInt ::class ,
166
- UtOptionalLong ::class ,
167
- UtOptionalDouble ::class ,
168
- UtArrayList ::class ,
169
- UtArrayList .UtArrayListIterator ::class ,
170
- UtLinkedList ::class ,
171
- UtLinkedListWithNullableCheck ::class ,
172
- UtLinkedList .UtLinkedListIterator ::class ,
173
- UtLinkedList .ReverseIteratorWrapper ::class ,
174
- UtHashSet ::class ,
175
- UtHashSet .UtHashSetIterator ::class ,
176
- UtHashMap ::class ,
177
- UtHashMap .Entry ::class ,
178
- UtHashMap .LinkedEntryIterator ::class ,
179
- UtHashMap .LinkedEntrySet ::class ,
180
- UtHashMap .LinkedHashIterator ::class ,
181
- UtHashMap .LinkedKeyIterator ::class ,
182
- UtHashMap .LinkedKeySet ::class ,
183
- UtHashMap .LinkedValueIterator ::class ,
184
- UtHashMap .LinkedValues ::class ,
185
- RangeModifiableUnlimitedArray ::class ,
186
- AssociativeArray ::class ,
187
- UtGenericStorage ::class ,
188
- UtGenericAssociative ::class ,
189
- PrintStream ::class ,
190
- UtNativeStringWrapper ::class ,
191
- UtString ::class ,
192
- UtStringBuilder ::class ,
193
- UtStringBuffer ::class ,
194
- Stream ::class ,
195
- Arrays ::class ,
196
- Collection ::class ,
197
- List ::class ,
198
- UtStream ::class ,
199
- UtIntStream ::class ,
200
- UtLongStream ::class ,
201
- UtDoubleStream ::class ,
202
- UtStream .UtStreamIterator ::class ,
203
- UtIntStream .UtIntStreamIterator ::class ,
204
- UtLongStream .UtLongStreamIterator ::class ,
205
- UtDoubleStream .UtDoubleStreamIterator ::class ,
206
- IntStream ::class ,
207
- LongStream ::class ,
208
- DoubleStream ::class ,
117
+ org.utbot.engine.overrides.collections. AbstractCollection ::class ,
118
+ org.utbot.api.mock. UtMock ::class ,
119
+ org.utbot.engine.overrides. UtOverrideMock ::class ,
120
+ org.utbot.engine.overrides. UtLogicMock ::class ,
121
+ org.utbot.engine.overrides. UtArrayMock ::class ,
122
+ org.utbot.engine.overrides. Boolean ::class ,
123
+ org.utbot.engine.overrides. Byte ::class ,
124
+ org.utbot.engine.overrides. Character ::class ,
125
+ org.utbot.engine.overrides. Class ::class ,
126
+ org.utbot.engine.overrides. Integer ::class ,
127
+ org.utbot.engine.overrides. Long ::class ,
128
+ org.utbot.engine.overrides. Short ::class ,
129
+ org.utbot.engine.overrides. System ::class ,
130
+ org.utbot.engine.overrides.collections. UtOptional ::class ,
131
+ org.utbot.engine.overrides.collections. UtOptionalInt ::class ,
132
+ org.utbot.engine.overrides.collections. UtOptionalLong ::class ,
133
+ org.utbot.engine.overrides.collections. UtOptionalDouble ::class ,
134
+ org.utbot.engine.overrides.collections. UtArrayList ::class ,
135
+ org.utbot.engine.overrides.collections. UtArrayList .UtArrayListIterator ::class ,
136
+ org.utbot.engine.overrides.collections. UtLinkedList ::class ,
137
+ org.utbot.engine.overrides.collections. UtLinkedListWithNullableCheck ::class ,
138
+ org.utbot.engine.overrides.collections. UtLinkedList .UtLinkedListIterator ::class ,
139
+ org.utbot.engine.overrides.collections. UtLinkedList .ReverseIteratorWrapper ::class ,
140
+ org.utbot.engine.overrides.collections. UtHashSet ::class ,
141
+ org.utbot.engine.overrides.collections. UtHashSet .UtHashSetIterator ::class ,
142
+ org.utbot.engine.overrides.collections. UtHashMap ::class ,
143
+ org.utbot.engine.overrides.collections. UtHashMap .Entry ::class ,
144
+ org.utbot.engine.overrides.collections. UtHashMap .LinkedEntryIterator ::class ,
145
+ org.utbot.engine.overrides.collections. UtHashMap .LinkedEntrySet ::class ,
146
+ org.utbot.engine.overrides.collections. UtHashMap .LinkedHashIterator ::class ,
147
+ org.utbot.engine.overrides.collections. UtHashMap .LinkedKeyIterator ::class ,
148
+ org.utbot.engine.overrides.collections. UtHashMap .LinkedKeySet ::class ,
149
+ org.utbot.engine.overrides.collections. UtHashMap .LinkedValueIterator ::class ,
150
+ org.utbot.engine.overrides.collections. UtHashMap .LinkedValues ::class ,
151
+ org.utbot.engine.overrides.collections. RangeModifiableUnlimitedArray ::class ,
152
+ org.utbot.engine.overrides.collections. AssociativeArray ::class ,
153
+ org.utbot.engine.overrides.collections. UtGenericStorage ::class ,
154
+ org.utbot.engine.overrides.collections. UtGenericAssociative ::class ,
155
+ org.utbot.engine.overrides. PrintStream ::class ,
156
+ org.utbot.engine. UtNativeStringWrapper ::class ,
157
+ org.utbot.engine.overrides.strings. UtString ::class ,
158
+ org.utbot.engine.overrides.strings. UtStringBuilder ::class ,
159
+ org.utbot.engine.overrides.strings. UtStringBuffer ::class ,
160
+ org.utbot.engine.overrides.stream. Stream ::class ,
161
+ org.utbot.engine.overrides.stream. Arrays ::class ,
162
+ org.utbot.engine.overrides.collections. Collection ::class ,
163
+ org.utbot.engine.overrides.collections. List ::class ,
164
+ org.utbot.engine.overrides.stream. UtStream ::class ,
165
+ org.utbot.engine.overrides.stream. UtIntStream ::class ,
166
+ org.utbot.engine.overrides.stream. UtLongStream ::class ,
167
+ org.utbot.engine.overrides.stream. UtDoubleStream ::class ,
168
+ org.utbot.engine.overrides.stream. UtStream .UtStreamIterator ::class ,
169
+ org.utbot.engine.overrides.stream. UtIntStream .UtIntStreamIterator ::class ,
170
+ org.utbot.engine.overrides.stream. UtLongStream .UtLongStreamIterator ::class ,
171
+ org.utbot.engine.overrides.stream. UtDoubleStream .UtDoubleStreamIterator ::class ,
172
+ org.utbot.engine.overrides.stream. IntStream ::class ,
173
+ org.utbot.engine.overrides.stream. LongStream ::class ,
174
+ org.utbot.engine.overrides.stream. DoubleStream ::class ,
209
175
).map { it.java }.toTypedArray()
0 commit comments