Skip to content

Commit 43ec5dc

Browse files
authored
Merge pull request #10549 from tamasvajk/kotlin-fix-local-class-extraction
Kotlin: Fix non-nested local class extraction
2 parents 342c876 + d6e31af commit 43ec5dc

File tree

8 files changed

+41
-3
lines changed

8 files changed

+41
-3
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -574,8 +574,8 @@ open class KotlinFileExtractor(
574574

575575
break
576576
} else if (parent is IrFile) {
577-
if (innerClass != null) {
578-
// We don't have to extract file class containers for classes
577+
if (innerClass != null && !innerClass.isLocal) {
578+
// We don't have to extract file class containers for classes except for local classes
579579
break
580580
}
581581
if (this.filePath != parent.path) {

java/ql/test/kotlin/library-tests/classes/PrintAst.expected

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,30 @@ classes.kt:
77
# 32| 0: [Parameter] s
88
# 32| 0: [TypeAccess] String
99
# 32| 5: [BlockStmt] { ... }
10+
# 158| 2: [Method] fn1
11+
# 158| 3: [TypeAccess] Unit
12+
# 158| 5: [BlockStmt] { ... }
13+
# 159| 0: [LocalTypeDeclStmt] class ...
14+
# 159| 0: [LocalClass] X
15+
# 159| 1: [Constructor] X
16+
# 159| 5: [BlockStmt] { ... }
17+
# 159| 0: [SuperConstructorInvocationStmt] super(...)
18+
# 159| 1: [BlockStmt] { ... }
19+
# 162| 3: [Method] fn2
20+
# 162| 3: [TypeAccess] Object
21+
# 162| 5: [BlockStmt] { ... }
22+
# 162| 0: [ReturnStmt] return ...
23+
# 162| 0: [StmtExpr] <Stmt>
24+
# 162| 0: [BlockStmt] { ... }
25+
# 162| 0: [LocalTypeDeclStmt] class ...
26+
# 162| 0: [AnonymousClass,LocalClass] new Object(...) { ... }
27+
# 162| 1: [Constructor]
28+
# 162| 5: [BlockStmt] { ... }
29+
# 162| 0: [SuperConstructorInvocationStmt] super(...)
30+
# 162| 1: [BlockStmt] { ... }
31+
# 162| 1: [ExprStmt] <Expr>;
32+
# 162| 0: [ClassInstanceExpr] new (...)
33+
# 162| -3: [TypeAccess] Object
1034
# 2| 2: [Class] ClassOne
1135
# 2| 1: [Constructor] ClassOne
1236
# 2| 5: [BlockStmt] { ... }

java/ql/test/kotlin/library-tests/classes/anonymousClasses.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
| classes.kt:85:16:85:25 | new Object(...) { ... } | classes.kt:85:16:85:25 | new (...) | | classes.kt:85:16:85:25 | Object | classes.kt:85:16:85:25 | class ... |
77
| classes.kt:89:16:89:44 | new Interface3<Integer>(...) { ... } | classes.kt:89:16:89:44 | new (...) | | classes.kt:89:16:89:44 | Interface3<Integer> | classes.kt:89:16:89:44 | class ... |
88
| classes.kt:127:16:134:9 | new Object(...) { ... } | classes.kt:127:16:134:9 | new (...) | | classes.kt:127:16:134:9 | Object | classes.kt:127:16:134:9 | class ... |
9+
| classes.kt:162:13:162:22 | new Object(...) { ... } | classes.kt:162:13:162:22 | new (...) | | classes.kt:162:13:162:22 | Object | classes.kt:162:13:162:22 | class ... |
910
| generic_anonymous.kt:3:19:5:3 | new Object(...) { ... } | generic_anonymous.kt:3:19:5:3 | new (...) | | generic_anonymous.kt:3:19:5:3 | Object | generic_anonymous.kt:3:19:5:3 | class ... |
1011
| generic_anonymous.kt:26:13:26:37 | new Object(...) { ... } | generic_anonymous.kt:26:13:26:37 | new (...) | | generic_anonymous.kt:26:13:26:37 | Object | generic_anonymous.kt:26:13:26:37 | class ... |
1112
| generic_anonymous.kt:27:13:27:37 | new Object(...) { ... } | generic_anonymous.kt:27:13:27:37 | new (...) | | generic_anonymous.kt:27:13:27:37 | Object | generic_anonymous.kt:27:13:27:37 | class ... |

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
| classes.kt:141:13:145:13 | Cl1 | Cl0$Cl1 | final, private |
4040
| classes.kt:150:1:156:1 | Cl00 | Cl00 | final, public |
4141
| classes.kt:151:5:155:5 | Cl01 | Cl00$Cl01 | final, public |
42+
| classes.kt:159:5:159:14 | X | ClassesKt$X | final, private |
43+
| classes.kt:162:13:162:22 | new Object(...) { ... } | <anonymous class> | final, private |
4244
| generic_anonymous.kt:0:0:0:0 | Generic_anonymousKt | Generic_anonymousKt | final, public |
4345
| generic_anonymous.kt:1:1:9:1 | Generic | Generic | final, private |
4446
| generic_anonymous.kt:3:19:5:3 | new Object(...) { ... } | <anonymous class> | final, private |

java/ql/test/kotlin/library-tests/classes/classes.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,4 +153,10 @@ class Cl00<U0> {
153153
val x = Cl01<U1>()
154154
}
155155
}
156-
}
156+
}
157+
158+
fun fn1() {
159+
class X {}
160+
}
161+
162+
fun fn2() = object { }

java/ql/test/kotlin/library-tests/classes/ctorCalls.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ superCall
3939
| classes.kt:141:13:145:13 | super(...) |
4040
| classes.kt:150:1:156:1 | super(...) |
4141
| classes.kt:151:5:155:5 | super(...) |
42+
| classes.kt:159:5:159:14 | super(...) |
43+
| classes.kt:162:13:162:22 | super(...) |
4244
| generic_anonymous.kt:1:1:9:1 | super(...) |
4345
| generic_anonymous.kt:3:19:5:3 | super(...) |
4446
| generic_anonymous.kt:15:1:33:1 | super(...) |

java/ql/test/kotlin/library-tests/classes/localClass.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
| classes.kt:129:17:131:17 | class ... | classes.kt:129:17:131:17 | Local3 | classes.kt:128:13:133:13 | fn | classes.kt:127:16:134:9 | new Object(...) { ... } |
55
| classes.kt:140:9:146:9 | class ... | classes.kt:140:9:146:9 | | classes.kt:139:5:147:5 | func1 | classes.kt:138:1:148:1 | Cl0 |
66
| classes.kt:141:13:145:13 | class ... | classes.kt:141:13:145:13 | Cl1 | classes.kt:140:9:146:9 | func2 | classes.kt:138:1:148:1 | Cl0 |
7+
| classes.kt:159:5:159:14 | class ... | classes.kt:159:5:159:14 | X | classes.kt:158:1:160:1 | fn1 | classes.kt:0:0:0:0 | ClassesKt |
78
| generic_anonymous.kt:25:9:31:9 | class ... | generic_anonymous.kt:25:9:31:9 | | generic_anonymous.kt:24:5:32:5 | func1 | generic_anonymous.kt:15:1:33:1 | Outer |
89
| localClassField.kt:3:9:3:19 | class ... | localClassField.kt:3:9:3:19 | L | localClassField.kt:1:1:11:1 | A | localClassField.kt:1:1:11:1 | A |
910
| localClassField.kt:8:9:8:19 | class ... | localClassField.kt:8:9:8:19 | L | localClassField.kt:1:1:11:1 | A | localClassField.kt:1:1:11:1 | A |

java/ql/test/kotlin/library-tests/classes/superTypes.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
| classes.kt:141:13:145:13 | Cl1 | file://<external>/Object.class:0:0:0:0 | Object |
4545
| classes.kt:150:1:156:1 | Cl00 | file://<external>/Object.class:0:0:0:0 | Object |
4646
| classes.kt:151:5:155:5 | Cl01 | file://<external>/Object.class:0:0:0:0 | Object |
47+
| classes.kt:159:5:159:14 | X | file://<external>/Object.class:0:0:0:0 | Object |
48+
| classes.kt:162:13:162:22 | new Object(...) { ... } | file://<external>/Object.class:0:0:0:0 | Object |
4749
| file://<external>/C1$<no name provided>$Local3.class:0:0:0:0 | Local3<Integer> | file://<external>/Object.class:0:0:0:0 | Object |
4850
| file://<external>/C1$Local1.class:0:0:0:0 | Local1<Integer> | file://<external>/Object.class:0:0:0:0 | Object |
4951
| file://<external>/C1$Local2.class:0:0:0:0 | Local2<Integer> | file://<external>/Object.class:0:0:0:0 | Object |

0 commit comments

Comments
 (0)