Skip to content

Commit b2a58f3

Browse files
committed
Support enumConstants extracting #151
1 parent 7f01afb commit b2a58f3

File tree

4 files changed

+27
-3
lines changed

4 files changed

+27
-3
lines changed

jacodb-api/src/main/kotlin/org/jacodb/api/ext/JcClasses.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ fun JcClassOrInterface.findMethodOrNull(methodNode: MethodNode): JcMethod? =
9191
val JcClassOrInterface.enumValues: List<JcField>?
9292
get() {
9393
if (isEnum) {
94-
return declaredFields.filter { it.isStatic && it.type.typeName == name }
94+
return declaredFields.filter { it.isEnum }
9595
}
9696
return null
9797
}

jacodb-api/src/main/kotlin/org/jacodb/api/ext/JcFields.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,9 @@ val JcField.isTransient: Boolean
3636
get() {
3737
return access and Opcodes.ACC_TRANSIENT != 0
3838
}
39+
40+
41+
val JcField.isEnum: Boolean
42+
get() {
43+
return access and Opcodes.ACC_ENUM != 0
44+
}

jacodb-core/src/test/kotlin/org/jacodb/testing/ClassesTest.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ import kotlinx.coroutines.runBlocking
2020
import org.jacodb.api.JcClassType
2121
import org.jacodb.api.JcClasspath
2222
import org.jacodb.api.ext.HierarchyExtension
23+
import org.jacodb.api.ext.enumValues
24+
import org.jacodb.api.ext.findClass
2325
import org.jacodb.api.ext.findTypeOrNull
2426
import org.jacodb.impl.features.duplicatedClasses
2527
import org.jacodb.impl.features.hierarchyExt
26-
import org.jacodb.testing.structure.EnumExamples.EnumWithField
27-
import org.jacodb.testing.structure.EnumExamples.SimpleEnum
28+
import org.jacodb.testing.structure.EnumExamples.*
2829
import org.jacodb.testing.tests.DatabaseEnvTest
2930
import org.junit.jupiter.api.Assertions.assertEquals
3031
import org.junit.jupiter.api.Assertions.assertTrue
@@ -70,5 +71,12 @@ class ClassesTest : DatabaseEnvTest() {
7071
assertEquals("int", parameters[1].type.typeName)
7172
assertEquals("int", parameters[2].type.typeName)
7273
}
74+
75+
@Test
76+
fun `enum values filter out static instances`() {
77+
val enumType = cp.findClass<EnumWithStaticInstance>()
78+
assertEquals(2, enumType.enumValues!!.size)
79+
assertEquals(listOf("C1", "C2"), enumType.enumValues!!.map { it.name })
80+
}
7381
}
7482

jacodb-core/src/testFixtures/java/org/jacodb/testing/structure/EnumExamples.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,15 @@ public enum EnumWithField {
3131
final int statusCode;
3232
}
3333

34+
public enum EnumWithStaticInstance {
35+
C1, C2;
36+
37+
public static final EnumWithStaticInstance instance = C1;
38+
}
39+
40+
public static void main(String[] args) {
41+
System.out.println(EnumWithStaticInstance.values().length);
42+
}
43+
3444
}
3545

0 commit comments

Comments
 (0)