Kotlin: Add suport for enum classes

This commit is contained in:
Ian Lynagh
2021-11-01 16:01:51 +00:00
parent 2b01c5d825
commit 81fd7c735a
5 changed files with 38 additions and 0 deletions

View File

@@ -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)

View File

@@ -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 |

View File

@@ -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)
}

View File

@@ -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 |

View File

@@ -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 |