diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index a10da9ecc9f..0e1b88a3a83 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -1894,16 +1894,18 @@ class VarAccess extends Expr, @varaccess { * An access to an extension receiver parameter. This is a parameter access that takes the form of `this` in Kotlin. */ class ExtensionReceiverAccess extends VarAccess { + Parameter p; + ExtensionReceiverAccess() { - exists(Parameter p | - this.getVariable() = p and - p.isExtensionParameter() - ) + this.getVariable() = p and + p.isExtensionParameter() } override string getAPrimaryQlClass() { result = "ExtensionReceiverAccess" } - override string toString() { result = "this" } + override string toString() { + if p.getName() = "" then result = "this" else result = p.getName() + } } /** diff --git a/java/ql/test/kotlin/library-tests/methods/exprs.expected b/java/ql/test/kotlin/library-tests/methods/exprs.expected index 5de17a12bf9..f0474cd40fd 100644 --- a/java/ql/test/kotlin/library-tests/methods/exprs.expected +++ b/java/ql/test/kotlin/library-tests/methods/exprs.expected @@ -306,10 +306,10 @@ | methods3.kt:3:1:3:49 | fooBarTopLevelMethodExt(...) | MethodAccess | | methods3.kt:3:1:3:49 | int | TypeAccess | | methods3.kt:3:1:3:49 | int | TypeAccess | +| methods3.kt:3:1:3:49 | p0 | ExtensionReceiverAccess | | methods3.kt:3:1:3:49 | p1 | VarAccess | | methods3.kt:3:1:3:49 | p1 | VarAccess | | methods3.kt:3:1:3:49 | p2 | VarAccess | -| methods3.kt:3:1:3:49 | this | ExtensionReceiverAccess | | methods3.kt:3:5:3:10 | String | TypeAccess | | methods3.kt:3:36:3:45 | int | TypeAccess | | methods3.kt:3:45:3:45 | 1 | IntegerLiteral | @@ -327,10 +327,10 @@ | methods3.kt:6:5:6:45 | int | TypeAccess | | methods3.kt:6:5:6:45 | int | TypeAccess | | methods3.kt:6:5:6:45 | p0 | VarAccess | +| methods3.kt:6:5:6:45 | p1 | ExtensionReceiverAccess | | methods3.kt:6:5:6:45 | p2 | VarAccess | | methods3.kt:6:5:6:45 | p2 | VarAccess | | methods3.kt:6:5:6:45 | p3 | VarAccess | -| methods3.kt:6:5:6:45 | this | ExtensionReceiverAccess | | methods3.kt:6:9:6:14 | String | TypeAccess | | methods3.kt:6:32:6:41 | int | TypeAccess | | methods3.kt:6:41:6:41 | 1 | IntegerLiteral | diff --git a/java/ql/test/kotlin/library-tests/parameter-defaults/PrintAst.expected b/java/ql/test/kotlin/library-tests/parameter-defaults/PrintAst.expected index 0fe95582369..ae6e420be31 100644 --- a/java/ql/test/kotlin/library-tests/parameter-defaults/PrintAst.expected +++ b/java/ql/test/kotlin/library-tests/parameter-defaults/PrintAst.expected @@ -566,7 +566,7 @@ test.kt: # 19| 2: [ReturnStmt] return ... # 19| 0: [MethodAccess] f(...) # 19| -1: [VarAccess] p0 -# 19| 0: [ExtensionReceiverAccess] this +# 19| 0: [ExtensionReceiverAccess] p1 # 19| 1: [VarAccess] p2 # 19| 2: [VarAccess] p3 # 19| 3: [VarAccess] p4 @@ -774,7 +774,7 @@ test.kt: # 56| 2: [ReturnStmt] return ... # 56| 0: [MethodAccess] test(...) # 56| -1: [VarAccess] p0 -# 56| 0: [ExtensionReceiverAccess] this +# 56| 0: [ExtensionReceiverAccess] p1 # 56| 1: [VarAccess] p2 # 56| 2: [VarAccess] p3 # 56| 3: [VarAccess] p4