From dc8b6f99ac675ba3b8e608eab6996f90ee650f97 Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Mon, 13 Jul 2026 21:35:04 +0200 Subject: [PATCH] Kotlin: unify enum library-test query across suites The `enum` library test used two different queries in test-kotlin1 and test-kotlin2, so their `.expected` files were not comparable (78 divergent lines that reflected the query difference, not an extractor difference): * test-kotlin1: `from Method m, RefType t where t = m.getDeclaringType() and t.getName() = ["Enum", "Enum", "Enum", "EnumUserKt"] select t.getQualifiedName(), t.getName(), m.getName()` * test-kotlin2: `from Method m where m.getDeclaringType().getName().matches("Enum%") select m.getName()` The K1 query is the more precise of the two: it pins the declaring types by exact name and reports the qualified name alongside the method, whereas the K2 `matches("Enum%")` form also pulls in unrelated `java.util.EnumSet` members as noise. We adopt the K1 query in both suites (a pure test-input synchronisation, no extractor change). After unification the two suites' output is identical except for a single row: test-kotlin2 additionally reports `kotlin.Enum | Enum | finalize`. That is a compiler-builtin difference (the Kotlin `kotlin.Enum` built-in class exposes `finalize` under the 2.4.0/K2 frontend but not under the 2.3.20/K1 frontend); it is a compiler-version artifact of the built-in class member set, not something the extractor synthesises, so it is tracked separately rather than papered over here. All 3333 tests pass in both suites; test-kotlin1 is unchanged. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../library-tests/enum/test.expected | 79 +++++++++++-------- .../test-kotlin2/library-tests/enum/test.ql | 8 +- 2 files changed, 49 insertions(+), 38 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/enum/test.expected b/java/ql/test-kotlin2/library-tests/enum/test.expected index a8b89662b57..ca8e735fa18 100644 --- a/java/ql/test-kotlin2/library-tests/enum/test.expected +++ b/java/ql/test-kotlin2/library-tests/enum/test.expected @@ -1,39 +1,48 @@ #select -| addAll | -| addRange | -| allOf | -| asIterator | -| clone | -| compareTo | -| complement | -| complementOf | -| copyOf | -| describeConstable | -| equals | -| finalize | -| forEach | -| getDeclaringClass | -| getFirst | -| getLast | -| hasMoreElements | -| hashCode | -| name | -| nextElement | -| noneOf | -| of | -| ordinal | -| parallelStream | -| range | -| resolveConstantDesc | -| reversed | -| spliterator | -| stream | -| toArray | -| toString | -| typeCheck | -| usesEnum | -| valueOf | -| writeReplace | +| EnumUserKt | EnumUserKt | usesEnum | +| java.lang.Enum | Enum | clone | +| java.lang.Enum | Enum | compareTo | +| java.lang.Enum | Enum | describeConstable | +| java.lang.Enum | Enum | equals | +| java.lang.Enum | Enum | finalize | +| java.lang.Enum | Enum | getDeclaringClass | +| java.lang.Enum | Enum | hashCode | +| java.lang.Enum | Enum | name | +| java.lang.Enum | Enum | ordinal | +| java.lang.Enum | Enum | toString | +| java.lang.Enum | Enum | valueOf | +| java.lang.Enum | Enum | clone | +| java.lang.Enum | Enum | compareTo | +| java.lang.Enum | Enum | describeConstable | +| java.lang.Enum | Enum | equals | +| java.lang.Enum | Enum | finalize | +| java.lang.Enum | Enum | getDeclaringClass | +| java.lang.Enum | Enum | hashCode | +| java.lang.Enum | Enum | name | +| java.lang.Enum | Enum | ordinal | +| java.lang.Enum | Enum | toString | +| java.lang.Enum | Enum | valueOf | +| java.lang.Enum | Enum | clone | +| java.lang.Enum | Enum | compareTo | +| java.lang.Enum | Enum | describeConstable | +| java.lang.Enum | Enum | equals | +| java.lang.Enum | Enum | finalize | +| java.lang.Enum | Enum | getDeclaringClass | +| java.lang.Enum | Enum | hashCode | +| java.lang.Enum | Enum | name | +| java.lang.Enum | Enum | ordinal | +| java.lang.Enum | Enum | toString | +| java.lang.Enum | Enum | valueOf | +| kotlin.Enum | Enum | clone | +| kotlin.Enum | Enum | compareTo | +| kotlin.Enum | Enum | describeConstable | +| kotlin.Enum | Enum | equals | +| kotlin.Enum | Enum | finalize | +| kotlin.Enum | Enum | getDeclaringClass | +| kotlin.Enum | Enum | hashCode | +| kotlin.Enum | Enum | name | +| kotlin.Enum | Enum | ordinal | +| kotlin.Enum | Enum | toString | enumConstants | enumUser.kt:3:16:3:17 | A | | enumUser.kt:3:19:3:20 | B | diff --git a/java/ql/test-kotlin2/library-tests/enum/test.ql b/java/ql/test-kotlin2/library-tests/enum/test.ql index 8d83314e5c3..25c325ada4d 100644 --- a/java/ql/test-kotlin2/library-tests/enum/test.ql +++ b/java/ql/test-kotlin2/library-tests/enum/test.ql @@ -1,7 +1,9 @@ import java -from Method m -where m.getDeclaringType().getName().matches("Enum%") -select m.getName() +from Method m, RefType t +where + t = m.getDeclaringType() and + t.getName() = ["Enum", "Enum", "Enum", "EnumUserKt"] +select t.getQualifiedName(), t.getName(), m.getName() query predicate enumConstants(EnumConstant ec) { ec.fromSource() }