mirror of
https://github.com/github/codeql.git
synced 2025-12-24 04:36:35 +01:00
Kotlin: Add suport for enum classes
This commit is contained in:
@@ -292,6 +292,7 @@ open class KotlinFileExtractor(
|
||||
// Leaving this intentionally empty. init blocks are extracted during class extraction.
|
||||
}
|
||||
is IrProperty -> extractProperty(declaration, parentId)
|
||||
is IrEnumEntry -> extractEnumEntry(declaration, parentId)
|
||||
else -> logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclaration: " + declaration.javaClass, declaration)
|
||||
}
|
||||
}
|
||||
@@ -978,6 +979,25 @@ class X {
|
||||
}
|
||||
}
|
||||
|
||||
private fun getEnumEntryLabel(ee: IrEnumEntry) : String {
|
||||
val parentId = useDeclarationParent(ee.parent)
|
||||
val label = "@\"field;{$parentId};${ee.name.asString()}\""
|
||||
return label
|
||||
}
|
||||
|
||||
fun useEnumEntry(ee: IrEnumEntry): Label<out DbField> {
|
||||
var label = getEnumEntryLabel(ee)
|
||||
val id: Label<DbField> = tw.getLabelFor(label)
|
||||
return id
|
||||
}
|
||||
|
||||
fun extractEnumEntry(ee: IrEnumEntry, parentId: Label<out DbReftype>) {
|
||||
val id = useEnumEntry(ee)
|
||||
val locId = tw.getLocation(ee)
|
||||
tw.writeFields(id, ee.name.asString(), parentId, parentId, id)
|
||||
tw.writeHasLocation(id, locId)
|
||||
}
|
||||
|
||||
fun extractBody(b: IrBody, callable: Label<out DbCallable>) {
|
||||
when(b) {
|
||||
is IrBlockBody -> extractBlockBody(b, callable, callable, 0)
|
||||
|
||||
@@ -6,3 +6,5 @@
|
||||
| classes.kt:17:1:18:1 | ClassFive | ClassFive |
|
||||
| classes.kt:28:1:30:1 | ClassSix | ClassSix |
|
||||
| classes.kt:34:1:47:1 | ClassSeven | ClassSeven |
|
||||
| classes.kt:49:1:51:1 | Direction | Direction |
|
||||
| classes.kt:53:1:57:1 | Color | Color |
|
||||
|
||||
@@ -46,3 +46,12 @@ class ClassSeven {
|
||||
}
|
||||
}
|
||||
|
||||
enum class Direction {
|
||||
NORTH, SOUTH, WEST, EAST
|
||||
}
|
||||
|
||||
enum class Color(val rgb: Int) {
|
||||
RED(0xFF0000),
|
||||
GREEN(0x00FF00),
|
||||
BLUE(0x0000FF)
|
||||
}
|
||||
|
||||
@@ -8,6 +8,8 @@ initBlocks
|
||||
| classes.kt:24:1:26:1 | <obinit> |
|
||||
| classes.kt:28:1:30:1 | <obinit> |
|
||||
| classes.kt:34:1:47:1 | <obinit> |
|
||||
| classes.kt:49:1:51:1 | <obinit> |
|
||||
| classes.kt:53:1:57:1 | <obinit> |
|
||||
initCall
|
||||
| classes.kt:2:1:2:18 | <obinit>(...) |
|
||||
| classes.kt:4:1:6:1 | <obinit>(...) |
|
||||
@@ -16,9 +18,12 @@ initCall
|
||||
| classes.kt:17:1:18:1 | <obinit>(...) |
|
||||
| classes.kt:28:1:30:1 | <obinit>(...) |
|
||||
| classes.kt:35:5:37:5 | <obinit>(...) |
|
||||
| classes.kt:49:1:51:1 | <obinit>(...) |
|
||||
| classes.kt:53:1:57:1 | <obinit>(...) |
|
||||
initExpressions
|
||||
| classes.kt:4:17:4:28 | ...=... | 0 |
|
||||
| classes.kt:5:5:5:18 | ...=... | 1 |
|
||||
| classes.kt:39:9:39:18 | f(...) | 0 |
|
||||
| classes.kt:42:5:42:18 | ...=... | 1 |
|
||||
| classes.kt:45:9:45:18 | f(...) | 2 |
|
||||
| classes.kt:53:18:53:29 | ...=... | 0 |
|
||||
|
||||
@@ -7,3 +7,5 @@
|
||||
| classes.kt:28:1:30:1 | ClassSix | classes.kt:20:1:22:1 | IF1 |
|
||||
| classes.kt:28:1:30:1 | ClassSix | classes.kt:24:1:26:1 | IF2 |
|
||||
| classes.kt:34:1:47:1 | ClassSeven | file://:0:0:0:0 | Object |
|
||||
| classes.kt:49:1:51:1 | Direction | file://:0:0:0:0 | Enum |
|
||||
| classes.kt:53:1:57:1 | Color | file://:0:0:0:0 | Enum |
|
||||
|
||||
Reference in New Issue
Block a user