Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0c7075c

Browse files
smowtonigfoo
authored andcommitted
Give getters and setters their jvm-lowered names
1 parent 248011e commit 0c7075c

8 files changed

Lines changed: 81 additions & 67 deletions

File tree

java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.github.codeql
33
import com.github.codeql.utils.substituteTypeArguments
44
import com.semmle.extractor.java.OdasaOutput
55
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
6+
import org.jetbrains.kotlin.backend.jvm.ir.propertyIfAccessor
67
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
78
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
89
import org.jetbrains.kotlin.descriptors.Modality
@@ -13,6 +14,7 @@ import org.jetbrains.kotlin.ir.types.*
1314
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
1415
import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection
1516
import org.jetbrains.kotlin.ir.util.*
17+
import org.jetbrains.kotlin.load.java.JvmAbi
1618
import org.jetbrains.kotlin.name.SpecialNames
1719
import org.jetbrains.kotlin.types.Variance
1820
import org.jetbrains.kotlin.util.OperatorNameConventions
@@ -475,8 +477,20 @@ class X {
475477
fun getFunctionShortName(f: IrFunction) : String {
476478
if (f.origin == IrDeclarationOrigin.LOCAL_FUNCTION_FOR_LAMBDA || f.isAnonymousFunction)
477479
return OperatorNameConventions.INVOKE.asString()
478-
else
479-
return f.name.asString()
480+
(f as? IrSimpleFunction)?.correspondingPropertySymbol?.let {
481+
val propName = it.owner.name.asString()
482+
when(f) {
483+
it.owner.getter -> return JvmAbi.getterName(propName)
484+
it.owner.setter -> return JvmAbi.setterName(propName)
485+
else -> {
486+
logger.warn(
487+
Severity.ErrorSevere,
488+
"Function has a corresponding property, but is neither the getter nor the setter"
489+
)
490+
}
491+
}
492+
}
493+
return f.name.asString()
480494
}
481495

482496
fun getFunctionLabel(f: IrFunction, classTypeArguments: List<IrTypeArgument>? = null) : String {

java/ql/test/kotlin/library-tests/comments/comments.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ commentOwners
1616
| comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | comments.kt:12:1:31:1 | toString |
1717
| comments.kt:14:5:16:7 | /**\n * Members of this group.\n */ | comments.kt:17:5:17:46 | members |
1818
| comments.kt:14:5:16:7 | /**\n * Members of this group.\n */ | comments.kt:17:5:17:46 | members |
19-
| comments.kt:14:5:16:7 | /**\n * Members of this group.\n */ | comments.kt:17:13:17:46 | <get-members> |
19+
| comments.kt:14:5:16:7 | /**\n * Members of this group.\n */ | comments.kt:17:13:17:46 | getMembers |
2020
| comments.kt:19:5:22:7 | /**\n * Adds a [member] to this group.\n * @return the new size of the group.\n */ | comments.kt:23:5:26:5 | add |
2121
| comments.kt:35:5:35:34 | /** Medium is in the middle */ | comments.kt:36:5:36:14 | Medium |
2222
| comments.kt:37:5:37:23 | /** This is high */ | comments.kt:38:5:38:11 | High |

java/ql/test/kotlin/library-tests/exprs/binop.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
| exprs.kt:131:12:131:23 | ... > ... | exprs.kt:131:12:131:19 | variable | exprs.kt:131:23:131:23 | 0 |
7676
| exprs.kt:135:12:135:20 | ... + ... | exprs.kt:135:12:135:14 | 123 | exprs.kt:135:18:135:20 | 456 |
7777
| exprs.kt:161:8:161:16 | ... != ... | exprs.kt:161:8:161:8 | r | exprs.kt:161:13:161:16 | null |
78-
| exprs.kt:190:31:190:37 | ... + ... | exprs.kt:190:31:190:32 | <get-a1>(...) | exprs.kt:190:36:190:37 | a2 |
78+
| exprs.kt:190:31:190:37 | ... + ... | exprs.kt:190:31:190:32 | getA1(...) | exprs.kt:190:36:190:37 | a2 |
7979
| exprs.kt:206:19:206:25 | ... + ... | exprs.kt:206:20:206:21 | ...!! | exprs.kt:206:25:206:25 | 5 |
8080
| funcExprs.kt:24:35:24:42 | ... + ... | funcExprs.kt:24:35:24:38 | this | funcExprs.kt:24:42:24:42 | a |
8181
| localFunctionCalls.kt:5:25:5:29 | ... + ... | localFunctionCalls.kt:5:25:5:25 | i | localFunctionCalls.kt:5:29:5:29 | x |

java/ql/test/kotlin/library-tests/exprs/exprs.expected

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@
478478
| exprs.kt:142:9:142:18 | ...=... | exprs.kt:142:1:144:1 | <obinit> | AssignExpr |
479479
| exprs.kt:142:9:142:18 | n | exprs.kt:142:1:144:1 | <obinit> | VarAccess |
480480
| exprs.kt:142:9:142:18 | n | exprs.kt:142:1:144:1 | <obinit> | VarAccess |
481-
| exprs.kt:142:9:142:18 | n | exprs.kt:142:9:142:18 | <get-n> | VarAccess |
481+
| exprs.kt:142:9:142:18 | n | exprs.kt:142:9:142:18 | getN | VarAccess |
482482
| exprs.kt:143:27:143:31 | new C(...) | exprs.kt:143:5:143:33 | foo | ClassInstanceExpr |
483483
| exprs.kt:143:29:143:30 | 42 | exprs.kt:143:5:143:33 | foo | IntegerLiteral |
484484
| exprs.kt:146:1:146:18 | <obinit>(...) | exprs.kt:146:6:146:18 | Root | MethodAccess |
@@ -539,15 +539,15 @@
539539
| exprs.kt:172:18:172:29 | ...=... | exprs.kt:172:1:176:1 | <obinit> | AssignExpr |
540540
| exprs.kt:172:18:172:29 | rgb | exprs.kt:172:1:176:1 | <obinit> | VarAccess |
541541
| exprs.kt:172:18:172:29 | rgb | exprs.kt:172:1:176:1 | <obinit> | VarAccess |
542-
| exprs.kt:172:18:172:29 | rgb | exprs.kt:172:18:172:29 | <get-rgb> | VarAccess |
542+
| exprs.kt:172:18:172:29 | rgb | exprs.kt:172:18:172:29 | getRgb | VarAccess |
543543
| exprs.kt:179:5:179:31 | south | exprs.kt:178:1:181:1 | enums | LocalVariableDeclExpr |
544544
| exprs.kt:179:27:179:31 | SOUTH | exprs.kt:178:1:181:1 | enums | VarAccess |
545545
| exprs.kt:180:5:180:27 | green | exprs.kt:178:1:181:1 | enums | LocalVariableDeclExpr |
546546
| exprs.kt:180:23:180:27 | GREEN | exprs.kt:178:1:181:1 | enums | VarAccess |
547547
| exprs.kt:185:1:193:1 | <obinit>(...) | exprs.kt:185:1:193:1 | Class1 | MethodAccess |
548548
| exprs.kt:186:5:186:14 | ...=... | exprs.kt:185:1:193:1 | <obinit> | AssignExpr |
549549
| exprs.kt:186:5:186:14 | a1 | exprs.kt:185:1:193:1 | <obinit> | VarAccess |
550-
| exprs.kt:186:5:186:14 | a1 | exprs.kt:186:5:186:14 | <get-a1> | VarAccess |
550+
| exprs.kt:186:5:186:14 | a1 | exprs.kt:186:5:186:14 | getA1 | VarAccess |
551551
| exprs.kt:186:14:186:14 | 1 | exprs.kt:185:1:193:1 | <obinit> | IntegerLiteral |
552552
| exprs.kt:188:9:188:18 | a2 | exprs.kt:187:13:192:5 | getObject | LocalVariableDeclExpr |
553553
| exprs.kt:188:18:188:18 | 2 | exprs.kt:187:13:192:5 | getObject | IntegerLiteral |
@@ -556,8 +556,8 @@
556556
| exprs.kt:189:16:191:9 | new (...) | exprs.kt:187:13:192:5 | getObject | ClassInstanceExpr |
557557
| exprs.kt:190:13:190:49 | ...=... | exprs.kt:189:16:191:9 | <obinit> | AssignExpr |
558558
| exprs.kt:190:13:190:49 | a3 | exprs.kt:189:16:191:9 | <obinit> | VarAccess |
559-
| exprs.kt:190:13:190:49 | a3 | exprs.kt:190:13:190:49 | <get-a3> | VarAccess |
560-
| exprs.kt:190:31:190:32 | <get-a1>(...) | exprs.kt:189:16:191:9 | <obinit> | MethodAccess |
559+
| exprs.kt:190:13:190:49 | a3 | exprs.kt:190:13:190:49 | getA3 | VarAccess |
560+
| exprs.kt:190:31:190:32 | getA1(...) | exprs.kt:189:16:191:9 | <obinit> | MethodAccess |
561561
| exprs.kt:190:31:190:32 | this | exprs.kt:189:16:191:9 | <obinit> | ThisAccess |
562562
| exprs.kt:190:31:190:37 | ... + ... | exprs.kt:189:16:191:9 | <obinit> | AddExpr |
563563
| exprs.kt:190:36:190:37 | a2 | exprs.kt:189:16:191:9 | <obinit> | VarAccess |

java/ql/test/kotlin/library-tests/generic-instance-methods/test.expected

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ calls
77
| Test.java:27:5:27:24 | getter(...) | Test.java:16:22:16:25 | user | Test.java:14:14:14:17 | Test | Generic2.class:0:0:0:0 | getter | Generic2.class:0:0:0:0 | Generic2<? super String> |
88
| test.kt:1:1:10:1 | <obinit>(...) | test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | <obinit> | test.kt:1:1:10:1 | Generic |
99
| test.kt:5:32:5:46 | identity(...) | test.kt:5:3:5:46 | identity2 | test.kt:1:1:10:1 | Generic | test.kt:6:3:6:35 | identity | test.kt:1:1:10:1 | Generic |
10-
| test.kt:7:21:7:26 | <get-stored>(...) | test.kt:7:3:7:26 | getter | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | <get-stored> | test.kt:1:1:10:1 | Generic |
11-
| test.kt:8:26:8:31 | <set-stored>(...) | test.kt:8:3:8:41 | setter | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | <set-stored> | test.kt:1:1:10:1 | Generic |
10+
| test.kt:7:21:7:26 | getStored(...) | test.kt:7:3:7:26 | getter | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | getStored | test.kt:1:1:10:1 | Generic |
11+
| test.kt:8:26:8:31 | setStored(...) | test.kt:8:3:8:41 | setter | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | setStored | test.kt:1:1:10:1 | Generic |
1212
| test.kt:15:13:15:35 | identity(...) | test.kt:12:1:25:1 | user | test.kt:0:0:0:0 | TestKt | test.kt:6:3:6:35 | identity | test.kt:1:1:10:1 | Generic<String> |
1313
| test.kt:16:13:16:36 | identity2(...) | test.kt:12:1:25:1 | user | test.kt:0:0:0:0 | TestKt | test.kt:5:3:5:46 | identity2 | test.kt:1:1:10:1 | Generic<String> |
1414
| test.kt:19:16:19:23 | getter(...) | test.kt:12:1:25:1 | user | test.kt:0:0:0:0 | TestKt | test.kt:7:3:7:26 | getter | test.kt:1:1:10:1 | Generic<? extends String> |
@@ -57,35 +57,35 @@ refTypes
5757
| test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | equals | equals(java.lang.Object) | Object | boolean | test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | equals |
5858
| test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | hashCode | hashCode() | No parameters | int | test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | hashCode |
5959
| test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | toString | toString() | No parameters | String | test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | toString |
60-
| test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | <get-stored> | <get-stored>() | No parameters | T | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | <get-stored> |
61-
| test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | <set-stored> | <set-stored>(java.lang.Object) | T | void | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | <set-stored> |
60+
| test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | getStored | getStored() | No parameters | T | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | getStored |
61+
| test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | setStored | setStored(java.lang.Object) | T | void | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | setStored |
6262
| test.kt:1:1:10:1 | Generic | test.kt:5:3:5:46 | identity2 | identity2(java.lang.Object) | T | T | test.kt:1:1:10:1 | Generic | test.kt:5:3:5:46 | identity2 |
6363
| test.kt:1:1:10:1 | Generic | test.kt:6:3:6:35 | identity | identity(java.lang.Object) | T | T | test.kt:1:1:10:1 | Generic | test.kt:6:3:6:35 | identity |
6464
| test.kt:1:1:10:1 | Generic | test.kt:7:3:7:26 | getter | getter() | No parameters | T | test.kt:1:1:10:1 | Generic | test.kt:7:3:7:26 | getter |
6565
| test.kt:1:1:10:1 | Generic | test.kt:8:3:8:41 | setter | setter(java.lang.Object) | T | void | test.kt:1:1:10:1 | Generic | test.kt:8:3:8:41 | setter |
6666
| test.kt:1:1:10:1 | Generic<? extends String> | test.kt:1:1:10:1 | equals | equals(java.lang.Object) | Object | boolean | test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | equals |
6767
| test.kt:1:1:10:1 | Generic<? extends String> | test.kt:1:1:10:1 | hashCode | hashCode() | No parameters | int | test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | hashCode |
6868
| test.kt:1:1:10:1 | Generic<? extends String> | test.kt:1:1:10:1 | toString | toString() | No parameters | String | test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | toString |
69-
| test.kt:1:1:10:1 | Generic<? extends String> | test.kt:3:3:3:19 | <get-stored> | <get-stored>() | No parameters | String | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | <get-stored> |
70-
| test.kt:1:1:10:1 | Generic<? extends String> | test.kt:3:3:3:19 | <set-stored> | <set-stored>(java.lang.Void) | Void | void | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | <set-stored> |
69+
| test.kt:1:1:10:1 | Generic<? extends String> | test.kt:3:3:3:19 | getStored | getStored() | No parameters | String | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | getStored |
70+
| test.kt:1:1:10:1 | Generic<? extends String> | test.kt:3:3:3:19 | setStored | setStored(java.lang.Void) | Void | void | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | setStored |
7171
| test.kt:1:1:10:1 | Generic<? extends String> | test.kt:5:3:5:46 | identity2 | identity2(java.lang.Void) | Void | String | test.kt:1:1:10:1 | Generic | test.kt:5:3:5:46 | identity2 |
7272
| test.kt:1:1:10:1 | Generic<? extends String> | test.kt:6:3:6:35 | identity | identity(java.lang.Void) | Void | String | test.kt:1:1:10:1 | Generic | test.kt:6:3:6:35 | identity |
7373
| test.kt:1:1:10:1 | Generic<? extends String> | test.kt:7:3:7:26 | getter | getter() | No parameters | String | test.kt:1:1:10:1 | Generic | test.kt:7:3:7:26 | getter |
7474
| test.kt:1:1:10:1 | Generic<? extends String> | test.kt:8:3:8:41 | setter | setter(java.lang.Void) | Void | void | test.kt:1:1:10:1 | Generic | test.kt:8:3:8:41 | setter |
7575
| test.kt:1:1:10:1 | Generic<? super String> | test.kt:1:1:10:1 | equals | equals(java.lang.Object) | Object | boolean | test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | equals |
7676
| test.kt:1:1:10:1 | Generic<? super String> | test.kt:1:1:10:1 | hashCode | hashCode() | No parameters | int | test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | hashCode |
7777
| test.kt:1:1:10:1 | Generic<? super String> | test.kt:1:1:10:1 | toString | toString() | No parameters | String | test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | toString |
78-
| test.kt:1:1:10:1 | Generic<? super String> | test.kt:3:3:3:19 | <get-stored> | <get-stored>() | No parameters | Object | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | <get-stored> |
79-
| test.kt:1:1:10:1 | Generic<? super String> | test.kt:3:3:3:19 | <set-stored> | <set-stored>(java.lang.String) | String | void | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | <set-stored> |
78+
| test.kt:1:1:10:1 | Generic<? super String> | test.kt:3:3:3:19 | getStored | getStored() | No parameters | Object | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | getStored |
79+
| test.kt:1:1:10:1 | Generic<? super String> | test.kt:3:3:3:19 | setStored | setStored(java.lang.String) | String | void | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | setStored |
8080
| test.kt:1:1:10:1 | Generic<? super String> | test.kt:5:3:5:46 | identity2 | identity2(java.lang.String) | String | Object | test.kt:1:1:10:1 | Generic | test.kt:5:3:5:46 | identity2 |
8181
| test.kt:1:1:10:1 | Generic<? super String> | test.kt:6:3:6:35 | identity | identity(java.lang.String) | String | Object | test.kt:1:1:10:1 | Generic | test.kt:6:3:6:35 | identity |
8282
| test.kt:1:1:10:1 | Generic<? super String> | test.kt:7:3:7:26 | getter | getter() | No parameters | Object | test.kt:1:1:10:1 | Generic | test.kt:7:3:7:26 | getter |
8383
| test.kt:1:1:10:1 | Generic<? super String> | test.kt:8:3:8:41 | setter | setter(java.lang.String) | String | void | test.kt:1:1:10:1 | Generic | test.kt:8:3:8:41 | setter |
8484
| test.kt:1:1:10:1 | Generic<String> | test.kt:1:1:10:1 | equals | equals(java.lang.Object) | Object | boolean | test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | equals |
8585
| test.kt:1:1:10:1 | Generic<String> | test.kt:1:1:10:1 | hashCode | hashCode() | No parameters | int | test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | hashCode |
8686
| test.kt:1:1:10:1 | Generic<String> | test.kt:1:1:10:1 | toString | toString() | No parameters | String | test.kt:1:1:10:1 | Generic | test.kt:1:1:10:1 | toString |
87-
| test.kt:1:1:10:1 | Generic<String> | test.kt:3:3:3:19 | <get-stored> | <get-stored>() | No parameters | String | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | <get-stored> |
88-
| test.kt:1:1:10:1 | Generic<String> | test.kt:3:3:3:19 | <set-stored> | <set-stored>(java.lang.String) | String | void | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | <set-stored> |
87+
| test.kt:1:1:10:1 | Generic<String> | test.kt:3:3:3:19 | getStored | getStored() | No parameters | String | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | getStored |
88+
| test.kt:1:1:10:1 | Generic<String> | test.kt:3:3:3:19 | setStored | setStored(java.lang.String) | String | void | test.kt:1:1:10:1 | Generic | test.kt:3:3:3:19 | setStored |
8989
| test.kt:1:1:10:1 | Generic<String> | test.kt:5:3:5:46 | identity2 | identity2(java.lang.String) | String | String | test.kt:1:1:10:1 | Generic | test.kt:5:3:5:46 | identity2 |
9090
| test.kt:1:1:10:1 | Generic<String> | test.kt:6:3:6:35 | identity | identity(java.lang.String) | String | String | test.kt:1:1:10:1 | Generic | test.kt:6:3:6:35 | identity |
9191
| test.kt:1:1:10:1 | Generic<String> | test.kt:7:3:7:26 | getter | getter() | No parameters | String | test.kt:1:1:10:1 | Generic | test.kt:7:3:7:26 | getter |

0 commit comments

Comments
 (0)