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

Skip to content

Commit 3bfc93d

Browse files
tamasvajkigfoo
authored andcommitted
Add ExtensionMethod class
1 parent 7d8b6ba commit 3bfc93d

5 files changed

Lines changed: 22 additions & 2 deletions

File tree

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
462462
val extReceiver = f.extensionReceiverParameter
463463
if (extReceiver != null) {
464464
extractValueParameter(extReceiver, id, index--)
465+
466+
tw.writeKtExtensionFunctions(id)
465467
}
466468

467469
val dispReceiver = f.dispatchReceiverParameter

java/ql/lib/config/semmlecode.dbscheme

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,3 +1059,7 @@ ktBreakContinueTarget(
10591059
unique int id: @breakcontinuestmt ref,
10601060
int target: @ktloopstmt ref
10611061
)
1062+
1063+
ktExtensionFunctions(
1064+
unique int id: @method ref
1065+
)

java/ql/lib/semmle/code/java/Member.qll

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,3 +670,13 @@ class Field extends Member, ExprParent, @field, Variable {
670670
class InstanceField extends Field {
671671
InstanceField() { not this.isStatic() }
672672
}
673+
674+
/** A Kotlin extension function. */
675+
class ExtensionMethod extends Method {
676+
ExtensionMethod() { ktExtensionFunctions(this) }
677+
678+
/** Gets the type being extended by this method. */
679+
Type getExtendedType() { result = getParameter(-1).getType() }
680+
681+
override string getAPrimaryQlClass() { result = "ExtensionMethod" }
682+
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
methods
12
| methods2.kt:4:1:5:1 | fooBarTopLevelMethod |
23
| methods2.kt:7:1:10:1 | <init> |
34
| methods2.kt:7:1:10:1 | equals |
@@ -17,3 +18,6 @@
1718
| methods.kt:5:1:13:1 | toString |
1819
| methods.kt:6:5:7:5 | classMethod |
1920
| methods.kt:9:5:12:5 | anotherClassMethod |
21+
extensions
22+
| methods3.kt:3:1:3:39 | fooBarTopLevelMethod | file://:0:0:0:0 | int |
23+
| methods3.kt:6:5:6:43 | fooBarTopLevelMethod | file://:0:0:0:0 | int |
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import java
22

3-
from Method m
4-
select m
3+
query predicate methods(Method m) { any() }
54

5+
query predicate extensions(ExtensionMethod m, Type t) { m.getExtendedType() = t }

0 commit comments

Comments
 (0)