Merge pull request #10549 from tamasvajk/kotlin-fix-local-class-extraction

Kotlin: Fix non-nested local class extraction
This commit is contained in:
Tamás Vajk
2022-09-23 14:40:59 +02:00
committed by GitHub
8 changed files with 41 additions and 3 deletions

View File

@@ -574,8 +574,8 @@ open class KotlinFileExtractor(
break
} else if (parent is IrFile) {
if (innerClass != null) {
// We don't have to extract file class containers for classes
if (innerClass != null && !innerClass.isLocal) {
// We don't have to extract file class containers for classes except for local classes
break
}
if (this.filePath != parent.path) {

View File

@@ -7,6 +7,30 @@ classes.kt:
# 32| 0: [Parameter] s
# 32| 0: [TypeAccess] String
# 32| 5: [BlockStmt] { ... }
# 158| 2: [Method] fn1
# 158| 3: [TypeAccess] Unit
# 158| 5: [BlockStmt] { ... }
# 159| 0: [LocalTypeDeclStmt] class ...
# 159| 0: [LocalClass] X
# 159| 1: [Constructor] X
# 159| 5: [BlockStmt] { ... }
# 159| 0: [SuperConstructorInvocationStmt] super(...)
# 159| 1: [BlockStmt] { ... }
# 162| 3: [Method] fn2
# 162| 3: [TypeAccess] Object
# 162| 5: [BlockStmt] { ... }
# 162| 0: [ReturnStmt] return ...
# 162| 0: [StmtExpr] <Stmt>
# 162| 0: [BlockStmt] { ... }
# 162| 0: [LocalTypeDeclStmt] class ...
# 162| 0: [AnonymousClass,LocalClass] new Object(...) { ... }
# 162| 1: [Constructor]
# 162| 5: [BlockStmt] { ... }
# 162| 0: [SuperConstructorInvocationStmt] super(...)
# 162| 1: [BlockStmt] { ... }
# 162| 1: [ExprStmt] <Expr>;
# 162| 0: [ClassInstanceExpr] new (...)
# 162| -3: [TypeAccess] Object
# 2| 2: [Class] ClassOne
# 2| 1: [Constructor] ClassOne
# 2| 5: [BlockStmt] { ... }

View File

@@ -6,6 +6,7 @@
| 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 ... |
| 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 ... |
| 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 ... |
| 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 ... |
| 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 ... |
| 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 ... |
| 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 ... |

View File

@@ -39,6 +39,8 @@
| classes.kt:141:13:145:13 | Cl1 | Cl0$Cl1 | final, private |
| classes.kt:150:1:156:1 | Cl00 | Cl00 | final, public |
| classes.kt:151:5:155:5 | Cl01 | Cl00$Cl01 | final, public |
| classes.kt:159:5:159:14 | X | ClassesKt$X | final, private |
| classes.kt:162:13:162:22 | new Object(...) { ... } | <anonymous class> | final, private |
| generic_anonymous.kt:0:0:0:0 | Generic_anonymousKt | Generic_anonymousKt | final, public |
| generic_anonymous.kt:1:1:9:1 | Generic | Generic | final, private |
| generic_anonymous.kt:3:19:5:3 | new Object(...) { ... } | <anonymous class> | final, private |

View File

@@ -154,3 +154,9 @@ class Cl00<U0> {
}
}
}
fun fn1() {
class X {}
}
fun fn2() = object { }

View File

@@ -39,6 +39,8 @@ superCall
| classes.kt:141:13:145:13 | super(...) |
| classes.kt:150:1:156:1 | super(...) |
| classes.kt:151:5:155:5 | super(...) |
| classes.kt:159:5:159:14 | super(...) |
| classes.kt:162:13:162:22 | super(...) |
| generic_anonymous.kt:1:1:9:1 | super(...) |
| generic_anonymous.kt:3:19:5:3 | super(...) |
| generic_anonymous.kt:15:1:33:1 | super(...) |

View File

@@ -4,6 +4,7 @@
| 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(...) { ... } |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |

View File

@@ -44,6 +44,8 @@
| classes.kt:141:13:145:13 | Cl1 | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:150:1:156:1 | Cl00 | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:151:5:155:5 | Cl01 | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:159:5:159:14 | X | file://<external>/Object.class:0:0:0:0 | Object |
| classes.kt:162:13:162:22 | new Object(...) { ... } | file://<external>/Object.class:0:0:0:0 | Object |
| file://<external>/C1$<no name provided>$Local3.class:0:0:0:0 | Local3<Integer> | file://<external>/Object.class:0:0:0:0 | Object |
| file://<external>/C1$Local1.class:0:0:0:0 | Local1<Integer> | file://<external>/Object.class:0:0:0:0 | Object |
| file://<external>/C1$Local2.class:0:0:0:0 | Local2<Integer> | file://<external>/Object.class:0:0:0:0 | Object |