diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt index 818343adf91..adaf5061e6c 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt @@ -1209,15 +1209,20 @@ open class KotlinUsesExtractor( * `parent` is null. */ fun getValueParameterLabel(vp: IrValueParameter, parent: Label?): String { - val parentId = parent ?: useDeclarationParent(vp.parent, false) - val idx = vp.index + val declarationParent = vp.parent + val parentId = parent ?: useDeclarationParent(declarationParent, false) + + val idx = if (declarationParent is IrFunction && declarationParent.extensionReceiverParameter != null) + // For extension functions increase the index to match what the java extractor sees: + vp.index + 1 + else + vp.index + if (idx < 0) { - val p = vp.parent - if (p !is IrFunction || p.extensionReceiverParameter != vp) { - // We're not extracting this and this@TYPE parameters of functions: - logger.error("Unexpected negative index for parameter") - } + // We're not extracting this and this@TYPE parameters of functions: + logger.error("Unexpected negative index for parameter") } + return "@\"params;{$parentId};$idx\"" } diff --git a/java/ql/test/kotlin/library-tests/extensions/DB-CHECK.expected b/java/ql/test/kotlin/library-tests/extensions/DB-CHECK.expected deleted file mode 100644 index a5762b1bae6..00000000000 --- a/java/ql/test/kotlin/library-tests/extensions/DB-CHECK.expected +++ /dev/null @@ -1,158 +0,0 @@ -[INVALID_KEY_SET] predicate params(@param id, @type typeid, int pos, @callable parentid, @param sourceid): The key set {parentid, pos} does not functionally determine all fields. -Here is a pair of tuples that agree on the key set but differ at index 0: -Tuple 1 in row 2: (87,42,0,44,87) -Tuple 2 in row 4: (90,42,0,44,90) - Relevant element: Tuple 1: id=87 - Full ID for 87: @"params;(44);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.someFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};0" - Relevant element: Tuple 2: id=90 - Full ID for 90: @"params;(44);-1". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.someFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};-1" - Relevant element: typeid=42 - Full ID for 42: @"class;SomeClass" - Relevant element: parentid=44 - Full ID for 44: @"callable;(40).someFun((42),(43))(16)". The ID may expand to @"callable;{@"class;ExtensionsKt"}.someFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}" - Relevant element: Tuple 1: sourceid=87 - Full ID for 87: @"params;(44);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.someFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};0" - Relevant element: Tuple 2: sourceid=90 - Full ID for 90: @"params;(44);-1". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.someFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};-1" -[INVALID_KEY_SET] predicate params(@param id, @type typeid, int pos, @callable parentid, @param sourceid): The key set {parentid, pos} does not functionally determine all fields. -Here is a pair of tuples that agree on the key set but differ at index 0: -Tuple 1 in row 3: (87,43,1,44,87) -Tuple 2 in row 31: (329,43,1,44,329) - Relevant element: Tuple 1: id=87 - Full ID for 87: @"params;(44);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.someFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};0" - Relevant element: Tuple 2: id=329 - Full ID for 329: @"params;(44);1". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.someFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};1" - Relevant element: typeid=43 - Full ID for 43: @"class;java.lang.String" - Relevant element: parentid=44 - Full ID for 44: @"callable;(40).someFun((42),(43))(16)". The ID may expand to @"callable;{@"class;ExtensionsKt"}.someFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}" - Relevant element: Tuple 1: sourceid=87 - Full ID for 87: @"params;(44);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.someFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};0" - Relevant element: Tuple 2: sourceid=329 - Full ID for 329: @"params;(44);1". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.someFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};1" -[INVALID_KEY_SET] predicate params(@param id, @type typeid, int pos, @callable parentid, @param sourceid): The key set {parentid, pos} does not functionally determine all fields. -Here is a pair of tuples that agree on the key set but differ at index 0: -Tuple 1 in row 6: (99,72,0,97,99) -Tuple 2 in row 7: (102,72,0,97,102) - Relevant element: Tuple 1: id=99 - Full ID for 99: @"params;(97);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.anotherFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}"};0" - Relevant element: Tuple 2: id=102 - Full ID for 102: @"params;(97);-1". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.anotherFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}"};-1" - Relevant element: typeid=72 - Full ID for 72: @"class;AnotherClass" - Relevant element: parentid=97 - Full ID for 97: @"callable;(40).anotherFun((72),(43))(16)". The ID may expand to @"callable;{@"class;ExtensionsKt"}.anotherFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}" - Relevant element: Tuple 1: sourceid=99 - Full ID for 99: @"params;(97);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.anotherFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}"};0" - Relevant element: Tuple 2: sourceid=102 - Full ID for 102: @"params;(97);-1". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.anotherFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}"};-1" -[INVALID_KEY_SET] predicate params(@param id, @type typeid, int pos, @callable parentid, @param sourceid): The key set {parentid, pos} does not functionally determine all fields. -Here is a pair of tuples that agree on the key set but differ at index 0: -Tuple 1 in row 5: (99,43,1,97,99) -Tuple 2 in row 30: (326,43,1,97,326) - Relevant element: Tuple 1: id=99 - Full ID for 99: @"params;(97);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.anotherFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}"};0" - Relevant element: Tuple 2: id=326 - Full ID for 326: @"params;(97);1". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.anotherFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}"};1" - Relevant element: typeid=43 - Full ID for 43: @"class;java.lang.String" - Relevant element: parentid=97 - Full ID for 97: @"callable;(40).anotherFun((72),(43))(16)". The ID may expand to @"callable;{@"class;ExtensionsKt"}.anotherFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}" - Relevant element: Tuple 1: sourceid=99 - Full ID for 99: @"params;(97);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.anotherFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}"};0" - Relevant element: Tuple 2: sourceid=326 - Full ID for 326: @"params;(97);1". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.anotherFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}"};1" -[INVALID_KEY_SET] predicate params(@param id, @type typeid, int pos, @callable parentid, @param sourceid): The key set {parentid, pos} does not functionally determine all fields. -Here is a pair of tuples that agree on the key set but differ at index 0: -Tuple 1 in row 8: (110,42,0,108,110) -Tuple 2 in row 10: (113,42,0,108,113) - Relevant element: Tuple 1: id=110 - Full ID for 110: @"params;(108);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.bothFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};0" - Relevant element: Tuple 2: id=113 - Full ID for 113: @"params;(108);-1". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.bothFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};-1" - Relevant element: typeid=42 - Full ID for 42: @"class;SomeClass" - Relevant element: parentid=108 - Full ID for 108: @"callable;(40).bothFun((42),(43))(16)". The ID may expand to @"callable;{@"class;ExtensionsKt"}.bothFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}" - Relevant element: Tuple 1: sourceid=110 - Full ID for 110: @"params;(108);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.bothFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};0" - Relevant element: Tuple 2: sourceid=113 - Full ID for 113: @"params;(108);-1". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.bothFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};-1" -[INVALID_KEY_SET] predicate params(@param id, @type typeid, int pos, @callable parentid, @param sourceid): More errors, not displayed. There are at least 14 pairs of tuples not satisfying the key dependency for a relation of size 10480 -[INVALID_KEY] predicate params(@param id, @type typeid, int pos, @callable parentid, @param sourceid): The key set {id} does not functionally determine all fields. -Here is a pair of tuples that agree on the key set but differ at index 1: -Tuple 1 in row 2: (87,42,0,44,87) -Tuple 2 in row 3: (87,43,1,44,87) - Relevant element: id=87 - Full ID for 87: @"params;(44);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.someFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};0" - Relevant element: Tuple 1: typeid=42 - Full ID for 42: @"class;SomeClass" - Relevant element: Tuple 2: typeid=43 - Full ID for 43: @"class;java.lang.String" - Relevant element: parentid=44 - Full ID for 44: @"callable;(40).someFun((42),(43))(16)". The ID may expand to @"callable;{@"class;ExtensionsKt"}.someFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}" - Relevant element: sourceid=87 - Full ID for 87: @"params;(44);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.someFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};0" -[INVALID_KEY] predicate params(@param id, @type typeid, int pos, @callable parentid, @param sourceid): The key set {id} does not functionally determine all fields. -Here is a pair of tuples that agree on the key set but differ at index 1: -Tuple 1 in row 5: (99,43,1,97,99) -Tuple 2 in row 6: (99,72,0,97,99) - Relevant element: id=99 - Full ID for 99: @"params;(97);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.anotherFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}"};0" - Relevant element: Tuple 1: typeid=43 - Full ID for 43: @"class;java.lang.String" - Relevant element: Tuple 2: typeid=72 - Full ID for 72: @"class;AnotherClass" - Relevant element: parentid=97 - Full ID for 97: @"callable;(40).anotherFun((72),(43))(16)". The ID may expand to @"callable;{@"class;ExtensionsKt"}.anotherFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}" - Relevant element: sourceid=99 - Full ID for 99: @"params;(97);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.anotherFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}"};0" -[INVALID_KEY] predicate params(@param id, @type typeid, int pos, @callable parentid, @param sourceid): The key set {id} does not functionally determine all fields. -Here is a pair of tuples that agree on the key set but differ at index 1: -Tuple 1 in row 8: (110,42,0,108,110) -Tuple 2 in row 9: (110,43,1,108,110) - Relevant element: id=110 - Full ID for 110: @"params;(108);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.bothFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};0" - Relevant element: Tuple 1: typeid=42 - Full ID for 42: @"class;SomeClass" - Relevant element: Tuple 2: typeid=43 - Full ID for 43: @"class;java.lang.String" - Relevant element: parentid=108 - Full ID for 108: @"callable;(40).bothFun((42),(43))(16)". The ID may expand to @"callable;{@"class;ExtensionsKt"}.bothFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}" - Relevant element: sourceid=110 - Full ID for 110: @"params;(108);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.bothFun({@"class;SomeClass"},{@"class;java.lang.String"}){@"type;void"}"};0" -[INVALID_KEY] predicate params(@param id, @type typeid, int pos, @callable parentid, @param sourceid): The key set {id} does not functionally determine all fields. -Here is a pair of tuples that agree on the key set but differ at index 1: -Tuple 1 in row 11: (121,43,1,119,121) -Tuple 2 in row 12: (121,72,0,119,121) - Relevant element: id=121 - Full ID for 121: @"params;(119);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.bothFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}"};0" - Relevant element: Tuple 1: typeid=43 - Full ID for 43: @"class;java.lang.String" - Relevant element: Tuple 2: typeid=72 - Full ID for 72: @"class;AnotherClass" - Relevant element: parentid=119 - Full ID for 119: @"callable;(40).bothFun((72),(43))(16)". The ID may expand to @"callable;{@"class;ExtensionsKt"}.bothFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}" - Relevant element: sourceid=121 - Full ID for 121: @"params;(119);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.bothFun({@"class;AnotherClass"},{@"class;java.lang.String"}){@"type;void"}"};0" -[INVALID_KEY] predicate params(@param id, @type typeid, int pos, @callable parentid, @param sourceid): The key set {id} does not functionally determine all fields. -Here is a pair of tuples that agree on the key set but differ at index 1: -Tuple 1 in row 14: (134,42,0,132,134) -Tuple 2 in row 15: (134,130,1,132,134) - Relevant element: Tuple 1: id=134 - Full ID for 134: @"params;(132);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.bothFunDiffTypes({@"class;SomeClass"},{@"type;int"}){@"type;int"}"};0" - Relevant element: Tuple 2: id=134 - Full ID for 134: @"params;(132);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.bothFunDiffTypes({@"class;SomeClass"},{@"type;int"}){@"type;int"}"};0" - Relevant element: Tuple 1: typeid=42 - Full ID for 42: @"class;SomeClass" - Relevant element: Tuple 2: typeid=130 - Full ID for 130: @"type;int" - Relevant element: Tuple 1: parentid=132 - Full ID for 132: @"callable;(40).bothFunDiffTypes((42),(130))(130)". The ID may expand to @"callable;{@"class;ExtensionsKt"}.bothFunDiffTypes({@"class;SomeClass"},{@"type;int"}){@"type;int"}" - Relevant element: Tuple 2: parentid=132 - Full ID for 132: @"callable;(40).bothFunDiffTypes((42),(130))(130)". The ID may expand to @"callable;{@"class;ExtensionsKt"}.bothFunDiffTypes({@"class;SomeClass"},{@"type;int"}){@"type;int"}" - Relevant element: Tuple 1: sourceid=134 - Full ID for 134: @"params;(132);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.bothFunDiffTypes({@"class;SomeClass"},{@"type;int"}){@"type;int"}"};0" - Relevant element: Tuple 2: sourceid=134 - Full ID for 134: @"params;(132);0". The ID may expand to @"params;{@"callable;{@"class;ExtensionsKt"}.bothFunDiffTypes({@"class;SomeClass"},{@"type;int"}){@"type;int"}"};0" -[INVALID_KEY] predicate params(@param id, @type typeid, int pos, @callable parentid, @param sourceid): More errors, not displayed. There are at least 7 pairs of tuples not satisfying the key dependency for a relation of size 10480 diff --git a/java/ql/test/kotlin/library-tests/extensions/parameters.expected b/java/ql/test/kotlin/library-tests/extensions/parameters.expected index 78301a3194e..5cb7e0986d3 100644 --- a/java/ql/test/kotlin/library-tests/extensions/parameters.expected +++ b/java/ql/test/kotlin/library-tests/extensions/parameters.expected @@ -3,76 +3,47 @@ parametersWithArgs | extensions.kt:6:28:6:37 | p1 | 0 | extensions.kt:25:40:25:42 | foo | | extensions.kt:9:5:9:13 | | 0 | A.java:3:30:3:44 | new SomeClass(...) | | extensions.kt:9:5:9:13 | | 0 | extensions.kt:22:5:22:15 | new SomeClass(...) | -| extensions.kt:9:23:9:32 | p1 | 0 | A.java:3:30:3:44 | new SomeClass(...) | -| extensions.kt:9:23:9:32 | p1 | 0 | extensions.kt:22:5:22:15 | new SomeClass(...) | | extensions.kt:9:23:9:32 | p1 | 1 | A.java:3:47:3:48 | "" | | extensions.kt:9:23:9:32 | p1 | 1 | extensions.kt:22:26:22:28 | foo | | extensions.kt:10:5:10:16 | | 0 | extensions.kt:26:5:26:18 | new AnotherClass(...) | -| extensions.kt:10:29:10:38 | p1 | 0 | extensions.kt:26:5:26:18 | new AnotherClass(...) | | extensions.kt:10:29:10:38 | p1 | 1 | extensions.kt:26:32:26:34 | foo | | extensions.kt:12:5:12:13 | | 0 | extensions.kt:23:5:23:15 | new SomeClass(...) | -| extensions.kt:12:23:12:32 | p1 | 0 | extensions.kt:23:5:23:15 | new SomeClass(...) | | extensions.kt:12:23:12:32 | p1 | 1 | extensions.kt:23:26:23:28 | foo | | extensions.kt:13:5:13:16 | | 0 | extensions.kt:27:5:27:18 | new AnotherClass(...) | -| extensions.kt:13:26:13:35 | p1 | 0 | extensions.kt:27:5:27:18 | new AnotherClass(...) | | extensions.kt:13:26:13:35 | p1 | 1 | extensions.kt:27:29:27:31 | foo | | extensions.kt:15:5:15:13 | | 0 | extensions.kt:24:5:24:15 | new SomeClass(...) | -| extensions.kt:15:32:15:38 | p1 | 0 | extensions.kt:24:5:24:15 | new SomeClass(...) | | extensions.kt:15:32:15:38 | p1 | 1 | extensions.kt:24:34:24:34 | 1 | | extensions.kt:16:5:16:16 | | 0 | extensions.kt:28:5:28:18 | new AnotherClass(...) | -| extensions.kt:16:35:16:44 | p1 | 0 | extensions.kt:28:5:28:18 | new AnotherClass(...) | | extensions.kt:16:35:16:44 | p1 | 1 | extensions.kt:28:38:28:40 | foo | | extensions.kt:18:5:18:10 | | 0 | extensions.kt:29:6:29:15 | someString | -| extensions.kt:18:16:18:25 | p1 | 0 | extensions.kt:29:6:29:15 | someString | | extensions.kt:18:16:18:25 | p1 | 1 | extensions.kt:29:23:29:25 | foo | | extensions.kt:30:9:30:14 | | 0 | extensions.kt:31:6:31:15 | someString | | extensions.kt:30:20:30:29 | p1 | 1 | extensions.kt:31:23:31:30 | bazParam | extensionParameter | extensions.kt:9:5:9:13 | | -| extensions.kt:9:23:9:32 | p1 | | extensions.kt:10:5:10:16 | | -| extensions.kt:10:29:10:38 | p1 | | extensions.kt:12:5:12:13 | | -| extensions.kt:12:23:12:32 | p1 | | extensions.kt:13:5:13:16 | | -| extensions.kt:13:26:13:35 | p1 | | extensions.kt:15:5:15:13 | | -| extensions.kt:15:32:15:38 | p1 | | extensions.kt:16:5:16:16 | | -| extensions.kt:16:35:16:44 | p1 | | extensions.kt:18:5:18:10 | | -| extensions.kt:18:16:18:25 | p1 | | extensions.kt:30:9:30:14 | | #select | extensions.kt:3:5:3:38 | someClassMethod | extensions.kt:3:25:3:34 | p1 | 0 | | extensions.kt:6:5:6:41 | anotherClassMethod | extensions.kt:6:28:6:37 | p1 | 0 | | extensions.kt:9:1:9:36 | someFun | extensions.kt:9:5:9:13 | | 0 | -| extensions.kt:9:1:9:36 | someFun | extensions.kt:9:23:9:32 | p1 | 0 | | extensions.kt:9:1:9:36 | someFun | extensions.kt:9:23:9:32 | p1 | 1 | -| extensions.kt:9:1:9:36 | someFun | file://:0:0:0:0 | p1 | 1 | | extensions.kt:10:1:10:42 | anotherFun | extensions.kt:10:5:10:16 | | 0 | -| extensions.kt:10:1:10:42 | anotherFun | extensions.kt:10:29:10:38 | p1 | 0 | | extensions.kt:10:1:10:42 | anotherFun | extensions.kt:10:29:10:38 | p1 | 1 | -| extensions.kt:10:1:10:42 | anotherFun | file://:0:0:0:0 | p1 | 1 | | extensions.kt:12:1:12:36 | bothFun | extensions.kt:12:5:12:13 | | 0 | -| extensions.kt:12:1:12:36 | bothFun | extensions.kt:12:23:12:32 | p1 | 0 | | extensions.kt:12:1:12:36 | bothFun | extensions.kt:12:23:12:32 | p1 | 1 | -| extensions.kt:12:1:12:36 | bothFun | file://:0:0:0:0 | p1 | 1 | | extensions.kt:13:1:13:39 | bothFun | extensions.kt:13:5:13:16 | | 0 | -| extensions.kt:13:1:13:39 | bothFun | extensions.kt:13:26:13:35 | p1 | 0 | | extensions.kt:13:1:13:39 | bothFun | extensions.kt:13:26:13:35 | p1 | 1 | -| extensions.kt:13:1:13:39 | bothFun | file://:0:0:0:0 | p1 | 1 | | extensions.kt:15:1:15:57 | bothFunDiffTypes | extensions.kt:15:5:15:13 | | 0 | -| extensions.kt:15:1:15:57 | bothFunDiffTypes | extensions.kt:15:32:15:38 | p1 | 0 | | extensions.kt:15:1:15:57 | bothFunDiffTypes | extensions.kt:15:32:15:38 | p1 | 1 | -| extensions.kt:15:1:15:57 | bothFunDiffTypes | file://:0:0:0:0 | p1 | 1 | | extensions.kt:16:1:16:70 | bothFunDiffTypes | extensions.kt:16:5:16:16 | | 0 | -| extensions.kt:16:1:16:70 | bothFunDiffTypes | extensions.kt:16:35:16:44 | p1 | 0 | | extensions.kt:16:1:16:70 | bothFunDiffTypes | extensions.kt:16:35:16:44 | p1 | 1 | -| extensions.kt:16:1:16:70 | bothFunDiffTypes | file://:0:0:0:0 | p1 | 1 | | extensions.kt:18:1:18:51 | bar | extensions.kt:18:5:18:10 | | 0 | -| extensions.kt:18:1:18:51 | bar | extensions.kt:18:16:18:25 | p1 | 0 | | extensions.kt:18:1:18:51 | bar | extensions.kt:18:16:18:25 | p1 | 1 | -| extensions.kt:18:1:18:51 | bar | file://:0:0:0:0 | p1 | 1 | | extensions.kt:30:5:30:55 | baz | extensions.kt:30:9:30:14 | | 0 | | extensions.kt:30:5:30:55 | baz | extensions.kt:30:20:30:29 | p1 | 1 |