Skip to content

Commit 9c3f875

Browse files
Damtevdenis-fokin
authored andcommitted
Removed enum constants from meaningful static fields (#1561)
(cherry picked from commit 295ede5)
1 parent e3c319e commit 9c3f875

File tree

5 files changed

+19
-3
lines changed

5 files changed

+19
-3
lines changed

utbot-framework-api/src/main/kotlin/org/utbot/framework/plugin/api/util/IdUtil.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,9 @@ val ClassId.isEnum: Boolean
405405
val ClassId.isData: Boolean
406406
get() = kClass.isData
407407

408+
val ClassId.enumConstants: List<Enum<*>>?
409+
get() = jClass.enumConstants?.filterIsInstance<Enum<*>>()
410+
408411
fun ClassId.findFieldByIdOrNull(fieldId: FieldId): Field? {
409412
if (isNotSubtypeOf(fieldId.declaringClass)) {
410413
return null

utbot-framework-test/src/test/kotlin/org/utbot/examples/enums/ClassWithEnumTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import org.utbot.testcheckers.withPushingStateFromPathSelectorForConcrete
1212
import org.utbot.testcheckers.withoutConcrete
1313
import org.utbot.testing.DoNotCalculate
1414
import org.utbot.testing.UtValueTestCaseChecker
15+
import org.utbot.testing.ignoreExecutionsNumber
1516
import org.utbot.testing.isException
1617

1718
class ClassWithEnumTest : UtValueTestCaseChecker(testClass = ClassWithEnum::class) {
@@ -36,7 +37,7 @@ class ClassWithEnumTest : UtValueTestCaseChecker(testClass = ClassWithEnum::clas
3637
fun testDifficultIfBranch() {
3738
check(
3839
ClassWithEnum::useEnumInDifficultIf,
39-
eq(2),
40+
ignoreExecutionsNumber,
4041
{ s, r -> s.equals("TRYIF", ignoreCase = true) && r == 1 },
4142
{ s, r -> !s.equals("TRYIF", ignoreCase = true) && r == 2 },
4243
)
@@ -168,7 +169,7 @@ class ClassWithEnumTest : UtValueTestCaseChecker(testClass = ClassWithEnum::clas
168169
withPushingStateFromPathSelectorForConcrete {
169170
check(
170171
ClassWithEnum::implementingInterfaceEnumInDifficultBranch,
171-
eq(2),
172+
ignoreExecutionsNumber,
172173
{ s, r -> s.equals("SUCCESS", ignoreCase = true) && r == 0 },
173174
{ s, r -> !s.equals("SUCCESS", ignoreCase = true) && r == 2 },
174175
)

utbot-framework/src/main/kotlin/org/utbot/engine/Extensions.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ import java.util.concurrent.ConcurrentHashMap
6868
import kotlinx.collections.immutable.PersistentMap
6969
import kotlinx.collections.immutable.persistentHashMapOf
7070
import org.utbot.engine.types.OBJECT_TYPE
71+
import org.utbot.framework.plugin.api.util.enumConstants
7172

7273
val JIdentityStmt.lines: String
7374
get() = tags.joinToString { "$it" }
@@ -287,6 +288,9 @@ val Type.defaultSymValue: UtExpression
287288
val SootField.fieldId: FieldId
288289
get() = FieldId(declaringClass.id, name)
289290

291+
val SootField.isEnumConstant: Boolean
292+
get() = name in declaringClass.id.enumConstants.orEmpty().map { enum -> enum.name }
293+
290294
val UtSort.defaultValue: UtExpression
291295
get() = when (this) {
292296
UtByteSort -> mkByte(0)

utbot-framework/src/main/kotlin/org/utbot/engine/Traverser.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1950,6 +1950,8 @@ class Traverser(
19501950
!Modifier.isSynthetic(field.modifiers) &&
19511951
// we don't want to set fields that cannot be set via reflection anyway
19521952
!field.fieldId.isInaccessibleViaReflection &&
1953+
// we should not manually set enum constants
1954+
!(field.declaringClass.isEnum && field.isEnumConstant) &&
19531955
// we don't want to set fields from library classes
19541956
!workaround(IGNORE_STATICS_FROM_TRUSTED_LIBRARIES) {
19551957
ignoreStaticsFromTrustedLibraries && field.declaringClass.isFromTrustedLibrary()

utbot-sample/src/main/java/org/utbot/examples/enums/ClassWithEnum.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ boolean affectSystemStaticAndInitEnumFromItAndGetItFromEnumFun() {
228228
enum OuterStaticUsageEnum {
229229
A;
230230

231-
int y;
231+
final int y;
232232

233233
OuterStaticUsageEnum() {
234234
y = staticInt;
@@ -237,5 +237,11 @@ enum OuterStaticUsageEnum {
237237
int getOuterStatic() {
238238
return staticInt;
239239
}
240+
241+
242+
@Override
243+
public String toString() {
244+
return String.format("%s(y = %d)", name(), y);
245+
}
240246
}
241247
}

0 commit comments

Comments
 (0)