Skip to content

Commit dfdfd39

Browse files
authored
Merge pull request github#10732 from smowton/smowton/fix/kotlin-enum-corresponding-classes
Koltin: Extract the corresponding classes of enum entries
2 parents b597896 + 2df1d63 commit dfdfd39

File tree

6 files changed

+65
-3
lines changed

6 files changed

+65
-3
lines changed

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ open class KotlinFileExtractor(
155155
is IrEnumEntry -> {
156156
val parentId = useDeclarationParent(declaration.parent, false)?.cast<DbReftype>()
157157
if (parentId != null) {
158-
extractEnumEntry(declaration, parentId, extractFunctionBodies)
158+
extractEnumEntry(declaration, parentId, extractPrivateMembers, extractFunctionBodies)
159159
}
160160
Unit
161161
}
@@ -1254,7 +1254,7 @@ open class KotlinFileExtractor(
12541254
}
12551255
}
12561256

1257-
private fun extractEnumEntry(ee: IrEnumEntry, parentId: Label<out DbReftype>, extractTypeAccess: Boolean) {
1257+
private fun extractEnumEntry(ee: IrEnumEntry, parentId: Label<out DbReftype>, extractPrivateMembers: Boolean, extractFunctionBodies: Boolean) {
12581258
with("enum entry", ee) {
12591259
DeclarationStackAdjuster(ee).use {
12601260
val id = useEnumEntry(ee)
@@ -1265,14 +1265,18 @@ open class KotlinFileExtractor(
12651265
tw.writeHasLocation(id, locId)
12661266
tw.writeIsEnumConst(id)
12671267

1268-
if (extractTypeAccess) {
1268+
if (extractFunctionBodies) {
12691269
val fieldDeclarationId = tw.getFreshIdLabel<DbFielddecl>()
12701270
tw.writeFielddecls(fieldDeclarationId, parentId)
12711271
tw.writeFieldDeclaredIn(id, fieldDeclarationId, 0)
12721272
tw.writeHasLocation(fieldDeclarationId, locId)
12731273

12741274
extractTypeAccess(type, locId, fieldDeclarationId, 0)
12751275
}
1276+
1277+
ee.correspondingClass?.let {
1278+
extractDeclaration(it, extractPrivateMembers, extractFunctionBodies)
1279+
}
12761280
}
12771281
}
12781282
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
| clinit.kt:0:0:0:0 | <clinit> | file://:0:0:0:0 | void |
22
| enumClass.kt:0:0:0:0 | <clinit> | file://:0:0:0:0 | void |
3+
| enumClass.kt:0:0:0:0 | <clinit> | file://:0:0:0:0 | void |

java/ql/test/kotlin/library-tests/methods/enumClass.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,15 @@ enum class EnumClass(val v: Int) {
22
enum1(1),
33
enum2(1)
44
}
5+
6+
enum class EnumWithFunctions {
7+
8+
VAL {
9+
override fun f(i: Int) = i
10+
override fun g(i: Int) = this.f(i) + i
11+
};
12+
13+
abstract fun f(i: Int): Int
14+
abstract fun g(i: Int): Int
15+
16+
}

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,10 @@
226226
| enumClass.kt:0:0:0:0 | EnumClass | TypeAccess |
227227
| enumClass.kt:0:0:0:0 | EnumClass | TypeAccess |
228228
| enumClass.kt:0:0:0:0 | EnumClass[] | TypeAccess |
229+
| enumClass.kt:0:0:0:0 | EnumWithFunctions | TypeAccess |
230+
| enumClass.kt:0:0:0:0 | EnumWithFunctions | TypeAccess |
231+
| enumClass.kt:0:0:0:0 | EnumWithFunctions[] | TypeAccess |
232+
| enumClass.kt:0:0:0:0 | String | TypeAccess |
229233
| enumClass.kt:0:0:0:0 | String | TypeAccess |
230234
| enumClass.kt:1:1:4:1 | Enum<EnumClass> | TypeAccess |
231235
| enumClass.kt:1:1:4:1 | EnumClass | TypeAccess |
@@ -252,6 +256,33 @@
252256
| enumClass.kt:3:5:3:12 | EnumClass.enum2 | VarAccess |
253257
| enumClass.kt:3:5:3:12 | new EnumClass(...) | ClassInstanceExpr |
254258
| enumClass.kt:3:11:3:11 | 1 | IntegerLiteral |
259+
| enumClass.kt:6:1:16:1 | Enum<EnumWithFunctions> | TypeAccess |
260+
| enumClass.kt:6:1:16:1 | EnumWithFunctions | TypeAccess |
261+
| enumClass.kt:6:1:16:1 | new Enum(...) | ClassInstanceExpr |
262+
| enumClass.kt:8:3:11:4 | ...=... | KtInitializerAssignExpr |
263+
| enumClass.kt:8:3:11:4 | <implicit coercion to unit> | ImplicitCoercionToUnitExpr |
264+
| enumClass.kt:8:3:11:4 | EnumWithFunctions | TypeAccess |
265+
| enumClass.kt:8:3:11:4 | EnumWithFunctions | TypeAccess |
266+
| enumClass.kt:8:3:11:4 | EnumWithFunctions | TypeAccess |
267+
| enumClass.kt:8:3:11:4 | EnumWithFunctions.VAL | VarAccess |
268+
| enumClass.kt:8:3:11:4 | Unit | TypeAccess |
269+
| enumClass.kt:8:3:11:4 | VAL | TypeAccess |
270+
| enumClass.kt:8:3:11:4 | new EnumWithFunctions(...) | ClassInstanceExpr |
271+
| enumClass.kt:8:3:11:4 | new VAL(...) | ClassInstanceExpr |
272+
| enumClass.kt:9:14:9:30 | int | TypeAccess |
273+
| enumClass.kt:9:20:9:25 | int | TypeAccess |
274+
| enumClass.kt:9:30:9:30 | i | VarAccess |
275+
| enumClass.kt:10:14:10:42 | int | TypeAccess |
276+
| enumClass.kt:10:20:10:25 | int | TypeAccess |
277+
| enumClass.kt:10:30:10:33 | this | ThisAccess |
278+
| enumClass.kt:10:30:10:42 | ... + ... | AddExpr |
279+
| enumClass.kt:10:35:10:38 | f(...) | MethodAccess |
280+
| enumClass.kt:10:37:10:37 | i | VarAccess |
281+
| enumClass.kt:10:42:10:42 | i | VarAccess |
282+
| enumClass.kt:13:12:13:29 | int | TypeAccess |
283+
| enumClass.kt:13:18:13:23 | int | TypeAccess |
284+
| enumClass.kt:14:12:14:29 | int | TypeAccess |
285+
| enumClass.kt:14:18:14:23 | int | TypeAccess |
255286
| methods2.kt:4:1:5:1 | Unit | TypeAccess |
256287
| methods2.kt:4:26:4:31 | int | TypeAccess |
257288
| methods2.kt:4:34:4:39 | int | TypeAccess |

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ methods
2929
| enumClass.kt:1:1:4:1 | EnumClass | enumClass.kt:0:0:0:0 | valueOf | valueOf(java.lang.String) | public, static | Compiler generated |
3030
| enumClass.kt:1:1:4:1 | EnumClass | enumClass.kt:0:0:0:0 | values | values() | public, static | Compiler generated |
3131
| enumClass.kt:1:1:4:1 | EnumClass | enumClass.kt:1:22:1:31 | getV | getV() | public | Compiler generated |
32+
| enumClass.kt:6:1:16:1 | EnumWithFunctions | enumClass.kt:0:0:0:0 | <clinit> | <clinit>() | | Compiler generated |
33+
| enumClass.kt:6:1:16:1 | EnumWithFunctions | enumClass.kt:0:0:0:0 | valueOf | valueOf(java.lang.String) | public, static | Compiler generated |
34+
| enumClass.kt:6:1:16:1 | EnumWithFunctions | enumClass.kt:0:0:0:0 | values | values() | public, static | Compiler generated |
35+
| enumClass.kt:6:1:16:1 | EnumWithFunctions | enumClass.kt:13:12:13:29 | f | f(int) | public | |
36+
| enumClass.kt:6:1:16:1 | EnumWithFunctions | enumClass.kt:14:12:14:29 | g | g(int) | public | |
37+
| enumClass.kt:8:3:11:4 | VAL | enumClass.kt:9:14:9:30 | f | f(int) | override, public | |
38+
| enumClass.kt:8:3:11:4 | VAL | enumClass.kt:10:14:10:42 | g | g(int) | override, public | |
3239
| methods2.kt:0:0:0:0 | Methods2Kt | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | fooBarTopLevelMethod(int,int) | public, static | |
3340
| methods2.kt:7:1:10:1 | Class2 | methods2.kt:8:5:9:5 | fooBarClassMethod | fooBarClassMethod(int,int) | public | |
3441
| methods3.kt:0:0:0:0 | Methods3Kt | methods3.kt:3:1:3:42 | fooBarTopLevelMethodExt | fooBarTopLevelMethodExt(int,int) | public, static | |
@@ -56,6 +63,8 @@ constructors
5663
| delegates.kt:8:32:11:5 | new KMutableProperty1<MyClass,String>(...) { ... } | delegates.kt:8:32:11:5 | | |
5764
| delegates.kt:8:66:11:5 | new Function3<KProperty<?>,String,String,Unit>(...) { ... } | delegates.kt:8:66:11:5 | | |
5865
| enumClass.kt:1:1:4:1 | EnumClass | enumClass.kt:1:6:4:1 | EnumClass | EnumClass(int) |
66+
| enumClass.kt:6:1:16:1 | EnumWithFunctions | enumClass.kt:6:6:16:1 | EnumWithFunctions | EnumWithFunctions() |
67+
| enumClass.kt:8:3:11:4 | VAL | enumClass.kt:8:3:11:4 | VAL | VAL() |
5968
| methods2.kt:7:1:10:1 | Class2 | methods2.kt:7:1:10:1 | Class2 | Class2() |
6069
| methods3.kt:5:1:7:1 | Class3 | methods3.kt:5:1:7:1 | Class3 | Class3() |
6170
| methods4.kt:3:1:11:1 | NestedTest | methods4.kt:3:1:11:1 | NestedTest | NestedTest() |

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323
| delegates.kt:8:66:11:5 | invoke | delegates.kt:9:15:9:17 | old | 1 |
2424
| delegates.kt:8:66:11:5 | invoke | delegates.kt:9:20:9:22 | new | 2 |
2525
| enumClass.kt:0:0:0:0 | valueOf | enumClass.kt:0:0:0:0 | value | 0 |
26+
| enumClass.kt:0:0:0:0 | valueOf | enumClass.kt:0:0:0:0 | value | 0 |
27+
| enumClass.kt:9:14:9:30 | f | enumClass.kt:9:20:9:25 | i | 0 |
28+
| enumClass.kt:10:14:10:42 | g | enumClass.kt:10:20:10:25 | i | 0 |
29+
| enumClass.kt:13:12:13:29 | f | enumClass.kt:13:18:13:23 | i | 0 |
30+
| enumClass.kt:14:12:14:29 | g | enumClass.kt:14:18:14:23 | i | 0 |
2631
| methods2.kt:4:1:5:1 | fooBarTopLevelMethod | methods2.kt:4:26:4:31 | x | 0 |
2732
| methods2.kt:4:1:5:1 | fooBarTopLevelMethod | methods2.kt:4:34:4:39 | y | 1 |
2833
| methods2.kt:8:5:9:5 | fooBarClassMethod | methods2.kt:8:27:8:32 | x | 0 |

0 commit comments

Comments
 (0)