Kotlin: Add test for extension $default functions

This commit is contained in:
Tamas Vajk
2022-12-07 10:08:01 +01:00
parent 387a673c10
commit 43f23801f5
5 changed files with 74 additions and 16 deletions

View File

@@ -293,12 +293,47 @@
| methods2.kt:8:5:9:5 | Unit | TypeAccess |
| methods2.kt:8:27:8:32 | int | TypeAccess |
| methods2.kt:8:35:8:40 | int | TypeAccess |
| methods3.kt:3:1:3:42 | Unit | TypeAccess |
| methods3.kt:3:5:3:7 | int | TypeAccess |
| methods3.kt:3:33:3:38 | int | TypeAccess |
| methods3.kt:6:5:6:46 | Unit | TypeAccess |
| methods3.kt:6:9:6:11 | int | TypeAccess |
| methods3.kt:6:37:6:42 | int | TypeAccess |
| methods3.kt:3:1:3:49 | 0 | IntegerLiteral |
| methods3.kt:3:1:3:49 | 1 | IntegerLiteral |
| methods3.kt:3:1:3:49 | ... & ... | AndBitwiseExpr |
| methods3.kt:3:1:3:49 | ... == ... | EQExpr |
| methods3.kt:3:1:3:49 | ...=... | AssignExpr |
| methods3.kt:3:1:3:49 | Methods3Kt | TypeAccess |
| methods3.kt:3:1:3:49 | Object | TypeAccess |
| methods3.kt:3:1:3:49 | String | TypeAccess |
| methods3.kt:3:1:3:49 | Unit | TypeAccess |
| methods3.kt:3:1:3:49 | Unit | TypeAccess |
| 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 | VarAccess |
| 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:5:3:10 | String | TypeAccess |
| methods3.kt:3:36:3:45 | int | TypeAccess |
| methods3.kt:3:45:3:45 | 1 | IntegerLiteral |
| methods3.kt:6:5:6:45 | 0 | IntegerLiteral |
| methods3.kt:6:5:6:45 | 1 | IntegerLiteral |
| methods3.kt:6:5:6:45 | ... & ... | AndBitwiseExpr |
| methods3.kt:6:5:6:45 | ... == ... | EQExpr |
| methods3.kt:6:5:6:45 | ...=... | AssignExpr |
| methods3.kt:6:5:6:45 | Class3 | TypeAccess |
| methods3.kt:6:5:6:45 | Object | TypeAccess |
| methods3.kt:6:5:6:45 | String | TypeAccess |
| methods3.kt:6:5:6:45 | Unit | TypeAccess |
| methods3.kt:6:5:6:45 | Unit | TypeAccess |
| methods3.kt:6:5:6:45 | fooBarMethodExt(...) | MethodAccess |
| 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 | VarAccess |
| 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:9:6:14 | String | TypeAccess |
| methods3.kt:6:32:6:41 | int | TypeAccess |
| methods3.kt:6:41:6:41 | 1 | IntegerLiteral |
| methods4.kt:7:5:7:34 | Unit | TypeAccess |
| methods4.kt:7:11:7:29 | InsideNestedTest | TypeAccess |
| methods5.kt:3:1:11:1 | Unit | TypeAccess |

View File

@@ -38,8 +38,10 @@ methods
| enumClass.kt:8:3:11:4 | VAL | enumClass.kt:10:14:10:42 | g | g(int) | override, public | |
| methods2.kt:0:0:0:0 | Methods2Kt | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | fooBarTopLevelMethod(int,int) | final, public, static | |
| methods2.kt:7:1:10:1 | Class2 | methods2.kt:8:5:9:5 | fooBarClassMethod | fooBarClassMethod(int,int) | final, public | |
| methods3.kt:0:0:0:0 | Methods3Kt | methods3.kt:3:1:3:42 | fooBarTopLevelMethodExt | fooBarTopLevelMethodExt(int,int) | final, public, static | |
| methods3.kt:5:1:7:1 | Class3 | methods3.kt:6:5:6:46 | fooBarTopLevelMethodExt | fooBarTopLevelMethodExt(int,int) | final, public | |
| methods3.kt:0:0:0:0 | Methods3Kt | methods3.kt:3:1:3:49 | fooBarTopLevelMethodExt | fooBarTopLevelMethodExt(java.lang.String,int) | final, public, static | |
| methods3.kt:0:0:0:0 | Methods3Kt | methods3.kt:3:1:3:49 | fooBarTopLevelMethodExt$default | fooBarTopLevelMethodExt$default(java.lang.String,int,int,java.lang.Object) | public, static | Compiler generated |
| methods3.kt:5:1:7:1 | Class3 | methods3.kt:6:5:6:45 | fooBarMethodExt | fooBarMethodExt(java.lang.String,int) | final, public | |
| methods3.kt:5:1:7:1 | Class3 | methods3.kt:6:5:6:45 | fooBarMethodExt$default | fooBarMethodExt$default(java.lang.String,foo.bar.Class3,int,int,java.lang.Object) | public, static | Compiler generated |
| methods4.kt:5:3:9:3 | InsideNestedTest | methods4.kt:7:5:7:34 | m | m(foo.bar.NestedTest.InsideNestedTest) | final, public | |
| methods5.kt:0:0:0:0 | Methods5Kt | methods5.kt:3:1:11:1 | x | x() | final, public, static | |
| methods5.kt:5:3:5:27 | | methods5.kt:5:3:5:27 | a | a(int) | final, public | |
@@ -74,6 +76,9 @@ constructors
| methods5.kt:13:1:13:14 | C1 | methods5.kt:13:1:13:14 | C1 | C1() |
| methods.kt:5:1:20:1 | Class | methods.kt:5:1:20:1 | Class | Class() |
extensions
| methods3.kt:3:1:3:42 | fooBarTopLevelMethodExt | file://:0:0:0:0 | int |
| methods3.kt:6:5:6:46 | fooBarTopLevelMethodExt | file://:0:0:0:0 | int |
| methods3.kt:3:1:3:49 | fooBarTopLevelMethodExt | file:///modules/java.base/java/lang/String.class:0:0:0:0 | String |
| methods3.kt:6:5:6:45 | fooBarMethodExt | file:///modules/java.base/java/lang/String.class:0:0:0:0 | String |
| methods5.kt:9:3:9:32 | f1 | file:///!unknown-binary-location/foo/bar/C1.class:0:0:0:0 | C1<T1> |
extensionsMismatch
| methods3.kt:3:1:3:49 | fooBarTopLevelMethodExt | methods3.kt:3:1:3:49 | fooBarTopLevelMethodExt$default |
| methods3.kt:6:5:6:45 | fooBarMethodExt | methods3.kt:6:5:6:45 | fooBarMethodExt$default |

View File

@@ -17,3 +17,12 @@ query predicate constructors(RefType declType, Constructor c, string signature)
}
query predicate extensions(ExtensionMethod m, Type t) { m.getExtendedType() = t and m.fromSource() }
query predicate extensionsMismatch(Method src, Method def) {
src.getKotlinParameterDefaultsProxy() = def and
(
src instanceof ExtensionMethod and not def instanceof ExtensionMethod
or
def instanceof ExtensionMethod and not src instanceof ExtensionMethod
)
}

View File

@@ -1,7 +1,7 @@
package foo.bar
fun Int.fooBarTopLevelMethodExt(x: Int) {}
fun String.fooBarTopLevelMethodExt(x: Int = 1) {}
class Class3 {
fun Int.fooBarTopLevelMethodExt(x: Int) {}
fun String.fooBarMethodExt(x: Int = 1) {}
}

View File

@@ -32,10 +32,19 @@
| methods2.kt:4:1:5:1 | fooBarTopLevelMethod | methods2.kt:4:34:4:39 | y | 1 |
| methods2.kt:8:5:9:5 | fooBarClassMethod | methods2.kt:8:27:8:32 | x | 0 |
| methods2.kt:8:5:9:5 | fooBarClassMethod | methods2.kt:8:35:8:40 | y | 1 |
| methods3.kt:3:1:3:42 | fooBarTopLevelMethodExt | methods3.kt:3:5:3:7 | <this> | 0 |
| methods3.kt:3:1:3:42 | fooBarTopLevelMethodExt | methods3.kt:3:33:3:38 | x | 1 |
| methods3.kt:6:5:6:46 | fooBarTopLevelMethodExt | methods3.kt:6:9:6:11 | <this> | 0 |
| methods3.kt:6:5:6:46 | fooBarTopLevelMethodExt | methods3.kt:6:37:6:42 | x | 1 |
| methods3.kt:3:1:3:49 | fooBarTopLevelMethodExt | methods3.kt:3:5:3:10 | <this> | 0 |
| methods3.kt:3:1:3:49 | fooBarTopLevelMethodExt | methods3.kt:3:36:3:45 | x | 1 |
| methods3.kt:3:1:3:49 | fooBarTopLevelMethodExt$default | methods3.kt:3:1:3:49 | p0 | 0 |
| methods3.kt:3:1:3:49 | fooBarTopLevelMethodExt$default | methods3.kt:3:1:3:49 | p1 | 1 |
| methods3.kt:3:1:3:49 | fooBarTopLevelMethodExt$default | methods3.kt:3:1:3:49 | p2 | 2 |
| methods3.kt:3:1:3:49 | fooBarTopLevelMethodExt$default | methods3.kt:3:1:3:49 | p3 | 3 |
| methods3.kt:6:5:6:45 | fooBarMethodExt | methods3.kt:6:9:6:14 | <this> | 0 |
| methods3.kt:6:5:6:45 | fooBarMethodExt | methods3.kt:6:32:6:41 | x | 1 |
| methods3.kt:6:5:6:45 | fooBarMethodExt$default | methods3.kt:6:5:6:45 | p0 | 0 |
| methods3.kt:6:5:6:45 | fooBarMethodExt$default | methods3.kt:6:5:6:45 | p1 | 1 |
| methods3.kt:6:5:6:45 | fooBarMethodExt$default | methods3.kt:6:5:6:45 | p2 | 2 |
| methods3.kt:6:5:6:45 | fooBarMethodExt$default | methods3.kt:6:5:6:45 | p3 | 3 |
| methods3.kt:6:5:6:45 | fooBarMethodExt$default | methods3.kt:6:5:6:45 | p4 | 4 |
| methods4.kt:7:5:7:34 | m | methods4.kt:7:11:7:29 | x | 0 |
| methods5.kt:5:3:5:27 | a | methods5.kt:5:13:5:18 | i | 0 |
| methods5.kt:9:3:9:32 | f1 | methods5.kt:9:12:9:17 | <this> | 0 |