[FIR2IR] Process anonymous object nested classes correctly

#KT-42373 Fixed
This commit is contained in:
Mikhail Glukhikh
2020-10-01 10:42:46 +03:00
parent 76cdf97b6d
commit 3cd552cb43
6 changed files with 268 additions and 7 deletions
@@ -92,18 +92,22 @@ class Fir2IrConverter(
)
}
val processedCallableNames = mutableSetOf<Name>()
val classes = mutableListOf<FirRegularClass>()
for (declaration in sortBySynthetic(anonymousObject.declarations)) {
if (declaration is FirRegularClass) {
val irDeclaration = if (declaration is FirRegularClass) {
classes += declaration
registerClassAndNestedClasses(declaration, irClass)
processClassAndNestedClassHeaders(declaration)
}
val irDeclaration = processMemberDeclaration(declaration, anonymousObject, irClass) ?: continue
when (declaration) {
is FirSimpleFunction -> processedCallableNames += declaration.name
is FirProperty -> processedCallableNames += declaration.name
} else {
when (declaration) {
is FirSimpleFunction -> processedCallableNames += declaration.name
is FirProperty -> processedCallableNames += declaration.name
}
processMemberDeclaration(declaration, anonymousObject, irClass) ?: continue
}
irClass.declarations += irDeclaration
}
classes.forEach { processClassAndNestedClassHeaders(it) }
classes.forEach { processClassMembers(it) }
// Add delegated members *before* fake override generations.
// Otherwise, fake overrides for delegated members, which are redundant, will be added.
val realDeclarations = delegatedMembers(irClass) + anonymousObject.declarations
@@ -1747,6 +1747,11 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest {
runTest("compiler/testData/ir/irText/firProblems/FirBuilder.kt");
}
@TestMetadata("InnerClassInAnonymous.kt")
public void testInnerClassInAnonymous() throws Exception {
runTest("compiler/testData/ir/irText/firProblems/InnerClassInAnonymous.kt");
}
@TestMetadata("putIfAbsent.kt")
public void testPutIfAbsent() throws Exception {
runTest("compiler/testData/ir/irText/firProblems/putIfAbsent.kt");