Skip to content

Commit 05357c2

Browse files
Kotlin: cover context parameter setters
Extend the context-parameter regression test to an extension-property setter. Check the extension receiver, context argument, assigned value, and resolved setter call. The preceding extractor fix already handles this case correctly. This commit adds coverage only and requires no additional extractor change. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 2942d70 commit 05357c2

3 files changed

Lines changed: 21 additions & 9 deletions

File tree

java/ql/test-kotlin2/library-tests/context-parameters/test.expected

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,18 @@ parameters
33
| test.kt:8:1:8:45 | logged | test.kt:8:12:8:24 | value | 1 | String |
44
| test.kt:12:5:12:28 | getLogged | test.kt:10:9:10:22 | logger | 1 | Logger |
55
| test.kt:12:5:12:28 | getLogged | test.kt:11:5:11:10 | <this> | 0 | String |
6+
| test.kt:13:5:15:5 | setLogged | test.kt:10:9:10:22 | logger | 1 | Logger |
7+
| test.kt:13:5:15:5 | setLogged | test.kt:11:5:11:10 | <this> | 0 | String |
8+
| test.kt:13:5:15:5 | setLogged | test.kt:13:9:13:13 | value | 2 | String |
69
calls
7-
| test.kt:15:5:15:21 | logged(...) | test.kt:14:43:16:1 | invoke | test.kt:8:1:8:45 | logged | test.kt:15:5:15:21 | TestKt | 2 |
8-
| test.kt:15:5:15:28 | getLogged(...) | test.kt:14:43:16:1 | invoke | test.kt:12:5:12:28 | getLogged | test.kt:15:5:15:28 | TestKt | 2 |
10+
| test.kt:18:17:18:33 | logged(...) | test.kt:17:43:21:1 | invoke | test.kt:8:1:8:45 | logged | test.kt:18:17:18:33 | TestKt | 2 |
11+
| test.kt:18:17:18:40 | getLogged(...) | test.kt:17:43:21:1 | invoke | test.kt:12:5:12:28 | getLogged | test.kt:18:17:18:40 | TestKt | 2 |
12+
| test.kt:19:5:19:27 | setLogged(...) | test.kt:17:43:21:1 | invoke | test.kt:13:5:15:5 | setLogged | test.kt:19:5:19:27 | TestKt | 3 |
913
arguments
10-
| test.kt:15:5:15:21 | logged(...) | 0 | test.kt:0:0:0:0 | p0 |
11-
| test.kt:15:5:15:21 | logged(...) | 1 | test.kt:15:12:15:20 | "message" |
12-
| test.kt:15:5:15:28 | getLogged(...) | 0 | test.kt:15:5:15:21 | logged(...) |
13-
| test.kt:15:5:15:28 | getLogged(...) | 1 | test.kt:0:0:0:0 | p0 |
14+
| test.kt:18:17:18:33 | logged(...) | 0 | test.kt:0:0:0:0 | p0 |
15+
| test.kt:18:17:18:33 | logged(...) | 1 | test.kt:18:24:18:32 | "message" |
16+
| test.kt:18:17:18:40 | getLogged(...) | 0 | test.kt:18:17:18:33 | logged(...) |
17+
| test.kt:18:17:18:40 | getLogged(...) | 1 | test.kt:0:0:0:0 | p0 |
18+
| test.kt:19:5:19:27 | setLogged(...) | 0 | test.kt:19:5:19:12 | "target" |
19+
| test.kt:19:5:19:27 | setLogged(...) | 1 | test.kt:0:0:0:0 | p0 |
20+
| test.kt:19:5:19:27 | setLogged(...) | 2 | test.kt:19:23:19:27 | value |

java/ql/test-kotlin2/library-tests/context-parameters/test.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,14 @@ context(logger: Logger)
88
fun logged(value: String) = logger.log(value)
99

1010
context(logger: Logger)
11-
val String.logged: String
11+
var String.logged: String
1212
get() = logger.log(this)
13+
set(value) {
14+
logger.log(value)
15+
}
1316

1417
fun use(logger: Logger) = context(logger) {
15-
logged("message").logged
18+
val value = logged("message").logged
19+
"target".logged = value
20+
value
1621
}

java/ql/test-kotlin2/library-tests/context-parameters/test.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import java
22

3-
predicate isContextCallable(Callable c) { c.getName() = ["logged", "getLogged"] }
3+
predicate isContextCallable(Callable c) { c.getName() = ["logged", "getLogged", "setLogged"] }
44

55
query predicate parameters(Callable callable, Parameter parameter, int index, string parameterType) {
66
isContextCallable(callable) and

0 commit comments

Comments
 (0)