Skip to content

Commit b1e0d73

Browse files
authored
Merge pull request #10297 from tamasvajk/kotlin-fix-kotlin-to-java-fn-names
Kotlin: Lookup getter methods based on special JVM method mapping
2 parents 987870b + 57f5072 commit b1e0d73

File tree

3 files changed

+20
-13
lines changed

3 files changed

+20
-13
lines changed

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,10 +1202,11 @@ open class KotlinUsesExtractor(
12021202
else
12031203
f.parentClassOrNull?.let { parentClass ->
12041204
getJavaEquivalentClass(parentClass)?.let { javaClass ->
1205-
if (javaClass != parentClass)
1205+
if (javaClass != parentClass) {
1206+
val jvmName = getJvmName(f) ?: f.name.asString()
12061207
// Look for an exact type match...
12071208
javaClass.declarations.findSubType<IrFunction> { decl ->
1208-
decl.name == f.name &&
1209+
decl.name.asString() == jvmName &&
12091210
decl.valueParameters.size == f.valueParameters.size &&
12101211
// Note matching by classifier not the whole type so that generic arguments are allowed to differ,
12111212
// as they always will for method type parameters occurring in parameter types (e.g. <T> toArray(T[] array)
@@ -1214,7 +1215,7 @@ open class KotlinUsesExtractor(
12141215
} ?:
12151216
// Or if there is none, look for the only viable overload
12161217
javaClass.declarations.singleOrNullSubType<IrFunction> { decl ->
1217-
decl.name == f.name &&
1218+
decl.name.asString() == jvmName &&
12181219
decl.valueParameters.size == f.valueParameters.size
12191220
} ?:
12201221
// Or check property accessors:
@@ -1234,6 +1235,7 @@ open class KotlinUsesExtractor(
12341235
}
12351236
null
12361237
}
1238+
}
12371239
else
12381240
null
12391241
}
Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
| test.kt:1:84:1:89 | length(...) | length |
2-
| test.kt:1:97:1:100 | size(...) | size |
3-
| test.kt:1:108:1:111 | size(...) | size |
4-
| test.kt:1:119:1:122 | keySet(...) | keySet |
5-
| test.kt:1:124:1:127 | size(...) | size |
6-
| test.kt:1:135:1:140 | values(...) | values |
7-
| test.kt:1:142:1:145 | size(...) | size |
8-
| test.kt:1:153:1:159 | entrySet(...) | entrySet |
9-
| test.kt:1:161:1:164 | size(...) | size |
1+
diag
2+
#select
3+
| test.kt:1:84:1:89 | length(...) | java.lang.CharSequence | length |
4+
| test.kt:1:97:1:100 | size(...) | java.util.Collection<String> | size |
5+
| test.kt:1:108:1:111 | size(...) | java.util.Map<String,String> | size |
6+
| test.kt:1:119:1:122 | keySet(...) | java.util.Map<String,String> | keySet |
7+
| test.kt:1:124:1:127 | size(...) | java.util.Set<String> | size |
8+
| test.kt:1:135:1:140 | values(...) | java.util.Map<String,String> | values |
9+
| test.kt:1:142:1:145 | size(...) | java.util.Collection<String> | size |
10+
| test.kt:1:153:1:159 | entrySet(...) | java.util.Map<String,String> | entrySet |
11+
| test.kt:1:161:1:164 | size(...) | java.util.Set<Entry<String,String>> | size |
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import java
2+
import semmle.code.java.Diagnostics
23

34
from MethodAccess ma
4-
select ma, ma.getCallee().toString()
5+
select ma, ma.getCallee().getDeclaringType().getQualifiedName(), ma.getCallee().getName()
6+
7+
query predicate diag(Diagnostic d) { any() }

0 commit comments

Comments
 (0)