Skip to content

Commit 86e99c4

Browse files
authored
Merge pull request github#10930 from smowton/smowton/fix/external-property-overloads
Kotlin: give external extension properties with matching name and file distinct trap filenames
2 parents 88c4a2f + 42d6968 commit 86e99c4

File tree

7 files changed

+29
-6
lines changed

7 files changed

+29
-6
lines changed

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@ class ExternalDeclExtractor(val logger: FileLogger, val invocationTrapFile: Stri
3535
if (ret) externalDeclWorkList.add(Pair(d, signature))
3636
return ret
3737
}
38-
fun extractLater(p: IrProperty) = extractLater(p, propertySignature)
39-
fun extractLater(f: IrField) = extractLater(f, fieldSignature)
4038
fun extractLater(c: IrClass) = extractLater(c, "")
4139

4240
fun extractExternalClasses() {

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -253,19 +253,24 @@ open class KotlinUsesExtractor(
253253
}
254254
}
255255

256+
private fun propertySignature(p: IrProperty) =
257+
((p.getter ?: p.setter)?.extensionReceiverParameter?.let { useType(erase(it.type)).javaResult.signature } ?: "")
258+
256259
private fun extractPropertyLaterIfExternalFileMember(p: IrProperty) {
257260
if (isExternalFileClassMember(p)) {
258261
extractExternalClassLater(p.parentAsClass)
259-
dependencyCollector?.addDependency(p, externalClassExtractor.propertySignature)
260-
externalClassExtractor.extractLater(p)
262+
val signature = propertySignature(p) + externalClassExtractor.propertySignature
263+
dependencyCollector?.addDependency(p, signature)
264+
externalClassExtractor.extractLater(p, signature)
261265
}
262266
}
263267

264268
private fun extractFieldLaterIfExternalFileMember(f: IrField) {
265269
if (isExternalFileClassMember(f)) {
266270
extractExternalClassLater(f.parentAsClass)
267-
dependencyCollector?.addDependency(f, externalClassExtractor.fieldSignature)
268-
externalClassExtractor.extractLater(f)
271+
val signature = (f.correspondingPropertySymbol?.let { propertySignature(it.owner) } ?: "") + externalClassExtractor.fieldSignature
272+
dependencyCollector?.addDependency(f, signature)
273+
externalClassExtractor.extractLater(f, signature)
269274
}
270275
}
271276

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
| user.kt:3:22:3:22 | getF(...) | lib/lib/TestKt.class:0:0:0:0 | getF |
2+
| user.kt:3:28:3:28 | getF(...) | lib/lib/TestKt.class:0:0:0:0 | getF |
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package lib
2+
3+
val String.f
4+
get() = 1
5+
6+
val Int.f
7+
get() = 2
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from create_database_utils import *
2+
3+
runSuccessfully(["kotlinc", "test.kt", "-d", "lib"])
4+
run_codeql_database_create(["kotlinc user.kt -cp lib"], lang="java")
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import java
2+
3+
from MethodAccess ma
4+
select ma, ma.getCallee()
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import lib.f
2+
3+
fun test() = "hello".f + 1.f

0 commit comments

Comments
 (0)