~~ hack ir element visitor
diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ExternalPackageParentPatcher.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ExternalPackageParentPatcher.kt
index 3d940dd..2f0d71d 100644
--- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ExternalPackageParentPatcher.kt
+++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ExternalPackageParentPatcher.kt
@@ -15,7 +15,7 @@
 internal class ExternalPackageParentPatcher(
     private val components: Fir2IrComponents,
     private val fir2IrExtensions: Fir2IrExtensions
-) : IrElementVisitorVoid {
+) : IrElementVisitorVoid() {
     override fun visitElement(element: IrElement) {
         element.acceptChildrenVoid(this)
     }
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/KtDiagnosticReporterWithImplicitIrBasedContext.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/KtDiagnosticReporterWithImplicitIrBasedContext.kt
index 9b942af..fa9f530 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/KtDiagnosticReporterWithImplicitIrBasedContext.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/KtDiagnosticReporterWithImplicitIrBasedContext.kt
@@ -99,7 +99,7 @@
             visitor.annotatedAncestors
         }
 
-    private inner class AnnotatedTreeVisitor : IrElementVisitor<Unit, Stack<IrElement>> {
+    private inner class AnnotatedTreeVisitor : IrElementVisitor<Unit, Stack<IrElement>>() {
 
         val annotatedAncestors = mutableMapOf<IrElement, IrElement>()
 
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt
index 8b62566..0631bb3 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt
@@ -25,7 +25,7 @@
     val irBuiltIns: IrBuiltIns,
     val reportError: ReportError,
     val config: IrValidatorConfig
-) : IrElementVisitorVoid {
+) : IrElementVisitorVoid() {
     private val visitedElements = hashSetOf<IrElement>()
 
     override fun visitElement(element: IrElement) {
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/IrValidator.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/IrValidator.kt
index 4714a51..b9169f9 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/IrValidator.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/IrValidator.kt
@@ -61,7 +61,7 @@
     val checkScopes: Boolean = false,
 )
 
-class IrValidator(val context: CommonBackendContext, val config: IrValidatorConfig) : IrElementVisitorVoid {
+class IrValidator(val context: CommonBackendContext, val config: IrValidatorConfig) : IrElementVisitorVoid() {
 
     val irBuiltIns = context.irBuiltIns
     var currentFile: IrFile? = null
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/Lower.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/Lower.kt
index 4cee3bc..df66c41 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/Lower.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/Lower.kt
@@ -91,7 +91,7 @@
 
 private class ClassLoweringVisitor(
     private val loweringPass: ClassLoweringPass
-) : IrElementVisitorVoid {
+) : IrElementVisitorVoid() {
     override fun visitElement(element: IrElement) {
         element.acceptChildrenVoid(this)
     }
@@ -108,7 +108,7 @@
 
 private class ScriptLoweringVisitor(
     private val loweringPass: ScriptLoweringPass
-) : IrElementVisitorVoid {
+) : IrElementVisitorVoid() {
     override fun visitElement(element: IrElement) {
         element.acceptChildrenVoid(this)
     }
@@ -126,7 +126,7 @@
 
 private class DeclarationContainerLoweringVisitor(
     private val loweringPass: DeclarationContainerLoweringPass
-) : IrElementVisitorVoid {
+) : IrElementVisitorVoid() {
     override fun visitElement(element: IrElement) {
         element.acceptChildrenVoid(this)
     }
@@ -168,7 +168,7 @@
 private open class BodyLoweringVisitor(
     private val loweringPass: BodyLoweringPass,
     private val withLocalDeclarations: Boolean,
-) : IrElementVisitor<Unit, IrDeclaration?> {
+) : IrElementVisitor<Unit, IrDeclaration?>() {
     override fun visitElement(element: IrElement, data: IrDeclaration?) {
         element.acceptChildren(this, data)
     }
@@ -242,7 +242,7 @@
         }
     }
 
-    private class Visitor(private val transformer: DeclarationTransformer) : IrElementVisitorVoid {
+    private class Visitor(private val transformer: DeclarationTransformer) : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement) {
             element.acceptChildrenVoid(this)
         }
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ScopeValidator.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ScopeValidator.kt
index 479e08e..b3c68da 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ScopeValidator.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ScopeValidator.kt
@@ -54,7 +54,7 @@
             )
     }
 
-    inner class Checker : IrElementVisitor<Unit, Visibles> {
+    inner class Checker : IrElementVisitor<Unit, Visibles>() {
         override fun visitElement(element: IrElement, data: Visibles) {
             element.acceptChildren(this, data)
         }
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailRecursionCallsCollector.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailRecursionCallsCollector.kt
index a16702f..36a29d9 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailRecursionCallsCollector.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailRecursionCallsCollector.kt
@@ -49,7 +49,7 @@
     val isUnitReturn = irFunction.returnType.isUnit()
     val result = mutableSetOf<IrCall>()
     var someCallsAreInOtherFunctions = false
-    val visitor = object : IrElementVisitor<Unit, VisitorState> {
+    val visitor = object : IrElementVisitor<Unit, VisitorState>() {
         override fun visitElement(element: IrElement, data: VisitorState) {
             element.acceptChildren(this, VisitorState(isTailExpression = false, data.inOtherFunction))
         }
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailSuspendCallsCollector.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailSuspendCallsCollector.kt
index 2b98855..9a2a4b6 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailSuspendCallsCollector.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailSuspendCallsCollector.kt
@@ -31,7 +31,7 @@
     val tailSuspendCalls = mutableSetOf<IrCall>()
     val tailReturnableBlocks = mutableSetOf<IrReturnableBlockSymbol>()
 
-    val visitor = object : IrElementVisitor<Unit, VisitorState> {
+    val visitor = object : IrElementVisitor<Unit, VisitorState>() {
         override fun visitElement(element: IrElement, data: VisitorState) {
             element.acceptChildren(this, VisitorState(data.insideTryBlock, isTailExpression = false))
         }
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt
index 051025f..c090b5e 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt
@@ -57,7 +57,7 @@
 
     private fun buildCoroutines(irFile: IrFile) {
         irFile.transformDeclarationsFlat(::tryTransformSuspendFunction)
-        irFile.acceptVoid(object : IrElementVisitorVoid {
+        irFile.acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
@@ -79,7 +79,7 @@
         else null
 
     private fun markSuspendLambdas(irElement: IrElement) {
-        irElement.acceptChildrenVoid(object : IrElementVisitorVoid {
+        irElement.acceptChildrenVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
@@ -526,7 +526,7 @@
         }
     }
 
-    protected open class VariablesScopeTracker : IrElementVisitorVoid {
+    protected open class VariablesScopeTracker : IrElementVisitorVoid() {
 
         protected val scopeStack = mutableListOf<MutableSet<IrVariable>>(mutableSetOf())
 
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ClosureAnnotator.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ClosureAnnotator.kt
index cca7c1a..0bc1d28 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ClosureAnnotator.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ClosureAnnotator.kt
@@ -247,7 +247,7 @@
             else -> null
         }
 
-    private inner class ClosureCollectorVisitor : IrElementVisitor<Unit, ClosureBuilder?> {
+    private inner class ClosureCollectorVisitor : IrElementVisitor<Unit, ClosureBuilder?>() {
 
         override fun visitElement(element: IrElement, data: ClosureBuilder?) {
             element.acceptChildren(this, data)
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ExpressionBodyTransformer.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ExpressionBodyTransformer.kt
index efc132a..2ec14bc 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ExpressionBodyTransformer.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ExpressionBodyTransformer.kt
@@ -21,7 +21,7 @@
 
 class ExpressionBodyTransformer(val context: CommonBackendContext) : FileLoweringPass {
     override fun lower(irFile: IrFile) {
-        irFile.acceptVoid(object : IrElementVisitorVoid {
+        irFile.acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/FlattenStringConcatenationLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/FlattenStringConcatenationLowering.kt
index 58ee0df..cac3818 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/FlattenStringConcatenationLowering.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/FlattenStringConcatenationLowering.kt
@@ -136,7 +136,7 @@
         /** Recursively collects string concatenation arguments from the given expression. */
         private fun collectStringConcatenationArguments(expression: IrExpression): List<IrExpression> {
             val arguments = mutableListOf<IrExpression>()
-            expression.acceptChildrenVoid(object : IrElementVisitorVoid {
+            expression.acceptChildrenVoid(object : IrElementVisitorVoid() {
 
                 override fun visitElement(element: IrElement) {
                     // Theoretically this is unreachable code since all descendants of IrExpressions are IrExpressions.
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InitializersLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InitializersLowering.kt
index 76dd4dd..ae9a72c 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InitializersLowering.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InitializersLowering.kt
@@ -38,7 +38,7 @@
         }
         val block = IrBlockImpl(irClass.startOffset, irClass.endOffset, context.irBuiltIns.unitType, null, instanceInitializerStatements)
         // Check that the initializers contain no local classes. Deep-copying them is a disaster for code size, and liable to break randomly.
-        block.accept(object : IrElementVisitorVoid {
+        block.accept(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) =
                 element.acceptChildren(this, null)
 
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InventNamesForLocalClasses.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InventNamesForLocalClasses.kt
index 56ba124..b4a1080 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InventNamesForLocalClasses.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InventNamesForLocalClasses.kt
@@ -36,7 +36,7 @@
         fun makeLocal(): Data = if (isLocal) this else copy(isLocal = true)
     }
 
-    private inner class NameInventor : IrElementVisitor<Unit, Data> {
+    private inner class NameInventor : IrElementVisitor<Unit, Data>() {
         private val anonymousClassesCount = mutableMapOf<String, Int>()
         private val localFunctionNames = mutableMapOf<IrFunctionSymbol, String>()
 
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt
index f2beccf..b24ae2a 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt
@@ -950,7 +950,7 @@
                     if (isInline && !isInInlineFunction) Data(currentClass, true) else this
             }
 
-            irElement.accept(object : IrElementVisitor<Unit, Data> {
+            irElement.accept(object : IrElementVisitor<Unit, Data>() {
                 override fun visitElement(element: IrElement, data: Data) {
                     element.acceptChildren(this, data)
                 }
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LowerUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LowerUtils.kt
index 37792ee..7137063 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LowerUtils.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LowerUtils.kt
@@ -171,7 +171,7 @@
         ?: irBuiltIns.anyType
     var callsSuper = false
     var numberOfCalls = 0
-    acceptChildrenVoid(object : IrElementVisitorVoid {
+    acceptChildrenVoid(object : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement) {
             element.acceptChildrenVoid(this)
         }
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/PropertiesLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/PropertiesLowering.kt
index e6018cc..4a9dedb 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/PropertiesLowering.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/PropertiesLowering.kt
@@ -46,7 +46,7 @@
 
     companion object {
         fun checkNoProperties(irFile: IrFile) {
-            irFile.acceptVoid(object : IrElementVisitorVoid {
+            irFile.acceptVoid(object : IrElementVisitorVoid() {
                 override fun visitElement(element: IrElement) {
                     element.acceptChildrenVoid(this)
                 }
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ProvisionalFunctionExpressionLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ProvisionalFunctionExpressionLowering.kt
index 2ef8d27..bd4aee4 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ProvisionalFunctionExpressionLowering.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ProvisionalFunctionExpressionLowering.kt
@@ -25,7 +25,7 @@
     val startOffset: Int? = null,
     val endOffset: Int? = null)
 class ProvisionalFunctionExpressionLowering :
-    IrElementTransformer<ProvisionalFunctionExpressionLoweringContext>,
+    IrElementTransformer<ProvisionalFunctionExpressionLoweringContext>(),
     BodyLoweringPass {
 
     override fun lower(irBody: IrBody, container: IrDeclaration) {
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SharedVariablesLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SharedVariablesLowering.kt
index 61a90d4..515b21b 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SharedVariablesLowering.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SharedVariablesLowering.kt
@@ -55,7 +55,7 @@
 
         private fun collectSharedVariables() {
             val skippedFunctionsParents = mutableMapOf<IrFunction, IrDeclarationParent>()
-            irBody.accept(object : IrElementVisitor<Unit, IrDeclarationParent?> {
+            irBody.accept(object : IrElementVisitor<Unit, IrDeclarationParent?>() {
                 val relevantVars = HashSet<IrVariable>()
                 val relevantVals = HashSet<IrVariable>()
 
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/TailrecLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/TailrecLowering.kt
index a3eb681..d8372fb 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/TailrecLowering.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/TailrecLowering.kt
@@ -46,7 +46,7 @@
     override fun lower(irBody: IrBody, container: IrDeclaration) {
         if (container is IrFunction) {
             // Lower local declarations
-            irBody.acceptChildrenVoid(object : IrElementVisitorVoid {
+            irBody.acceptChildrenVoid(object : IrElementVisitorVoid() {
                 override fun visitElement(element: IrElement) {
                     element.acceptChildrenVoid(this)
                 }
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/LocalClasses.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/LocalClasses.kt
index a8c142d..333faaa 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/LocalClasses.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/LocalClasses.kt
@@ -35,7 +35,7 @@
     }
 
     override fun lower(irBody: IrBody, container: IrDeclaration) {
-        irBody.transformChildren(object : IrElementTransformer<IrDeclarationParent> {
+        irBody.transformChildren(object : IrElementTransformer<IrDeclarationParent>() {
             override fun visitDeclaration(declaration: IrDeclarationBase, data: IrDeclarationParent) =
                 super.visitDeclaration(declaration, (declaration as? IrDeclarationParent) ?: data)
 
@@ -62,7 +62,7 @@
                 val adaptedFunctions = mutableSetOf<IrSimpleFunction>()
                 val transformer = this
                 for (lambda in inlineLambdas) {
-                    lambda.acceptChildrenVoid(object : IrElementVisitorVoid {
+                    lambda.acceptChildrenVoid(object : IrElementVisitorVoid() {
                         override fun visitElement(element: IrElement) {
                             element.acceptChildrenVoid(this)
                         }
@@ -143,7 +143,7 @@
 
         val crossinlineParameters = function.valueParameters.filter { it.isCrossinline }.toSet()
         val classesToExtract = mutableSetOf<IrClass>()
-        function.acceptChildrenVoid(object : IrElementVisitorVoid {
+        function.acceptChildrenVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
@@ -151,7 +151,7 @@
             override fun visitClass(declaration: IrClass) {
                 var canExtract = true
                 if (crossinlineParameters.isNotEmpty()) {
-                    declaration.acceptVoid(object : IrElementVisitorVoid {
+                    declaration.acceptVoid(object : IrElementVisitorVoid() {
                         override fun visitElement(element: IrElement) {
                             element.acceptChildrenVoid(this)
                         }
@@ -187,7 +187,7 @@
 
         val crossinlineParameters = function.valueParameters.filter { it.isCrossinline }.toSet()
 
-        function.acceptChildrenVoid(object : IrElementVisitorVoid {
+        function.acceptChildrenVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
@@ -195,7 +195,7 @@
             override fun visitClass(declaration: IrClass) {
                 var canExtract = true
                 if (crossinlineParameters.isNotEmpty()) {
-                    declaration.acceptVoid(object : IrElementVisitorVoid {
+                    declaration.acceptVoid(object : IrElementVisitorVoid() {
                         override fun visitElement(element: IrElement) {
                             element.acceptChildrenVoid(this)
                         }
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/ForLoopsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/ForLoopsLowering.kt
index 3e1924c..9db8750 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/ForLoopsLowering.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/ForLoopsLowering.kt
@@ -361,7 +361,7 @@
         val loopVariableComponentIndices: List<Int>
     )
 
-    private class FindInitializerCallVisitor(private val mainLoopVariable: IrVariable?) : IrElementVisitorVoid {
+    private class FindInitializerCallVisitor(private val mainLoopVariable: IrVariable?) : IrElementVisitorVoid() {
         var initializerCall: IrCall? = null
 
         override fun visitElement(element: IrElement) {
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/HeaderInfo.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/HeaderInfo.kt
index 0ff3e3c..958a5b4 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/HeaderInfo.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/HeaderInfo.kt
@@ -277,7 +277,7 @@
     private val scopeOwnerSymbol: () -> IrSymbol,
     private val allowUnsignedBounds: Boolean = false
 ) :
-    IrElementVisitor<HeaderInfo?, IrCall?> {
+    IrElementVisitor<HeaderInfo?, IrCall?>() {
 
     private val symbols = context.ir.symbols
 
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/DumperVerifier.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/DumperVerifier.kt
index e92e73b..1a39c65 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/DumperVerifier.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/phaser/DumperVerifier.kt
@@ -66,7 +66,7 @@
     val dumpOnlyFqName = actionState.config.dumpOnlyFqName
     if (dumpOnlyFqName != null) {
         elementName = dumpOnlyFqName
-        data.acceptVoid(object : IrElementVisitorVoid {
+        data.acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/Dce.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/Dce.kt
index db15f4d..f164029 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/Dce.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/Dce.kt
@@ -91,7 +91,7 @@
 }
 
 private fun buildRoots(modules: Iterable<IrModuleFragment>, context: JsIrBackendContext): List<IrDeclaration> = buildList {
-    val declarationsCollector = object : IrElementVisitorVoid {
+    val declarationsCollector = object : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement): Unit = element.acceptChildrenVoid(this)
         override fun visitBody(body: IrBody): Unit = Unit // Skip
 
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/UsefulDeclarationProcessor.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/UsefulDeclarationProcessor.kt
index fda87c4..3847b39e 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/UsefulDeclarationProcessor.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/UsefulDeclarationProcessor.kt
@@ -31,7 +31,7 @@
     protected abstract fun isExported(declaration: IrDeclaration): Boolean
     protected abstract val bodyVisitor: BodyVisitorBase
 
-    protected abstract inner class BodyVisitorBase : IrElementVisitor<Unit, IrDeclaration> {
+    protected abstract inner class BodyVisitorBase : IrElementVisitor<Unit, IrDeclaration>() {
         override fun visitValueAccess(expression: IrValueAccessExpression, data: IrDeclaration) {
             visitDeclarationReference(expression, data)
             expression.symbol.owner.enqueue(data, "variable access")
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/UselessDeclarationsRemover.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/UselessDeclarationsRemover.kt
index cd2ad7d..ed4cee0 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/UselessDeclarationsRemover.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/UselessDeclarationsRemover.kt
@@ -28,7 +28,7 @@
     private val usefulDeclarations: Set<IrDeclaration>,
     private val context: JsIrBackendContext,
     private val dceRuntimeDiagnostic: RuntimeDiagnostic?,
-) : IrElementVisitorVoid {
+) : IrElementVisitorVoid() {
     private val savedTypesCache = hashMapOf<IrClassSymbol, Set<IrClassSymbol>>()
 
     override fun visitElement(element: IrElement) {
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IdSignatureHashCalculator.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IdSignatureHashCalculator.kt
index 82dc5f1..eaf3cd9 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IdSignatureHashCalculator.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IdSignatureHashCalculator.kt
@@ -29,7 +29,7 @@
     private val allIdSignatureHashes = hashMapOf<IdSignature, ICHash>()
 
 
-    private inner class FlatHashCalculator : IrElementVisitorVoid {
+    private inner class FlatHashCalculator : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement) {
             element.acceptChildrenVoid(this)
         }
@@ -52,7 +52,7 @@
         }
     }
 
-    private inner class InlineFunctionCallGraphBuilder : IrElementVisitor<Unit, MutableSet<IrFunction>> {
+    private inner class InlineFunctionCallGraphBuilder : IrElementVisitor<Unit, MutableSet<IrFunction>>() {
         override fun visitElement(element: IrElement, data: MutableSet<IrFunction>) {
             element.acceptChildren(this, data)
         }
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt
index 6154053..6dbcc79 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BlockDecomposerLowering.kt
@@ -167,7 +167,7 @@
 
     private fun destructureComposite(expression: IrStatement) = (expression as? IrComposite)?.statements ?: listOf(expression)
 
-    private inner class BreakContinueUpdater(val breakLoop: IrLoop, val continueLoop: IrLoop) : IrElementTransformer<IrLoop> {
+    private inner class BreakContinueUpdater(val breakLoop: IrLoop, val continueLoop: IrLoop) : IrElementTransformer<IrLoop>() {
         override fun visitBreak(jump: IrBreak, data: IrLoop) = jump.apply {
             if (loop == data) loop = breakLoop
         }
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CollectNativeImplementations.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CollectNativeImplementations.kt
index d8bdb50..4f490dd 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CollectNativeImplementations.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CollectNativeImplementations.kt
@@ -16,7 +16,7 @@
         moduleFragment.files.forEach { it.accept(collector, null) }
     }
 
-class CollectNativeImplementationsVisitor(private val context: JsIrBackendContext) : IrElementVisitorVoid {
+class CollectNativeImplementationsVisitor(private val context: JsIrBackendContext) : IrElementVisitorVoid() {
     override fun visitElement(element: IrElement) {}
 
     override fun visitFile(declaration: IrFile) {
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6ConstructorLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6ConstructorLowering.kt
index 41695d9..3731252 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6ConstructorLowering.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ES6ConstructorLowering.kt
@@ -529,7 +529,7 @@
 
 private fun getSuperCall(constructor: IrConstructor): IrDelegatingConstructorCall? {
     var result: IrDelegatingConstructorCall? = null
-    (constructor.body as IrBlockBody).acceptChildren(object : IrElementVisitor<Unit, Any?> {
+    (constructor.body as IrBlockBody).acceptChildren(object : IrElementVisitor<Unit, Any?>() {
         override fun visitElement(element: IrElement, data: Any?) { }
 
         override fun visitBlock(expression: IrBlock, data: Any?) {
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt
index 150514d..fce55b7 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt
@@ -207,7 +207,7 @@
      *
      * ES6 `let` statements don't have this problem.
      */
-    private class ClosureUsageAnalyser : IrElementVisitorVoid {
+    private class ClosureUsageAnalyser : IrElementVisitorVoid() {
 
         private val lambdaConstructorCalls: MutableMap<IrConstructorSymbol, MutableList<IrConstructorCall>> = hashMapOf()
         private val variablesDeclaredInLoops: MutableSet<IrValueDeclaration> = hashSetOf()
@@ -239,7 +239,7 @@
 
         private fun IrElement.referencesVariablesDeclaredInLoops(): Boolean {
             var result = false
-            acceptVoid(object : IrElementVisitorVoid {
+            acceptVoid(object : IrElementVisitorVoid() {
 
                 override fun visitElement(element: IrElement) {
                     if (!result)
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsCodeOutliningLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsCodeOutliningLowering.kt
index b567abb..883571b 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsCodeOutliningLowering.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsCodeOutliningLowering.kt
@@ -50,7 +50,7 @@
 
 private fun IrElement.containsCallsTo(symbol: IrFunctionSymbol): Boolean {
     var result = false
-    acceptChildrenVoid(object : IrElementVisitorVoid {
+    acceptChildrenVoid(object : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement) {
             element.acceptChildrenVoid(this)
         }
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MultipleCatchesLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MultipleCatchesLowering.kt
index 2f737d9..21c3cf7 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MultipleCatchesLowering.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MultipleCatchesLowering.kt
@@ -57,7 +57,7 @@
     private val nothingType = context.irBuiltIns.nothingType
 
     override fun lower(irBody: IrBody, container: IrDeclaration) {
-        irBody.transform(object : IrElementTransformer<IrDeclarationParent> {
+        irBody.transform(object : IrElementTransformer<IrDeclarationParent>() {
 
             override fun visitDeclaration(declaration: IrDeclarationBase, data: IrDeclarationParent): IrStatement {
                 val parent = (declaration as? IrDeclarationParent) ?: data
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt
index 2a8ae6d..b10b022 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt
@@ -251,7 +251,7 @@
     }
 }
 
-private class CallsiteRedirectionTransformer(private val context: JsIrBackendContext) : IrElementTransformer<IrFunction?> {
+private class CallsiteRedirectionTransformer(private val context: JsIrBackendContext) : IrElementTransformer<IrFunction?>() {
 
     private val defaultThrowableConstructor = context.defaultThrowableCtor
 
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt
index a889894..a0e099f 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt
@@ -63,7 +63,7 @@
             }
         }
 
-    inner class Transformer : IrElementTransformer<IrDeclarationParent> {
+    inner class Transformer : IrElementTransformer<IrDeclarationParent>() {
         override fun visitClass(declaration: IrClass, data: IrDeclarationParent) = super.visitClass(declaration, declaration)
 
         override fun visitConstructorCall(expression: IrConstructorCall, data: IrDeclarationParent): IrExpression {
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TypeOperatorLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TypeOperatorLowering.kt
index a7afe48..5ea4759 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TypeOperatorLowering.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/TypeOperatorLowering.kt
@@ -68,7 +68,7 @@
     private val icUtils = context.inlineClassesUtils
 
     override fun lower(irBody: IrBody, container: IrDeclaration) {
-        irBody.transformChildren(object : IrElementTransformer<IrDeclarationParent> {
+        irBody.transformChildren(object : IrElementTransformer<IrDeclarationParent>() {
             override fun visitDeclaration(declaration: IrDeclarationBase, data: IrDeclarationParent) =
                 super.visitDeclaration(declaration, declaration as? IrDeclarationParent ?: data)
 
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/CallsLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/CallsLowering.kt
index 20d3ff41..3c489e0 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/CallsLowering.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/CallsLowering.kt
@@ -34,7 +34,7 @@
     )
 
     override fun lower(irBody: IrBody, container: IrDeclaration) {
-        irBody.transformChildren(object : IrElementTransformer<IrDeclaration> {
+        irBody.transformChildren(object : IrElementTransformer<IrDeclaration>() {
             override fun visitFunction(declaration: IrFunction, data: IrDeclaration): IrStatement {
                 return super.visitFunction(declaration, declaration)
             }
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/cleanup/CleanupLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/cleanup/CleanupLowering.kt
index d263d9e..b396506 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/cleanup/CleanupLowering.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/cleanup/CleanupLowering.kt
@@ -29,7 +29,7 @@
     }
 }
 
-private class BlockRemover : IrElementVisitorVoid {
+private class BlockRemover : IrElementVisitorVoid() {
     override fun visitElement(element: IrElement) {
         element.acceptChildrenVoid(this)
     }
@@ -58,7 +58,7 @@
     }
 }
 
-private class CodeCleaner : IrElementVisitorVoid {
+private class CodeCleaner : IrElementVisitorVoid() {
 
     private fun IrStatementContainer.cleanUpStatements() {
         var unreachable = false
@@ -88,7 +88,7 @@
 
         var hasFakeNothingCalls = false
 
-        acceptVoid(object : IrElementVisitorVoid {
+        acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AbstractSuspendFunctionsLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AbstractSuspendFunctionsLowering.kt
index 89906f1..1cd7e5a 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AbstractSuspendFunctionsLowering.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AbstractSuspendFunctionsLowering.kt
@@ -81,7 +81,7 @@
             return SuspendFunctionKind.NEEDS_STATE_MACHINE            // Suspend lambdas always need coroutine implementation.
 
         var numberOfSuspendCalls = 0
-        body.acceptVoid(object : IrElementVisitorVoid {
+        body.acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
@@ -512,7 +512,7 @@
         val stateMachineFunction: IrFunction
     )
 
-    protected open class VariablesScopeTracker : IrElementVisitorVoid {
+    protected open class VariablesScopeTracker : IrElementVisitorVoid() {
 
         protected val scopeStack = mutableListOf<MutableSet<IrVariable>>(mutableSetOf())
 
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/StateMachineBuilder.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/StateMachineBuilder.kt
index ee185a8..a2d5804 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/StateMachineBuilder.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/StateMachineBuilder.kt
@@ -75,7 +75,7 @@
     private val thisSymbol: IrValueParameterSymbol,
     private val getSuspendResultAsType: (IrType) -> IrExpression,
     private val setSuspendResultValue: (IrExpression) -> IrStatement
-) : IrElementVisitorVoid {
+) : IrElementVisitorVoid() {
 
     private val loopMap = mutableMapOf<IrLoop, LoopBounds>()
     private val unit = context.irBuiltIns.unitType
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/SuspendLoweringUtils.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/SuspendLoweringUtils.kt
index 652ab34..25baec5 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/SuspendLoweringUtils.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/SuspendLoweringUtils.kt
@@ -23,7 +23,7 @@
 import org.jetbrains.kotlin.ir.util.isSuspend
 import org.jetbrains.kotlin.ir.visitors.*
 
-open class SuspendableNodesCollector(private val suspendableNodes: MutableSet<IrElement>) : IrElementVisitorVoid {
+open class SuspendableNodesCollector(private val suspendableNodes: MutableSet<IrElement>) : IrElementVisitorVoid() {
 
     private var hasSuspendableChildren = false
 
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/SyntheticAccessorLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/SyntheticAccessorLowering.kt
index 96a19f1..a629042 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/SyntheticAccessorLowering.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/SyntheticAccessorLowering.kt
@@ -27,7 +27,7 @@
 
 class SyntheticAccessorLowering(private val context: CommonBackendContext) : BodyLoweringPass {
 
-    private class CandidatesCollector(val candidates: MutableCollection<IrSimpleFunction>) : IrElementVisitorVoid {
+    private class CandidatesCollector(val candidates: MutableCollection<IrSimpleFunction>) : IrElementVisitorVoid() {
 
         private fun IrSimpleFunction.isTopLevelPrivate(): Boolean {
             if (visibility != DescriptorVisibilities.PRIVATE) return false
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/BaseIrElementToJsNodeTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/BaseIrElementToJsNodeTransformer.kt
index 2c044d1..79a6ff9 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/BaseIrElementToJsNodeTransformer.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/BaseIrElementToJsNodeTransformer.kt
@@ -10,7 +10,7 @@
 import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
 import org.jetbrains.kotlin.js.backend.ast.JsNode
 
-interface BaseIrElementToJsNodeTransformer<out R : JsNode, in D> : IrElementVisitor<R, D> {
+abstract class BaseIrElementToJsNodeTransformer<out R : JsNode, in D> : IrElementVisitor<R, D>() {
     override fun visitElement(element: IrElement, data: D): R {
         TODO(element)
     }
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrDeclarationToJsTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrDeclarationToJsTransformer.kt
index a7b231e..c977289 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrDeclarationToJsTransformer.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrDeclarationToJsTransformer.kt
@@ -11,7 +11,7 @@
 import org.jetbrains.kotlin.js.backend.ast.*
 
 @Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")
-class IrDeclarationToJsTransformer : BaseIrElementToJsNodeTransformer<JsStatement, JsGenerationContext> {
+class IrDeclarationToJsTransformer : BaseIrElementToJsNodeTransformer<JsStatement, JsGenerationContext>() {
 
     override fun visitSimpleFunction(declaration: IrSimpleFunction, context: JsGenerationContext): JsStatement {
         require(!declaration.isExpect)
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt
index 1eef205..841cb04 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt
@@ -18,7 +18,7 @@
 import org.jetbrains.kotlin.js.backend.ast.*
 
 @Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")
-class IrElementToJsExpressionTransformer : BaseIrElementToJsNodeTransformer<JsExpression, JsGenerationContext> {
+class IrElementToJsExpressionTransformer : BaseIrElementToJsNodeTransformer<JsExpression, JsGenerationContext>() {
 
     private fun JsGenerationContext.isClassInlineLike(irClass: IrClass) =
         staticContext.backendContext.inlineClassesUtils.isClassInlineLike(irClass)
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsStatementTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsStatementTransformer.kt
index 6aa5f5b..ea03368 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsStatementTransformer.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsStatementTransformer.kt
@@ -25,7 +25,7 @@
 import org.jetbrains.kotlin.js.backend.ast.*
 
 @Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")
-class IrElementToJsStatementTransformer : BaseIrElementToJsNodeTransformer<JsStatement, JsGenerationContext> {
+class IrElementToJsStatementTransformer : BaseIrElementToJsNodeTransformer<JsStatement, JsGenerationContext>() {
 
     override fun visitFunction(declaration: IrFunction, data: JsGenerationContext): JsStatement {
         error("All functions must be already lowered")
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrFileToJsTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrFileToJsTransformer.kt
index ed8ad55..9314733 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrFileToJsTransformer.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrFileToJsTransformer.kt
@@ -11,7 +11,7 @@
 import org.jetbrains.kotlin.js.backend.ast.JsBlock
 import org.jetbrains.kotlin.js.backend.ast.JsCompositeBlock
 
-class IrFileToJsTransformer(private val useBareParameterNames: Boolean = false) : BaseIrElementToJsNodeTransformer<JsBlock, JsStaticContext> {
+class IrFileToJsTransformer(private val useBareParameterNames: Boolean = false) : BaseIrElementToJsNodeTransformer<JsBlock, JsStaticContext>() {
     override fun visitFile(declaration: IrFile, data: JsStaticContext): JsBlock {
         val fileContext = JsGenerationContext(
             currentFile = declaration,
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrFunctionToJsTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrFunctionToJsTransformer.kt
index 9a8ce82..111fd930 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrFunctionToJsTransformer.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrFunctionToJsTransformer.kt
@@ -14,7 +14,7 @@
 import org.jetbrains.kotlin.js.backend.ast.JsFunction
 
 @Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")
-class IrFunctionToJsTransformer : BaseIrElementToJsNodeTransformer<JsFunction, JsGenerationContext> {
+class IrFunctionToJsTransformer : BaseIrElementToJsNodeTransformer<JsFunction, JsGenerationContext>() {
     override fun visitSimpleFunction(declaration: IrSimpleFunction, context: JsGenerationContext): JsFunction {
         val parentClass = declaration.parent as? IrClass
         val isInterfaceDefaultImpl = parentClass?.isInterface ?: false
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsCode.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsCode.kt
index a8c6af8..ae85976 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsCode.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsCode.kt
@@ -66,7 +66,7 @@
 fun foldString(expression: IrExpression, context: JsIrBackendContext?): String? {
     val builder = StringBuilder()
     var foldingFailed = false
-    expression.acceptVoid(object : IrElementVisitorVoid {
+    expression.acceptVoid(object : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement) {
             foldingFailed = true
         }
@@ -123,7 +123,7 @@
     return builder.toString()
 }
 
-private class InitFunVisitor(private val context: JsIrBackendContext?) : IrElementVisitorVoid {
+private class InitFunVisitor(private val context: JsIrBackendContext?) : IrElementVisitorVoid() {
     override fun visitElement(element: IrElement) {
         element.acceptChildrenVoid(this)
     }
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/Keeper.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/Keeper.kt
index c4ede90..8e8e023 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/Keeper.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/Keeper.kt
@@ -10,7 +10,7 @@
 import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable
 import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
 
-class Keeper(private val keep: Set<String>) : IrElementVisitor<Unit, Keeper.KeepData> {
+class Keeper(private val keep: Set<String>) : IrElementVisitor<Unit, Keeper.KeepData>() {
     private val keptDeclarations: MutableSet<IrDeclaration> = mutableSetOf()
 
     fun shouldKeep(declaration: IrDeclaration): Boolean {
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/NameTables.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/NameTables.kt
index b28f954..cf900cb 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/NameTables.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/NameTables.kt
@@ -176,7 +176,7 @@
     return calculateJsFunctionSignature(declarationSignature, context)
 }
 
-class LocalNameGenerator(val variableNames: NameTable<IrDeclaration>) : IrElementVisitorVoid {
+class LocalNameGenerator(val variableNames: NameTable<IrDeclaration>) : IrElementVisitorVoid() {
     val localLoopNames = NameTable<IrLoop>()
     val localReturnableBlockNames = NameTable<IrReturnableBlock>()
 
diff --git a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt
index 1107b90..4d890ce 100644
--- a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt
+++ b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt
@@ -137,7 +137,7 @@
     val classCodegen: ClassCodegen,
     val smap: SourceMapper,
     val reifiedTypeParametersUsages: ReifiedTypeParametersUsages,
-) : IrElementVisitor<PromisedValue, BlockInfo>, BaseExpressionCodegen {
+) : IrElementVisitor<PromisedValue, BlockInfo>(), BaseExpressionCodegen {
 
     override fun toString(): String = signature.toString()
 
@@ -1122,7 +1122,7 @@
     // such as D8 will see locals information that makes no sense.
     private fun endUnreferencedDoWhileLocals(blockInfo: BlockInfo, loop: IrDoWhileLoop, continueLabel: Label) {
         val referencedValues = hashSetOf<IrValueSymbol>()
-        loop.condition.acceptVoid(object : IrElementVisitorVoid {
+        loop.condition.acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt
index dda5c52..2f1a1e8 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt
@@ -232,7 +232,7 @@
     name = "InitializersCleanup",
     description = "Remove non-static anonymous initializers and non-constant non-static field init expressions",
     stickyPostconditions = setOf(fun(irFile: IrFile) {
-        irFile.acceptVoid(object : IrElementVisitorVoid {
+        irFile.acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt
index 021ec6a..35c78ee 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt
@@ -290,7 +290,7 @@
 
     private fun addContinuationObjectAndContinuationParameterToSuspendFunctions(irFile: IrFile) {
         class MutableFlag(var capturesCrossinline: Boolean)
-        irFile.accept(object : IrElementTransformer<MutableFlag?> {
+        irFile.accept(object : IrElementTransformer<MutableFlag?>() {
             override fun visitClass(declaration: IrClass, data: MutableFlag?): IrStatement {
                 declaration.transformDeclarationsFlat {
                     if (it is IrSimpleFunction && it.isSuspend)
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/AssertionLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/AssertionLowering.kt
index 313bcda..2e18a79 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/AssertionLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/AssertionLowering.kt
@@ -35,7 +35,7 @@
 
 private class AssertionLowering(private val context: JvmBackendContext) :
     FileLoweringPass,
-    IrElementTransformer<AssertionLowering.ClassInfo?>
+    IrElementTransformer<AssertionLowering.ClassInfo?>()
 {
     // Keeps track of the $assertionsDisabled field, which we generate lazily for classes containing
     // assertions when compiled with -Xassertions=jvm.
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/GenerateMultifileFacades.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/GenerateMultifileFacades.kt
index 44c6d0c..c416196 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/GenerateMultifileFacades.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/GenerateMultifileFacades.kt
@@ -290,7 +290,7 @@
 
 private class UpdateFunctionCallSites(
     private val functionDelegates: MutableMap<IrSimpleFunction, IrSimpleFunction>
-) : FileLoweringPass, IrElementTransformer<IrFunction?> {
+) : FileLoweringPass, IrElementTransformer<IrFunction?>() {
     override fun lower(irFile: IrFile) {
         irFile.transformChildren(this, null)
     }
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InheritedDefaultMethodsOnClassesLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InheritedDefaultMethodsOnClassesLowering.kt
index eedd9b8..a445bfb 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InheritedDefaultMethodsOnClassesLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InheritedDefaultMethodsOnClassesLowering.kt
@@ -161,7 +161,7 @@
     description = "Replace overridden symbols for methods inherited from interfaces to classes"
 )
 
-private class ReplaceDefaultImplsOverriddenSymbols(private val context: JvmBackendContext) : FileLoweringPass, IrElementVisitorVoid {
+private class ReplaceDefaultImplsOverriddenSymbols(private val context: JvmBackendContext) : FileLoweringPass, IrElementVisitorVoid() {
     override fun lower(irFile: IrFile) {
         irFile.acceptVoid(this)
     }
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InlineCallableReferenceToLambda.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InlineCallableReferenceToLambda.kt
index 34db7d0..bdee12f 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InlineCallableReferenceToLambda.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InlineCallableReferenceToLambda.kt
@@ -51,7 +51,7 @@
 
 const val STUB_FOR_INLINING = "stub_for_inlining"
 
-private class InlineCallableReferenceToLambdaVisitor(val context: JvmBackendContext) : IrElementVisitor<Unit, IrDeclaration?> {
+private class InlineCallableReferenceToLambdaVisitor(val context: JvmBackendContext) : IrElementVisitor<Unit, IrDeclaration?>() {
     override fun visitElement(element: IrElement, data: IrDeclaration?) =
         element.acceptChildren(this, element as? IrDeclaration ?: data)
 
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmArgumentNullabilityAssertionsLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmArgumentNullabilityAssertionsLowering.kt
index c654b5d..80fe2de 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmArgumentNullabilityAssertionsLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmArgumentNullabilityAssertionsLowering.kt
@@ -31,7 +31,7 @@
 }
 
 private class JvmArgumentNullabilityAssertionsLowering(context: JvmBackendContext) : FileLoweringPass,
-    IrElementTransformer<AssertionScope> {
+    IrElementTransformer<AssertionScope>() {
 
     private val isWithUnifiedNullChecks = context.state.unifiedNullChecks
     private val isCallAssertionsDisabled = context.state.isCallAssertionsDisabled
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmMultiFieldValueClassLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmMultiFieldValueClassLowering.kt
index 7971958..3f81da4 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmMultiFieldValueClassLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmMultiFieldValueClassLowering.kt
@@ -1085,7 +1085,7 @@
                         standaloneExpressions.add(statement.value)
                         resultVariables.removeLast()
                         block.statements.removeLast()
-                        statement.value.acceptVoid(object : IrElementVisitorVoid {
+                        statement.value.acceptVoid(object : IrElementVisitorVoid() {
                             override fun visitElement(element: IrElement) {
                                 element.acceptChildrenVoid(this)
                             }
@@ -1276,7 +1276,7 @@
      */
     private fun IrBody.removeAllExtraBoxes() {
         // data is whether the expression result is used
-        accept(object : IrElementVisitor<Unit, Boolean> {
+        accept(object : IrElementVisitor<Unit, Boolean>() {
             override fun visitElement(element: IrElement, data: Boolean) {
                 element.acceptChildren(this, true) // uses what is inside
             }
@@ -1368,7 +1368,7 @@
     val variableUsages = mutableMapOf<BlockOrBody, MutableSet<IrVariable>>()
     val childrenBlocks = mutableMapOf<BlockOrBody, MutableList<BlockOrBody>>()
 
-    body.element.acceptVoid(object : IrElementVisitorVoid {
+    body.element.acceptVoid(object : IrElementVisitorVoid() {
         private val stack = mutableListOf<BlockOrBody>()
         override fun visitElement(element: IrElement) {
             element.acceptChildren(this, null)
@@ -1414,7 +1414,7 @@
 
 private fun IrStatement.containsUsagesOf(variablesSet: Set<IrVariable>): Boolean {
     var used = false
-    acceptVoid(object : IrElementVisitorVoid {
+    acceptVoid(object : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement) {
             if (!used) {
                 element.acceptChildrenVoid(this)
@@ -1531,7 +1531,7 @@
 }
 
 private fun BlockOrBody.extractVariablesSettersToOuterPossibleBlock(variables: Set<IrVariable>) {
-    element.acceptVoid(object : IrElementVisitorVoid {
+    element.acceptVoid(object : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement) {
             element.acceptChildrenVoid(this)
         }
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmOptimizationLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmOptimizationLowering.kt
index 1f7986e..1eba9ef 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmOptimizationLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmOptimizationLowering.kt
@@ -82,7 +82,7 @@
     private inner class Transformer(
         private val fileEntry: IrFileEntry,
         private val inlineScopeResolver: IrInlineScopeResolver
-    ) : IrElementTransformer<IrDeclaration?> {
+    ) : IrElementTransformer<IrDeclaration?>() {
 
         private val dontTouchTemporaryVals = HashSet<IrVariable>()
 
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassAbstractLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassAbstractLowering.kt
index 5b382e3..9111871 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassAbstractLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassAbstractLowering.kt
@@ -244,7 +244,7 @@
 
 
     // Functions for common lowering dispatching
-    private inner class NeedsToVisit : IrElementVisitor<Boolean, Nothing?> {
+    private inner class NeedsToVisit : IrElementVisitor<Boolean, Nothing?>() {
         override fun visitElement(element: IrElement, data: Nothing?): Boolean = false
         override fun visitClass(declaration: IrClass, data: Nothing?): Boolean =
             declaration.isSpecificLoweringLogicApplicable() || declaration.declarations.any { it.accept(this, null) }
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassLoweringDispatcher.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassLoweringDispatcher.kt
index 40b69e2..8318b0f 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassLoweringDispatcher.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassLoweringDispatcher.kt
@@ -70,7 +70,7 @@
         .transformStatement(inlineClassLowering)
 
     private fun IrElement.requiresHandling(lowering: JvmValueClassAbstractLowering) =
-        accept(object : IrElementVisitor<Boolean, Nothing?> {
+        accept(object : IrElementVisitor<Boolean, Nothing?>() {
             override fun visitElement(element: IrElement, data: Nothing?): Boolean = false
             override fun visitClass(declaration: IrClass, data: Nothing?): Boolean =
                 lowering.needsToVisitClassNew(declaration) || super.visitClass(declaration, data)
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/RecordEnclosingMethodsLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/RecordEnclosingMethodsLowering.kt
index 2268d84..47d5e78 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/RecordEnclosingMethodsLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/RecordEnclosingMethodsLowering.kt
@@ -30,7 +30,7 @@
 
 private class RecordEnclosingMethodsLowering(val context: JvmBackendContext) : FileLoweringPass {
     override fun lower(irFile: IrFile) =
-        irFile.accept(object : IrElementVisitor<Unit, IrFunction?> {
+        irFile.accept(object : IrElementVisitor<Unit, IrFunction?>() {
             override fun visitElement(element: IrElement, data: IrFunction?) =
                 element.acceptChildren(this, element as? IrFunction ?: data)
 
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/RepeatedAnnotationLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/RepeatedAnnotationLowering.kt
index 60e66d5..ac6e0d5 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/RepeatedAnnotationLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/RepeatedAnnotationLowering.kt
@@ -33,7 +33,7 @@
     description = "Enclose repeated annotations in a container annotation, generating a container class if needed"
 )
 
-class RepeatedAnnotationLowering(private val context: JvmBackendContext) : FileLoweringPass, IrElementVisitorVoid {
+class RepeatedAnnotationLowering(private val context: JvmBackendContext) : FileLoweringPass, IrElementVisitorVoid() {
     override fun lower(irFile: IrFile) {
         irFile.acceptVoid(this)
     }
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt
index 85c9edf..61964c6 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt
@@ -110,7 +110,7 @@
     private fun collectCapturingClasses(irScript: IrScript, typeRemapper: SimpleTypeRemapper): Set<IrClassImpl> {
         val annotator = ClosureAnnotator(irScript, irScript)
         val capturingClasses = mutableSetOf<IrClassImpl>()
-        val collector = object : IrElementVisitorVoid {
+        val collector = object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
@@ -439,7 +439,7 @@
     val innerClassesSupport: JvmInnerClassesSupport,
     val earlierScriptsField: IrField?,
     val implicitReceiversFieldsWithParameters: Collection<Pair<IrField, IrValueParameter>>
-) : IrElementTransformer<ScriptToClassTransformerContext> {
+) : IrElementTransformer<ScriptToClassTransformerContext>() {
 
     private fun IrType.remapType() = typeRemapper.remapType(this)
 
@@ -797,7 +797,7 @@
     }
 }
 
-private class ScriptFixLambdasTransformer(val irScriptClass: IrClass) : IrElementTransformer<ScriptFixLambdasTransformerContext> {
+private class ScriptFixLambdasTransformer(val irScriptClass: IrClass) : IrElementTransformer<ScriptFixLambdasTransformerContext>() {
 
     private fun unexpectedElement(element: IrElement): Nothing =
         throw IllegalArgumentException("Unsupported element type: $element")
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SuspendLambdaLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SuspendLambdaLowering.kt
index 91dc928..93dc2c2 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SuspendLambdaLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SuspendLambdaLowering.kt
@@ -161,7 +161,7 @@
 
             // marking the parameters referenced in the function
             function.acceptChildrenVoid(
-                object : IrElementVisitorVoid {
+                object : IrElementVisitorVoid() {
                     override fun visitElement(element: IrElement) = element.acceptChildrenVoid(this)
 
                     override fun visitGetValue(expression: IrGetValue) {
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TailCallOptimizationLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TailCallOptimizationLowering.kt
index b815190..fcd2838 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TailCallOptimizationLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TailCallOptimizationLowering.kt
@@ -32,7 +32,7 @@
 // code which is understandable by old BE's tail-call optimizer.
 private class TailCallOptimizationLowering(private val context: JvmBackendContext) : FileLoweringPass {
     override fun lower(irFile: IrFile) {
-        irFile.transformChildren(object : IrElementTransformer<TailCallOptimizationData?> {
+        irFile.transformChildren(object : IrElementTransformer<TailCallOptimizationData?>() {
             override fun visitSimpleFunction(declaration: IrSimpleFunction, data: TailCallOptimizationData?) =
                 super.visitSimpleFunction(declaration, if (declaration.isSuspend) TailCallOptimizationData(declaration) else null)
 
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt
index a7d8577..62e38df 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt
@@ -781,7 +781,7 @@
     private fun IrElement.extents(): Pair<Int, Int> {
         var startOffset = Int.MAX_VALUE
         var endOffset = 0
-        acceptVoid(object : IrElementVisitorVoid {
+        acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
                 if (element.startOffset in 0 until startOffset)
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/UniqueLoopLabelsLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/UniqueLoopLabelsLowering.kt
index b657053..06d4673 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/UniqueLoopLabelsLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/UniqueLoopLabelsLowering.kt
@@ -22,7 +22,7 @@
 
 private class UniqueLoopLabelsLowering(val context: JvmBackendContext) : FileLoweringPass {
     override fun lower(irFile: IrFile) {
-        irFile.accept(object : IrElementVisitor<Unit, String> {
+        irFile.accept(object : IrElementVisitor<Unit, String>() {
             // This counter is intentionally not local to every declaration because their names might clash.
             private var counter = 0
 
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrInlineReferenceLocator.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrInlineReferenceLocator.kt
index 5da52d2..9c92f2b 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrInlineReferenceLocator.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrInlineReferenceLocator.kt
@@ -16,7 +16,7 @@
 import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
 import org.jetbrains.kotlin.name.FqName
 
-abstract class IrInlineReferenceLocator(private val context: JvmBackendContext) : IrElementVisitor<Unit, IrDeclaration?> {
+abstract class IrInlineReferenceLocator(private val context: JvmBackendContext) : IrElementVisitor<Unit, IrDeclaration?>() {
     override fun visitElement(element: IrElement, data: IrDeclaration?) =
         element.acceptChildren(this, if (element is IrDeclaration && element !is IrVariable) element else data)
 
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrUtils.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrUtils.kt
index a4a995f..4696bbd 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrUtils.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrUtils.kt
@@ -294,7 +294,7 @@
 
 inline fun IrElement.hasChild(crossinline block: (IrElement) -> Boolean): Boolean {
     var result = false
-    acceptChildren(object : IrElementVisitorVoid {
+    acceptChildren(object : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement) = when {
             result -> Unit
             block(element) -> result = true
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/dce/Dce.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/dce/Dce.kt
index f889306..7655374 100644
--- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/dce/Dce.kt
+++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/dce/Dce.kt
@@ -32,7 +32,7 @@
 }
 
 private fun buildRoots(modules: List<IrModuleFragment>, context: WasmBackendContext): List<IrDeclaration> = buildList {
-    val declarationsCollector = object : IrElementVisitorVoid {
+    val declarationsCollector = object : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement): Unit = element.acceptChildrenVoid(this)
         override fun visitBody(body: IrBody): Unit = Unit // Skip
 
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/dce/WasmUselessDeclarationsRemover.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/dce/WasmUselessDeclarationsRemover.kt
index 3724aa9..3992389 100644
--- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/dce/WasmUselessDeclarationsRemover.kt
+++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/dce/WasmUselessDeclarationsRemover.kt
@@ -17,7 +17,7 @@
 
 class WasmUselessDeclarationsRemover(
     private val usefulDeclarations: Set<IrDeclaration>
-) : IrElementVisitorVoid {
+) : IrElementVisitorVoid() {
     override fun visitElement(element: IrElement) {
         element.acceptChildrenVoid(this)
     }
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt
index 3422b5f..81f060c 100644
--- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt
+++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt
@@ -34,7 +34,7 @@
     val context: WasmFunctionCodegenContext,
     private val hierarchyDisjointUnions: DisjointUnions<IrClassSymbol>,
     private val isGetUnitFunction: Boolean,
-) : IrElementVisitorVoid {
+) : IrElementVisitorVoid() {
     val body: WasmExpressionBuilder = context.bodyGen
 
     // Shortcuts
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/DeclarationGenerator.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/DeclarationGenerator.kt
index 3a0fc44..7adbcea 100644
--- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/DeclarationGenerator.kt
+++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/DeclarationGenerator.kt
@@ -33,7 +33,7 @@
     val context: WasmModuleCodegenContext,
     private val allowIncompleteImplementations: Boolean,
     private val hierarchyDisjointUnions: DisjointUnions<IrClassSymbol>,
-) : IrElementVisitorVoid {
+) : IrElementVisitorVoid() {
 
     // Shortcuts
     private val backendContext: WasmBackendContext = context.backendContext
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/WasmModuleFragmentGenerator.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/WasmModuleFragmentGenerator.kt
index f068b9a..3ff5b4c 100644
--- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/WasmModuleFragmentGenerator.kt
+++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/WasmModuleFragmentGenerator.kt
@@ -35,7 +35,7 @@
             hierarchyDisjointUnions,
         )
 
-    private val interfaceCollector = object : IrElementVisitorVoid {
+    private val interfaceCollector = object : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement) { }
 
         override fun visitClass(declaration: IrClass) {
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/ComplexExternalDeclarationsToTopLevelFunctionsLowering.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/ComplexExternalDeclarationsToTopLevelFunctionsLowering.kt
index 9ed824c..19ed761 100644
--- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/ComplexExternalDeclarationsToTopLevelFunctionsLowering.kt
+++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/ComplexExternalDeclarationsToTopLevelFunctionsLowering.kt
@@ -59,7 +59,7 @@
     }
 
     fun processExternalDeclaration(declaration: IrDeclaration) {
-        declaration.acceptVoid(object : IrElementVisitorVoid {
+        declaration.acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 error("Unknown external element ${element::class}")
             }
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/EraseVirtualDispatchReceiverParametersTypes.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/EraseVirtualDispatchReceiverParametersTypes.kt
index d3393d2..d62c9cd 100644
--- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/EraseVirtualDispatchReceiverParametersTypes.kt
+++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/EraseVirtualDispatchReceiverParametersTypes.kt
@@ -53,7 +53,7 @@
  */
 class EraseVirtualDispatchReceiverParametersTypes(val context: CommonBackendContext) : FileLoweringPass {
     override fun lower(irFile: IrFile) {
-        irFile.acceptChildrenVoid(object : IrElementVisitorVoid {
+        irFile.acceptChildrenVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/FieldInitializersLowering.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/FieldInitializersLowering.kt
index c163b9e..85bc2cb 100644
--- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/FieldInitializersLowering.kt
+++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/FieldInitializersLowering.kt
@@ -35,7 +35,7 @@
         val builder = context.createIrBuilder(context.fieldInitFunction.symbol)
         val startFunctionBody = context.fieldInitFunction.body as IrBlockBody
 
-        irFile.acceptChildrenVoid(object : IrElementVisitorVoid {
+        irFile.acceptChildrenVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/TryCatchCanonicalization.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/TryCatchCanonicalization.kt
index 7ecf9e6..49c726c 100644
--- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/TryCatchCanonicalization.kt
+++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/TryCatchCanonicalization.kt
@@ -73,7 +73,7 @@
 
         irFile.transformChildrenVoid(FinallyBlocksLowering(ctx, ctx.irBuiltIns.throwableType))
 
-        irFile.acceptVoid(object : IrElementVisitorVoid {
+        irFile.acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/VirtualDispatchReceiverExtraction.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/VirtualDispatchReceiverExtraction.kt
index 87608ad..d5919ac 100644
--- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/VirtualDispatchReceiverExtraction.kt
+++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/VirtualDispatchReceiverExtraction.kt
@@ -31,7 +31,7 @@
  */
 class VirtualDispatchReceiverExtraction(val context: CommonBackendContext) : FileLoweringPass {
     override fun lower(irFile: IrFile) {
-        irFile.acceptChildrenVoid(object : IrElementVisitorVoid {
+        irFile.acceptChildrenVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt
index cc17c63..aaaa07f 100644
--- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt
+++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt
@@ -19,7 +19,7 @@
 
 class IrCompileTimeChecker(
     containingDeclaration: IrElement? = null, private val mode: EvaluationMode = EvaluationMode.WITH_ANNOTATIONS
-) : IrElementVisitor<Boolean, Nothing?> {
+) : IrElementVisitor<Boolean, Nothing?>() {
     private var contextExpression: IrCall? = null
     private val visitedStack = mutableListOf<IrElement>().apply { if (containingDeclaration != null) add(containingDeclaration) }
 
diff --git a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/FunctionGenerator.kt b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/FunctionGenerator.kt
index 03c7288..d5e20e5 100644
--- a/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/FunctionGenerator.kt
+++ b/compiler/ir/ir.ir2cfg/src/org/jetbrains/kotlin/ir2cfg/generators/FunctionGenerator.kt
@@ -32,7 +32,7 @@
         return builder.build()
     }
 
-    inner class FunctionVisitor : IrElementVisitor<IrStatement?, Boolean> {
+    inner class FunctionVisitor : IrElementVisitor<IrStatement?, Boolean>() {
 
         private inline fun <reified IE : IrElement> IE.process(includeSelf: Boolean = true) = this.accept(this@FunctionVisitor, includeSelf)
 
diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AnnotationGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AnnotationGenerator.kt
index 81c0170..7c0a112 100644
--- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AnnotationGenerator.kt
+++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AnnotationGenerator.kt
@@ -11,7 +11,7 @@
 import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
 import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
 
-class AnnotationGenerator(context: GeneratorContext) : IrElementVisitorVoid {
+class AnnotationGenerator(context: GeneratorContext) : IrElementVisitorVoid() {
     private val typeTranslator = context.typeTranslator
     private val constantValueGenerator = context.constantValueGenerator
 
diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ExpectDependencyGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ExpectDependencyGenerator.kt
index 336b73d..21dc98b 100644
--- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ExpectDependencyGenerator.kt
+++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ExpectDependencyGenerator.kt
@@ -29,7 +29,7 @@
 private class ExpectDependencyGenerator(
     private val expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>,
     private val symbolTable: SymbolTable,
-) : IrElementVisitorVoid {
+) : IrElementVisitorVoid() {
     private fun <T> T.forEachExpect(body: (DeclarationDescriptor) -> Unit) where T : IrDeclaration {
         this.descriptor.findExpects().forEach {
             body(it)
diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/IrSyntheticDeclarationGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/IrSyntheticDeclarationGenerator.kt
index 220604f..da2f540 100644
--- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/IrSyntheticDeclarationGenerator.kt
+++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/IrSyntheticDeclarationGenerator.kt
@@ -19,7 +19,7 @@
 import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
 import org.jetbrains.kotlin.resolve.DescriptorUtils
 
-class IrSyntheticDeclarationGenerator(context: GeneratorContext) : IrElementVisitorVoid {
+class IrSyntheticDeclarationGenerator(context: GeneratorContext) : IrElementVisitorVoid() {
     fun generateSyntheticDeclarations(file: IrFile) {
         try {
             file.acceptChildrenVoid(this)
diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/intermediate/ArrayAccessAssignmentReceiver.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/intermediate/ArrayAccessAssignmentReceiver.kt
index d718ecd..e46c346 100644
--- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/intermediate/ArrayAccessAssignmentReceiver.kt
+++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/intermediate/ArrayAccessAssignmentReceiver.kt
@@ -163,7 +163,7 @@
 
     private class SamConversionsCollector(
         private val compoundAssignmentInfo: CompoundAssignmentInfo
-    ) : IrElementVisitorVoid {
+    ) : IrElementVisitorVoid() {
         val samConversionsPerVariable = HashMap<IrVariable, MutableList<IrTypeOperatorCall>>()
 
         override fun visitElement(element: IrElement) {
diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/transformations/InsertImplicitCasts.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/transformations/InsertImplicitCasts.kt
index 66f317b..b803932 100644
--- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/transformations/InsertImplicitCasts.kt
+++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/transformations/InsertImplicitCasts.kt
@@ -86,7 +86,7 @@
 
     private fun postprocessReturnExpressions(element: IrElement) {
         // We need to re-create type parameter context for casts of postprocessed return values.
-        element.acceptChildrenVoid(object : IrElementVisitorVoid {
+        element.acceptChildrenVoid(object : IrElementVisitorVoid() {
             override fun visitReturn(expression: IrReturn) {
                 super.visitReturn(expression)
                 val expectedReturnType = expectedFunctionExpressionReturnType[expression.returnTargetSymbol.descriptor] ?: return
diff --git a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt
index ba165d9..ead0d60 100644
--- a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt
+++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt
@@ -93,7 +93,7 @@
 import org.jetbrains.kotlin.ir.expressions.IrWhen
 import org.jetbrains.kotlin.ir.expressions.IrWhileLoop
 
-interface IrElementTransformer<in D> : IrElementVisitor<IrElement, D> {
+abstract class IrElementTransformer<in D> : IrElementVisitor<IrElement, D>() {
     override fun visitElement(element: IrElement, data: D): IrElement {
         element.transformChildren(this, data)
         return element
diff --git a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt
index 8db6433..11dc33e 100644
--- a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt
+++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt
@@ -92,230 +92,230 @@
 import org.jetbrains.kotlin.ir.expressions.IrWhen
 import org.jetbrains.kotlin.ir.expressions.IrWhileLoop
 
-interface IrElementVisitor<out R, in D> {
-    fun visitElement(element: IrElement, data: D): R
+abstract class IrElementVisitor<out R, in D> {
+    abstract fun visitElement(element: IrElement, data: D): R
 
-    fun visitDeclaration(declaration: IrDeclarationBase, data: D): R =
+    open fun visitDeclaration(declaration: IrDeclarationBase, data: D): R =
             visitElement(declaration, data)
 
-    fun visitValueParameter(declaration: IrValueParameter, data: D): R =
+    open fun visitValueParameter(declaration: IrValueParameter, data: D): R =
             visitDeclaration(declaration, data)
 
-    fun visitClass(declaration: IrClass, data: D): R = visitDeclaration(declaration, data)
+    open fun visitClass(declaration: IrClass, data: D): R = visitDeclaration(declaration, data)
 
-    fun visitAnonymousInitializer(declaration: IrAnonymousInitializer, data: D): R =
+    open fun visitAnonymousInitializer(declaration: IrAnonymousInitializer, data: D): R =
             visitDeclaration(declaration, data)
 
-    fun visitTypeParameter(declaration: IrTypeParameter, data: D): R =
+    open fun visitTypeParameter(declaration: IrTypeParameter, data: D): R =
             visitDeclaration(declaration, data)
 
-    fun visitFunction(declaration: IrFunction, data: D): R = visitDeclaration(declaration,
+    open fun visitFunction(declaration: IrFunction, data: D): R = visitDeclaration(declaration,
             data)
 
-    fun visitConstructor(declaration: IrConstructor, data: D): R =
+    open fun visitConstructor(declaration: IrConstructor, data: D): R =
             visitFunction(declaration, data)
 
-    fun visitEnumEntry(declaration: IrEnumEntry, data: D): R =
+    open fun visitEnumEntry(declaration: IrEnumEntry, data: D): R =
             visitDeclaration(declaration, data)
 
-    fun visitErrorDeclaration(declaration: IrErrorDeclaration, data: D): R =
+    open fun visitErrorDeclaration(declaration: IrErrorDeclaration, data: D): R =
             visitDeclaration(declaration, data)
 
-    fun visitField(declaration: IrField, data: D): R = visitDeclaration(declaration, data)
+    open fun visitField(declaration: IrField, data: D): R = visitDeclaration(declaration, data)
 
-    fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty, data: D): R =
+    open fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty, data: D): R =
             visitDeclaration(declaration, data)
 
-    fun visitModuleFragment(declaration: IrModuleFragment, data: D): R =
+    open fun visitModuleFragment(declaration: IrModuleFragment, data: D): R =
             visitElement(declaration, data)
 
-    fun visitProperty(declaration: IrProperty, data: D): R = visitDeclaration(declaration,
+    open fun visitProperty(declaration: IrProperty, data: D): R = visitDeclaration(declaration,
             data)
 
-    fun visitScript(declaration: IrScript, data: D): R = visitDeclaration(declaration,
+    open fun visitScript(declaration: IrScript, data: D): R = visitDeclaration(declaration,
             data)
 
-    fun visitSimpleFunction(declaration: IrSimpleFunction, data: D): R =
+    open fun visitSimpleFunction(declaration: IrSimpleFunction, data: D): R =
             visitFunction(declaration, data)
 
-    fun visitTypeAlias(declaration: IrTypeAlias, data: D): R =
+    open fun visitTypeAlias(declaration: IrTypeAlias, data: D): R =
             visitDeclaration(declaration, data)
 
-    fun visitVariable(declaration: IrVariable, data: D): R = visitDeclaration(declaration,
+    open fun visitVariable(declaration: IrVariable, data: D): R = visitDeclaration(declaration,
             data)
 
-    fun visitPackageFragment(declaration: IrPackageFragment, data: D): R =
+    open fun visitPackageFragment(declaration: IrPackageFragment, data: D): R =
             visitElement(declaration, data)
 
-    fun visitExternalPackageFragment(declaration: IrExternalPackageFragment, data: D): R =
+    open fun visitExternalPackageFragment(declaration: IrExternalPackageFragment, data: D): R =
             visitPackageFragment(declaration, data)
 
-    fun visitFile(declaration: IrFile, data: D): R = visitPackageFragment(declaration,
+    open fun visitFile(declaration: IrFile, data: D): R = visitPackageFragment(declaration,
             data)
 
-    fun visitExpression(expression: IrExpression, data: D): R = visitElement(expression,
+    open fun visitExpression(expression: IrExpression, data: D): R = visitElement(expression,
             data)
 
-    fun visitBody(body: IrBody, data: D): R = visitElement(body, data)
+    open fun visitBody(body: IrBody, data: D): R = visitElement(body, data)
 
-    fun visitExpressionBody(body: IrExpressionBody, data: D): R = visitBody(body, data)
+    open fun visitExpressionBody(body: IrExpressionBody, data: D): R = visitBody(body, data)
 
-    fun visitBlockBody(body: IrBlockBody, data: D): R = visitBody(body, data)
+    open fun visitBlockBody(body: IrBlockBody, data: D): R = visitBody(body, data)
 
-    fun visitDeclarationReference(expression: IrDeclarationReference, data: D): R =
+    open fun visitDeclarationReference(expression: IrDeclarationReference, data: D): R =
             visitExpression(expression, data)
 
-    fun visitMemberAccess(expression: IrMemberAccessExpression<*>, data: D): R =
+    open fun visitMemberAccess(expression: IrMemberAccessExpression<*>, data: D): R =
             visitDeclarationReference(expression, data)
 
-    fun visitFunctionAccess(expression: IrFunctionAccessExpression, data: D): R =
+    open fun visitFunctionAccess(expression: IrFunctionAccessExpression, data: D): R =
             visitMemberAccess(expression, data)
 
-    fun visitConstructorCall(expression: IrConstructorCall, data: D): R =
+    open fun visitConstructorCall(expression: IrConstructorCall, data: D): R =
             visitFunctionAccess(expression, data)
 
-    fun visitSingletonReference(expression: IrGetSingletonValue, data: D): R =
+    open fun visitSingletonReference(expression: IrGetSingletonValue, data: D): R =
             visitDeclarationReference(expression, data)
 
-    fun visitGetObjectValue(expression: IrGetObjectValue, data: D): R =
+    open fun visitGetObjectValue(expression: IrGetObjectValue, data: D): R =
             visitSingletonReference(expression, data)
 
-    fun visitGetEnumValue(expression: IrGetEnumValue, data: D): R =
+    open fun visitGetEnumValue(expression: IrGetEnumValue, data: D): R =
             visitSingletonReference(expression, data)
 
-    fun visitRawFunctionReference(expression: IrRawFunctionReference, data: D): R =
+    open fun visitRawFunctionReference(expression: IrRawFunctionReference, data: D): R =
             visitDeclarationReference(expression, data)
 
-    fun visitContainerExpression(expression: IrContainerExpression, data: D): R =
+    open fun visitContainerExpression(expression: IrContainerExpression, data: D): R =
             visitExpression(expression, data)
 
-    fun visitBlock(expression: IrBlock, data: D): R = visitContainerExpression(expression,
+    open fun visitBlock(expression: IrBlock, data: D): R = visitContainerExpression(expression,
             data)
 
-    fun visitComposite(expression: IrComposite, data: D): R =
+    open fun visitComposite(expression: IrComposite, data: D): R =
             visitContainerExpression(expression, data)
 
-    fun visitSyntheticBody(body: IrSyntheticBody, data: D): R = visitBody(body, data)
+    open fun visitSyntheticBody(body: IrSyntheticBody, data: D): R = visitBody(body, data)
 
-    fun visitBreakContinue(jump: IrBreakContinue, data: D): R = visitExpression(jump, data)
+    open fun visitBreakContinue(jump: IrBreakContinue, data: D): R = visitExpression(jump, data)
 
-    fun visitBreak(jump: IrBreak, data: D): R = visitBreakContinue(jump, data)
+    open fun visitBreak(jump: IrBreak, data: D): R = visitBreakContinue(jump, data)
 
-    fun visitContinue(jump: IrContinue, data: D): R = visitBreakContinue(jump, data)
+    open fun visitContinue(jump: IrContinue, data: D): R = visitBreakContinue(jump, data)
 
-    fun visitCall(expression: IrCall, data: D): R = visitFunctionAccess(expression, data)
+    open fun visitCall(expression: IrCall, data: D): R = visitFunctionAccess(expression, data)
 
-    fun visitCallableReference(expression: IrCallableReference<*>, data: D): R =
+    open fun visitCallableReference(expression: IrCallableReference<*>, data: D): R =
             visitMemberAccess(expression, data)
 
-    fun visitFunctionReference(expression: IrFunctionReference, data: D): R =
+    open fun visitFunctionReference(expression: IrFunctionReference, data: D): R =
             visitCallableReference(expression, data)
 
-    fun visitPropertyReference(expression: IrPropertyReference, data: D): R =
+    open fun visitPropertyReference(expression: IrPropertyReference, data: D): R =
             visitCallableReference(expression, data)
 
-    fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference,
+    open fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference,
             data: D): R = visitCallableReference(expression, data)
 
-    fun visitClassReference(expression: IrClassReference, data: D): R =
+    open fun visitClassReference(expression: IrClassReference, data: D): R =
             visitDeclarationReference(expression, data)
 
-    fun visitConst(expression: IrConst<*>, data: D): R = visitExpression(expression, data)
+    open fun visitConst(expression: IrConst<*>, data: D): R = visitExpression(expression, data)
 
-    fun visitConstantValue(expression: IrConstantValue, data: D): R =
+    open fun visitConstantValue(expression: IrConstantValue, data: D): R =
             visitExpression(expression, data)
 
-    fun visitConstantPrimitive(expression: IrConstantPrimitive, data: D): R =
+    open fun visitConstantPrimitive(expression: IrConstantPrimitive, data: D): R =
             visitConstantValue(expression, data)
 
-    fun visitConstantObject(expression: IrConstantObject, data: D): R =
+    open fun visitConstantObject(expression: IrConstantObject, data: D): R =
             visitConstantValue(expression, data)
 
-    fun visitConstantArray(expression: IrConstantArray, data: D): R =
+    open fun visitConstantArray(expression: IrConstantArray, data: D): R =
             visitConstantValue(expression, data)
 
-    fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: D): R
+    open fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: D): R
             = visitFunctionAccess(expression, data)
 
-    fun visitDynamicExpression(expression: IrDynamicExpression, data: D): R =
+    open fun visitDynamicExpression(expression: IrDynamicExpression, data: D): R =
             visitExpression(expression, data)
 
-    fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression, data: D): R
+    open fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression, data: D): R
             = visitDynamicExpression(expression, data)
 
-    fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression, data: D): R =
+    open fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression, data: D): R =
             visitDynamicExpression(expression, data)
 
-    fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: D): R =
+    open fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: D): R =
             visitFunctionAccess(expression, data)
 
-    fun visitErrorExpression(expression: IrErrorExpression, data: D): R =
+    open fun visitErrorExpression(expression: IrErrorExpression, data: D): R =
             visitExpression(expression, data)
 
-    fun visitErrorCallExpression(expression: IrErrorCallExpression, data: D): R =
+    open fun visitErrorCallExpression(expression: IrErrorCallExpression, data: D): R =
             visitErrorExpression(expression, data)
 
-    fun visitFieldAccess(expression: IrFieldAccessExpression, data: D): R =
+    open fun visitFieldAccess(expression: IrFieldAccessExpression, data: D): R =
             visitDeclarationReference(expression, data)
 
-    fun visitGetField(expression: IrGetField, data: D): R = visitFieldAccess(expression,
+    open fun visitGetField(expression: IrGetField, data: D): R = visitFieldAccess(expression,
             data)
 
-    fun visitSetField(expression: IrSetField, data: D): R = visitFieldAccess(expression,
+    open fun visitSetField(expression: IrSetField, data: D): R = visitFieldAccess(expression,
             data)
 
-    fun visitFunctionExpression(expression: IrFunctionExpression, data: D): R =
+    open fun visitFunctionExpression(expression: IrFunctionExpression, data: D): R =
             visitExpression(expression, data)
 
-    fun visitGetClass(expression: IrGetClass, data: D): R = visitExpression(expression,
+    open fun visitGetClass(expression: IrGetClass, data: D): R = visitExpression(expression,
             data)
 
-    fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: D): R =
+    open fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: D): R =
             visitExpression(expression, data)
 
-    fun visitLoop(loop: IrLoop, data: D): R = visitExpression(loop, data)
+    open fun visitLoop(loop: IrLoop, data: D): R = visitExpression(loop, data)
 
-    fun visitWhileLoop(loop: IrWhileLoop, data: D): R = visitLoop(loop, data)
+    open fun visitWhileLoop(loop: IrWhileLoop, data: D): R = visitLoop(loop, data)
 
-    fun visitDoWhileLoop(loop: IrDoWhileLoop, data: D): R = visitLoop(loop, data)
+    open fun visitDoWhileLoop(loop: IrDoWhileLoop, data: D): R = visitLoop(loop, data)
 
-    fun visitReturn(expression: IrReturn, data: D): R = visitExpression(expression, data)
+    open fun visitReturn(expression: IrReturn, data: D): R = visitExpression(expression, data)
 
-    fun visitStringConcatenation(expression: IrStringConcatenation, data: D): R =
+    open fun visitStringConcatenation(expression: IrStringConcatenation, data: D): R =
             visitExpression(expression, data)
 
-    fun visitSuspensionPoint(expression: IrSuspensionPoint, data: D): R =
+    open fun visitSuspensionPoint(expression: IrSuspensionPoint, data: D): R =
             visitExpression(expression, data)
 
-    fun visitSuspendableExpression(expression: IrSuspendableExpression, data: D): R =
+    open fun visitSuspendableExpression(expression: IrSuspendableExpression, data: D): R =
             visitExpression(expression, data)
 
-    fun visitThrow(expression: IrThrow, data: D): R = visitExpression(expression, data)
+    open fun visitThrow(expression: IrThrow, data: D): R = visitExpression(expression, data)
 
-    fun visitTry(aTry: IrTry, data: D): R = visitExpression(aTry, data)
+    open fun visitTry(aTry: IrTry, data: D): R = visitExpression(aTry, data)
 
-    fun visitCatch(aCatch: IrCatch, data: D): R = visitElement(aCatch, data)
+    open fun visitCatch(aCatch: IrCatch, data: D): R = visitElement(aCatch, data)
 
-    fun visitTypeOperator(expression: IrTypeOperatorCall, data: D): R =
+    open fun visitTypeOperator(expression: IrTypeOperatorCall, data: D): R =
             visitExpression(expression, data)
 
-    fun visitValueAccess(expression: IrValueAccessExpression, data: D): R =
+    open fun visitValueAccess(expression: IrValueAccessExpression, data: D): R =
             visitDeclarationReference(expression, data)
 
-    fun visitGetValue(expression: IrGetValue, data: D): R = visitValueAccess(expression,
+    open fun visitGetValue(expression: IrGetValue, data: D): R = visitValueAccess(expression,
             data)
 
-    fun visitSetValue(expression: IrSetValue, data: D): R = visitValueAccess(expression,
+    open fun visitSetValue(expression: IrSetValue, data: D): R = visitValueAccess(expression,
             data)
 
-    fun visitVararg(expression: IrVararg, data: D): R = visitExpression(expression, data)
+    open fun visitVararg(expression: IrVararg, data: D): R = visitExpression(expression, data)
 
-    fun visitSpreadElement(spread: IrSpreadElement, data: D): R = visitElement(spread,
+    open fun visitSpreadElement(spread: IrSpreadElement, data: D): R = visitElement(spread,
             data)
 
-    fun visitWhen(expression: IrWhen, data: D): R = visitExpression(expression, data)
+    open fun visitWhen(expression: IrWhen, data: D): R = visitExpression(expression, data)
 
-    fun visitBranch(branch: IrBranch, data: D): R = visitElement(branch, data)
+    open fun visitBranch(branch: IrBranch, data: D): R = visitElement(branch, data)
 
-    fun visitElseBranch(branch: IrElseBranch, data: D): R = visitBranch(branch, data)
+    open fun visitElseBranch(branch: IrElseBranch, data: D): R = visitBranch(branch, data)
 }
diff --git a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt
index dc6aebe..60fe3aa 100644
--- a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt
+++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt
@@ -92,432 +92,432 @@
 import org.jetbrains.kotlin.ir.expressions.IrWhen
 import org.jetbrains.kotlin.ir.expressions.IrWhileLoop
 
-interface IrElementVisitorVoid : IrElementVisitor<Unit, Nothing?> {
+abstract class IrElementVisitorVoid : IrElementVisitor<Unit, Nothing?>() {
     override fun visitElement(element: IrElement, data: Nothing?) = visitElement(element)
 
-    fun visitElement(element: IrElement) {
+    open fun visitElement(element: IrElement) {
     }
 
     override fun visitDeclaration(declaration: IrDeclarationBase, data: Nothing?) =
             visitDeclaration(declaration)
 
-    fun visitDeclaration(declaration: IrDeclarationBase) = visitElement(declaration)
+    open fun visitDeclaration(declaration: IrDeclarationBase) = visitElement(declaration)
 
     override fun visitValueParameter(declaration: IrValueParameter, data: Nothing?) =
             visitValueParameter(declaration)
 
-    fun visitValueParameter(declaration: IrValueParameter) = visitDeclaration(declaration)
+    open fun visitValueParameter(declaration: IrValueParameter) = visitDeclaration(declaration)
 
     override fun visitClass(declaration: IrClass, data: Nothing?) = visitClass(declaration)
 
-    fun visitClass(declaration: IrClass) = visitDeclaration(declaration)
+    open fun visitClass(declaration: IrClass) = visitDeclaration(declaration)
 
     override fun visitAnonymousInitializer(declaration: IrAnonymousInitializer,
             data: Nothing?) = visitAnonymousInitializer(declaration)
 
-    fun visitAnonymousInitializer(declaration: IrAnonymousInitializer) =
+    open fun visitAnonymousInitializer(declaration: IrAnonymousInitializer) =
             visitDeclaration(declaration)
 
     override fun visitTypeParameter(declaration: IrTypeParameter, data: Nothing?) =
             visitTypeParameter(declaration)
 
-    fun visitTypeParameter(declaration: IrTypeParameter) = visitDeclaration(declaration)
+    open fun visitTypeParameter(declaration: IrTypeParameter) = visitDeclaration(declaration)
 
     override fun visitFunction(declaration: IrFunction, data: Nothing?) =
             visitFunction(declaration)
 
-    fun visitFunction(declaration: IrFunction) = visitDeclaration(declaration)
+    open fun visitFunction(declaration: IrFunction) = visitDeclaration(declaration)
 
     override fun visitConstructor(declaration: IrConstructor, data: Nothing?) =
             visitConstructor(declaration)
 
-    fun visitConstructor(declaration: IrConstructor) = visitFunction(declaration)
+    open fun visitConstructor(declaration: IrConstructor) = visitFunction(declaration)
 
     override fun visitEnumEntry(declaration: IrEnumEntry, data: Nothing?) =
             visitEnumEntry(declaration)
 
-    fun visitEnumEntry(declaration: IrEnumEntry) = visitDeclaration(declaration)
+    open fun visitEnumEntry(declaration: IrEnumEntry) = visitDeclaration(declaration)
 
     override fun visitErrorDeclaration(declaration: IrErrorDeclaration, data: Nothing?) =
             visitErrorDeclaration(declaration)
 
-    fun visitErrorDeclaration(declaration: IrErrorDeclaration) =
+    open fun visitErrorDeclaration(declaration: IrErrorDeclaration) =
             visitDeclaration(declaration)
 
     override fun visitField(declaration: IrField, data: Nothing?) = visitField(declaration)
 
-    fun visitField(declaration: IrField) = visitDeclaration(declaration)
+    open fun visitField(declaration: IrField) = visitDeclaration(declaration)
 
     override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty,
             data: Nothing?) = visitLocalDelegatedProperty(declaration)
 
-    fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty) =
+    open fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty) =
             visitDeclaration(declaration)
 
     override fun visitModuleFragment(declaration: IrModuleFragment, data: Nothing?) =
             visitModuleFragment(declaration)
 
-    fun visitModuleFragment(declaration: IrModuleFragment) = visitElement(declaration)
+    open fun visitModuleFragment(declaration: IrModuleFragment) = visitElement(declaration)
 
     override fun visitProperty(declaration: IrProperty, data: Nothing?) =
             visitProperty(declaration)
 
-    fun visitProperty(declaration: IrProperty) = visitDeclaration(declaration)
+    open fun visitProperty(declaration: IrProperty) = visitDeclaration(declaration)
 
     override fun visitScript(declaration: IrScript, data: Nothing?) =
             visitScript(declaration)
 
-    fun visitScript(declaration: IrScript) = visitDeclaration(declaration)
+    open fun visitScript(declaration: IrScript) = visitDeclaration(declaration)
 
     override fun visitSimpleFunction(declaration: IrSimpleFunction, data: Nothing?) =
             visitSimpleFunction(declaration)
 
-    fun visitSimpleFunction(declaration: IrSimpleFunction) = visitFunction(declaration)
+    open fun visitSimpleFunction(declaration: IrSimpleFunction) = visitFunction(declaration)
 
     override fun visitTypeAlias(declaration: IrTypeAlias, data: Nothing?) =
             visitTypeAlias(declaration)
 
-    fun visitTypeAlias(declaration: IrTypeAlias) = visitDeclaration(declaration)
+    open fun visitTypeAlias(declaration: IrTypeAlias) = visitDeclaration(declaration)
 
     override fun visitVariable(declaration: IrVariable, data: Nothing?) =
             visitVariable(declaration)
 
-    fun visitVariable(declaration: IrVariable) = visitDeclaration(declaration)
+    open fun visitVariable(declaration: IrVariable) = visitDeclaration(declaration)
 
     override fun visitPackageFragment(declaration: IrPackageFragment, data: Nothing?) =
             visitPackageFragment(declaration)
 
-    fun visitPackageFragment(declaration: IrPackageFragment) = visitElement(declaration)
+    open fun visitPackageFragment(declaration: IrPackageFragment) = visitElement(declaration)
 
     override fun visitExternalPackageFragment(declaration: IrExternalPackageFragment,
             data: Nothing?) = visitExternalPackageFragment(declaration)
 
-    fun visitExternalPackageFragment(declaration: IrExternalPackageFragment) =
+    open fun visitExternalPackageFragment(declaration: IrExternalPackageFragment) =
             visitPackageFragment(declaration)
 
     override fun visitFile(declaration: IrFile, data: Nothing?) = visitFile(declaration)
 
-    fun visitFile(declaration: IrFile) = visitPackageFragment(declaration)
+    open fun visitFile(declaration: IrFile) = visitPackageFragment(declaration)
 
     override fun visitExpression(expression: IrExpression, data: Nothing?) =
             visitExpression(expression)
 
-    fun visitExpression(expression: IrExpression) = visitElement(expression)
+    open fun visitExpression(expression: IrExpression) = visitElement(expression)
 
     override fun visitBody(body: IrBody, data: Nothing?) = visitBody(body)
 
-    fun visitBody(body: IrBody) = visitElement(body)
+    open fun visitBody(body: IrBody) = visitElement(body)
 
     override fun visitExpressionBody(body: IrExpressionBody, data: Nothing?) =
             visitExpressionBody(body)
 
-    fun visitExpressionBody(body: IrExpressionBody) = visitBody(body)
+    open fun visitExpressionBody(body: IrExpressionBody) = visitBody(body)
 
     override fun visitBlockBody(body: IrBlockBody, data: Nothing?) = visitBlockBody(body)
 
-    fun visitBlockBody(body: IrBlockBody) = visitBody(body)
+    open fun visitBlockBody(body: IrBlockBody) = visitBody(body)
 
     override fun visitDeclarationReference(expression: IrDeclarationReference,
             data: Nothing?) = visitDeclarationReference(expression)
 
-    fun visitDeclarationReference(expression: IrDeclarationReference) =
+    open fun visitDeclarationReference(expression: IrDeclarationReference) =
             visitExpression(expression)
 
     override fun visitMemberAccess(expression: IrMemberAccessExpression<*>, data: Nothing?)
             = visitMemberAccess(expression)
 
-    fun visitMemberAccess(expression: IrMemberAccessExpression<*>) =
+    open fun visitMemberAccess(expression: IrMemberAccessExpression<*>) =
             visitDeclarationReference(expression)
 
     override fun visitFunctionAccess(expression: IrFunctionAccessExpression,
             data: Nothing?) = visitFunctionAccess(expression)
 
-    fun visitFunctionAccess(expression: IrFunctionAccessExpression) =
+    open fun visitFunctionAccess(expression: IrFunctionAccessExpression) =
             visitMemberAccess(expression)
 
     override fun visitConstructorCall(expression: IrConstructorCall, data: Nothing?) =
             visitConstructorCall(expression)
 
-    fun visitConstructorCall(expression: IrConstructorCall) = visitFunctionAccess(expression)
+    open fun visitConstructorCall(expression: IrConstructorCall) = visitFunctionAccess(expression)
 
     override fun visitSingletonReference(expression: IrGetSingletonValue, data: Nothing?) =
             visitSingletonReference(expression)
 
-    fun visitSingletonReference(expression: IrGetSingletonValue) =
+    open fun visitSingletonReference(expression: IrGetSingletonValue) =
             visitDeclarationReference(expression)
 
     override fun visitGetObjectValue(expression: IrGetObjectValue, data: Nothing?) =
             visitGetObjectValue(expression)
 
-    fun visitGetObjectValue(expression: IrGetObjectValue) =
+    open fun visitGetObjectValue(expression: IrGetObjectValue) =
             visitSingletonReference(expression)
 
     override fun visitGetEnumValue(expression: IrGetEnumValue, data: Nothing?) =
             visitGetEnumValue(expression)
 
-    fun visitGetEnumValue(expression: IrGetEnumValue) = visitSingletonReference(expression)
+    open fun visitGetEnumValue(expression: IrGetEnumValue) = visitSingletonReference(expression)
 
     override fun visitRawFunctionReference(expression: IrRawFunctionReference,
             data: Nothing?) = visitRawFunctionReference(expression)
 
-    fun visitRawFunctionReference(expression: IrRawFunctionReference) =
+    open fun visitRawFunctionReference(expression: IrRawFunctionReference) =
             visitDeclarationReference(expression)
 
     override fun visitContainerExpression(expression: IrContainerExpression,
             data: Nothing?) = visitContainerExpression(expression)
 
-    fun visitContainerExpression(expression: IrContainerExpression) =
+    open fun visitContainerExpression(expression: IrContainerExpression) =
             visitExpression(expression)
 
     override fun visitBlock(expression: IrBlock, data: Nothing?) = visitBlock(expression)
 
-    fun visitBlock(expression: IrBlock) = visitContainerExpression(expression)
+    open fun visitBlock(expression: IrBlock) = visitContainerExpression(expression)
 
     override fun visitComposite(expression: IrComposite, data: Nothing?) =
             visitComposite(expression)
 
-    fun visitComposite(expression: IrComposite) = visitContainerExpression(expression)
+    open fun visitComposite(expression: IrComposite) = visitContainerExpression(expression)
 
     override fun visitSyntheticBody(body: IrSyntheticBody, data: Nothing?) =
             visitSyntheticBody(body)
 
-    fun visitSyntheticBody(body: IrSyntheticBody) = visitBody(body)
+    open fun visitSyntheticBody(body: IrSyntheticBody) = visitBody(body)
 
     override fun visitBreakContinue(jump: IrBreakContinue, data: Nothing?) =
             visitBreakContinue(jump)
 
-    fun visitBreakContinue(jump: IrBreakContinue) = visitExpression(jump)
+    open fun visitBreakContinue(jump: IrBreakContinue) = visitExpression(jump)
 
     override fun visitBreak(jump: IrBreak, data: Nothing?) = visitBreak(jump)
 
-    fun visitBreak(jump: IrBreak) = visitBreakContinue(jump)
+    open fun visitBreak(jump: IrBreak) = visitBreakContinue(jump)
 
     override fun visitContinue(jump: IrContinue, data: Nothing?) = visitContinue(jump)
 
-    fun visitContinue(jump: IrContinue) = visitBreakContinue(jump)
+    open fun visitContinue(jump: IrContinue) = visitBreakContinue(jump)
 
     override fun visitCall(expression: IrCall, data: Nothing?) = visitCall(expression)
 
-    fun visitCall(expression: IrCall) = visitFunctionAccess(expression)
+    open fun visitCall(expression: IrCall) = visitFunctionAccess(expression)
 
     override fun visitCallableReference(expression: IrCallableReference<*>, data: Nothing?)
             = visitCallableReference(expression)
 
-    fun visitCallableReference(expression: IrCallableReference<*>) =
+    open fun visitCallableReference(expression: IrCallableReference<*>) =
             visitMemberAccess(expression)
 
     override fun visitFunctionReference(expression: IrFunctionReference, data: Nothing?) =
             visitFunctionReference(expression)
 
-    fun visitFunctionReference(expression: IrFunctionReference) =
+    open fun visitFunctionReference(expression: IrFunctionReference) =
             visitCallableReference(expression)
 
     override fun visitPropertyReference(expression: IrPropertyReference, data: Nothing?) =
             visitPropertyReference(expression)
 
-    fun visitPropertyReference(expression: IrPropertyReference) =
+    open fun visitPropertyReference(expression: IrPropertyReference) =
             visitCallableReference(expression)
 
     override
-            fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference,
+            open fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference,
             data: Nothing?) = visitLocalDelegatedPropertyReference(expression)
 
-    fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference) =
+    open fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference) =
             visitCallableReference(expression)
 
     override fun visitClassReference(expression: IrClassReference, data: Nothing?) =
             visitClassReference(expression)
 
-    fun visitClassReference(expression: IrClassReference) =
+    open fun visitClassReference(expression: IrClassReference) =
             visitDeclarationReference(expression)
 
     override fun visitConst(expression: IrConst<*>, data: Nothing?) =
             visitConst(expression)
 
-    fun visitConst(expression: IrConst<*>) = visitExpression(expression)
+    open fun visitConst(expression: IrConst<*>) = visitExpression(expression)
 
     override fun visitConstantValue(expression: IrConstantValue, data: Nothing?) =
             visitConstantValue(expression)
 
-    fun visitConstantValue(expression: IrConstantValue) = visitExpression(expression)
+    open fun visitConstantValue(expression: IrConstantValue) = visitExpression(expression)
 
     override fun visitConstantPrimitive(expression: IrConstantPrimitive, data: Nothing?) =
             visitConstantPrimitive(expression)
 
-    fun visitConstantPrimitive(expression: IrConstantPrimitive) =
+    open fun visitConstantPrimitive(expression: IrConstantPrimitive) =
             visitConstantValue(expression)
 
     override fun visitConstantObject(expression: IrConstantObject, data: Nothing?) =
             visitConstantObject(expression)
 
-    fun visitConstantObject(expression: IrConstantObject) = visitConstantValue(expression)
+    open fun visitConstantObject(expression: IrConstantObject) = visitConstantValue(expression)
 
     override fun visitConstantArray(expression: IrConstantArray, data: Nothing?) =
             visitConstantArray(expression)
 
-    fun visitConstantArray(expression: IrConstantArray) = visitConstantValue(expression)
+    open fun visitConstantArray(expression: IrConstantArray) = visitConstantValue(expression)
 
     override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall,
             data: Nothing?) = visitDelegatingConstructorCall(expression)
 
-    fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall) =
+    open fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall) =
             visitFunctionAccess(expression)
 
     override fun visitDynamicExpression(expression: IrDynamicExpression, data: Nothing?) =
             visitDynamicExpression(expression)
 
-    fun visitDynamicExpression(expression: IrDynamicExpression) = visitExpression(expression)
+    open fun visitDynamicExpression(expression: IrDynamicExpression) = visitExpression(expression)
 
     override fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression,
             data: Nothing?) = visitDynamicOperatorExpression(expression)
 
-    fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression) =
+    open fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression) =
             visitDynamicExpression(expression)
 
     override fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression,
             data: Nothing?) = visitDynamicMemberExpression(expression)
 
-    fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression) =
+    open fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression) =
             visitDynamicExpression(expression)
 
     override fun visitEnumConstructorCall(expression: IrEnumConstructorCall,
             data: Nothing?) = visitEnumConstructorCall(expression)
 
-    fun visitEnumConstructorCall(expression: IrEnumConstructorCall) =
+    open fun visitEnumConstructorCall(expression: IrEnumConstructorCall) =
             visitFunctionAccess(expression)
 
     override fun visitErrorExpression(expression: IrErrorExpression, data: Nothing?) =
             visitErrorExpression(expression)
 
-    fun visitErrorExpression(expression: IrErrorExpression) = visitExpression(expression)
+    open fun visitErrorExpression(expression: IrErrorExpression) = visitExpression(expression)
 
     override fun visitErrorCallExpression(expression: IrErrorCallExpression,
             data: Nothing?) = visitErrorCallExpression(expression)
 
-    fun visitErrorCallExpression(expression: IrErrorCallExpression) =
+    open fun visitErrorCallExpression(expression: IrErrorCallExpression) =
             visitErrorExpression(expression)
 
     override fun visitFieldAccess(expression: IrFieldAccessExpression, data: Nothing?) =
             visitFieldAccess(expression)
 
-    fun visitFieldAccess(expression: IrFieldAccessExpression) =
+    open fun visitFieldAccess(expression: IrFieldAccessExpression) =
             visitDeclarationReference(expression)
 
     override fun visitGetField(expression: IrGetField, data: Nothing?) =
             visitGetField(expression)
 
-    fun visitGetField(expression: IrGetField) = visitFieldAccess(expression)
+    open fun visitGetField(expression: IrGetField) = visitFieldAccess(expression)
 
     override fun visitSetField(expression: IrSetField, data: Nothing?) =
             visitSetField(expression)
 
-    fun visitSetField(expression: IrSetField) = visitFieldAccess(expression)
+    open fun visitSetField(expression: IrSetField) = visitFieldAccess(expression)
 
     override fun visitFunctionExpression(expression: IrFunctionExpression, data: Nothing?)
             = visitFunctionExpression(expression)
 
-    fun visitFunctionExpression(expression: IrFunctionExpression) =
+    open fun visitFunctionExpression(expression: IrFunctionExpression) =
             visitExpression(expression)
 
     override fun visitGetClass(expression: IrGetClass, data: Nothing?) =
             visitGetClass(expression)
 
-    fun visitGetClass(expression: IrGetClass) = visitExpression(expression)
+    open fun visitGetClass(expression: IrGetClass) = visitExpression(expression)
 
     override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall,
             data: Nothing?) = visitInstanceInitializerCall(expression)
 
-    fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall) =
+    open fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall) =
             visitExpression(expression)
 
     override fun visitLoop(loop: IrLoop, data: Nothing?) = visitLoop(loop)
 
-    fun visitLoop(loop: IrLoop) = visitExpression(loop)
+    open fun visitLoop(loop: IrLoop) = visitExpression(loop)
 
     override fun visitWhileLoop(loop: IrWhileLoop, data: Nothing?) = visitWhileLoop(loop)
 
-    fun visitWhileLoop(loop: IrWhileLoop) = visitLoop(loop)
+    open fun visitWhileLoop(loop: IrWhileLoop) = visitLoop(loop)
 
     override fun visitDoWhileLoop(loop: IrDoWhileLoop, data: Nothing?) =
             visitDoWhileLoop(loop)
 
-    fun visitDoWhileLoop(loop: IrDoWhileLoop) = visitLoop(loop)
+    open fun visitDoWhileLoop(loop: IrDoWhileLoop) = visitLoop(loop)
 
     override fun visitReturn(expression: IrReturn, data: Nothing?) =
             visitReturn(expression)
 
-    fun visitReturn(expression: IrReturn) = visitExpression(expression)
+    open fun visitReturn(expression: IrReturn) = visitExpression(expression)
 
     override fun visitStringConcatenation(expression: IrStringConcatenation,
             data: Nothing?) = visitStringConcatenation(expression)
 
-    fun visitStringConcatenation(expression: IrStringConcatenation) =
+    open fun visitStringConcatenation(expression: IrStringConcatenation) =
             visitExpression(expression)
 
     override fun visitSuspensionPoint(expression: IrSuspensionPoint, data: Nothing?) =
             visitSuspensionPoint(expression)
 
-    fun visitSuspensionPoint(expression: IrSuspensionPoint) = visitExpression(expression)
+    open fun visitSuspensionPoint(expression: IrSuspensionPoint) = visitExpression(expression)
 
     override fun visitSuspendableExpression(expression: IrSuspendableExpression,
             data: Nothing?) = visitSuspendableExpression(expression)
 
-    fun visitSuspendableExpression(expression: IrSuspendableExpression) =
+    open fun visitSuspendableExpression(expression: IrSuspendableExpression) =
             visitExpression(expression)
 
     override fun visitThrow(expression: IrThrow, data: Nothing?) = visitThrow(expression)
 
-    fun visitThrow(expression: IrThrow) = visitExpression(expression)
+    open fun visitThrow(expression: IrThrow) = visitExpression(expression)
 
     override fun visitTry(aTry: IrTry, data: Nothing?) = visitTry(aTry)
 
-    fun visitTry(aTry: IrTry) = visitExpression(aTry)
+    open fun visitTry(aTry: IrTry) = visitExpression(aTry)
 
     override fun visitCatch(aCatch: IrCatch, data: Nothing?) = visitCatch(aCatch)
 
-    fun visitCatch(aCatch: IrCatch) = visitElement(aCatch)
+    open fun visitCatch(aCatch: IrCatch) = visitElement(aCatch)
 
     override fun visitTypeOperator(expression: IrTypeOperatorCall, data: Nothing?) =
             visitTypeOperator(expression)
 
-    fun visitTypeOperator(expression: IrTypeOperatorCall) = visitExpression(expression)
+    open fun visitTypeOperator(expression: IrTypeOperatorCall) = visitExpression(expression)
 
     override fun visitValueAccess(expression: IrValueAccessExpression, data: Nothing?) =
             visitValueAccess(expression)
 
-    fun visitValueAccess(expression: IrValueAccessExpression) =
+    open fun visitValueAccess(expression: IrValueAccessExpression) =
             visitDeclarationReference(expression)
 
     override fun visitGetValue(expression: IrGetValue, data: Nothing?) =
             visitGetValue(expression)
 
-    fun visitGetValue(expression: IrGetValue) = visitValueAccess(expression)
+    open fun visitGetValue(expression: IrGetValue) = visitValueAccess(expression)
 
     override fun visitSetValue(expression: IrSetValue, data: Nothing?) =
             visitSetValue(expression)
 
-    fun visitSetValue(expression: IrSetValue) = visitValueAccess(expression)
+    open fun visitSetValue(expression: IrSetValue) = visitValueAccess(expression)
 
     override fun visitVararg(expression: IrVararg, data: Nothing?) =
             visitVararg(expression)
 
-    fun visitVararg(expression: IrVararg) = visitExpression(expression)
+    open fun visitVararg(expression: IrVararg) = visitExpression(expression)
 
     override fun visitSpreadElement(spread: IrSpreadElement, data: Nothing?) =
             visitSpreadElement(spread)
 
-    fun visitSpreadElement(spread: IrSpreadElement) = visitElement(spread)
+    open fun visitSpreadElement(spread: IrSpreadElement) = visitElement(spread)
 
     override fun visitWhen(expression: IrWhen, data: Nothing?) = visitWhen(expression)
 
-    fun visitWhen(expression: IrWhen) = visitExpression(expression)
+    open fun visitWhen(expression: IrWhen) = visitExpression(expression)
 
     override fun visitBranch(branch: IrBranch, data: Nothing?) = visitBranch(branch)
 
-    fun visitBranch(branch: IrBranch) = visitElement(branch)
+    open fun visitBranch(branch: IrBranch) = visitElement(branch)
 
     override fun visitElseBranch(branch: IrElseBranch, data: Nothing?) =
             visitElseBranch(branch)
 
-    fun visitElseBranch(branch: IrElseBranch) = visitBranch(branch)
+    open fun visitElseBranch(branch: IrElseBranch) = visitBranch(branch)
 }
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopySymbolRemapper.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopySymbolRemapper.kt
index 9dd3860..d912de4 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopySymbolRemapper.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopySymbolRemapper.kt
@@ -31,7 +31,7 @@
 @OptIn(ObsoleteDescriptorBasedAPI::class)
 open class DeepCopySymbolRemapper(
     private val descriptorsRemapper: DescriptorsRemapper = NullDescriptorsRemapper
-) : IrElementVisitorVoid, SymbolRemapper {
+) : IrElementVisitorVoid(), SymbolRemapper {
 
     protected val classes = hashMapOf<IrClassSymbol, IrClassSymbol>()
     protected val scripts = hashMapOf<IrScriptSymbol, IrScriptSymbol>()
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DumpIrTree.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DumpIrTree.kt
index 5d078df..2c2f8a9 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DumpIrTree.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DumpIrTree.kt
@@ -52,7 +52,7 @@
     out: Appendable,
     normalizeNames: Boolean = false,
     private val stableOrder: Boolean = false
-) : IrElementVisitor<Unit, String> {
+) : IrElementVisitor<Unit, String>() {
 
     private val printer = Printer(out, "  ")
     private val elementRenderer = RenderIrElementVisitor(normalizeNames, !stableOrder)
@@ -422,7 +422,7 @@
     private val lineNumber: Int,
     out: Appendable,
     normalizeNames: Boolean = false
-) : IrElementVisitorVoid {
+) : IrElementVisitorVoid() {
     private val dumper = DumpIrTreeVisitor(out, normalizeNames)
 
     override fun visitElement(element: IrElement) {
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt
index 9aa24c4..6695981 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt
@@ -1001,7 +1001,7 @@
     return this
 }
 
-object SetDeclarationsParentVisitor : IrElementVisitor<Unit, IrDeclarationParent> {
+object SetDeclarationsParentVisitor : IrElementVisitor<Unit, IrDeclarationParent>() {
     override fun visitElement(element: IrElement, data: IrDeclarationParent) {
         if (element !is IrDeclarationParent) {
             element.acceptChildren(this, data)
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/PatchDeclarationParents.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/PatchDeclarationParents.kt
index 89f891c..af1c88e 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/PatchDeclarationParents.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/PatchDeclarationParents.kt
@@ -18,7 +18,7 @@
         acceptVoid(visitor)
     }
 
-abstract class DeclarationParentsVisitor : IrElementVisitorVoid {
+abstract class DeclarationParentsVisitor : IrElementVisitorVoid() {
     protected val declarationParentsStack = ArrayDeque<IrDeclarationParent>()
 
     override fun visitElement(element: IrElement) {
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RemapTypes.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RemapTypes.kt
index 3294b39..fa2bbce 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RemapTypes.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RemapTypes.kt
@@ -17,7 +17,7 @@
     acceptVoid(RemapTypesHelper(typeRemapper))
 }
 
-private class RemapTypesHelper(private val typeRemapper: TypeRemapper) : IrElementVisitorVoid {
+private class RemapTypesHelper(private val typeRemapper: TypeRemapper) : IrElementVisitorVoid() {
 
     override fun visitElement(element: IrElement) {
         element.acceptChildrenVoid(this)
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt
index 507337c..1080f5b 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt
@@ -27,7 +27,7 @@
     accept(RenderIrElementVisitor(), null)
 
 class RenderIrElementVisitor(normalizeNames: Boolean = false, private val verboseErrorTypes: Boolean = true) :
-    IrElementVisitor<String, Nothing?> {
+    IrElementVisitor<String, Nothing?>() {
 
     private val variableNameData = VariableNameData(normalizeNames)
 
@@ -50,7 +50,7 @@
     private class BoundSymbolReferenceRenderer(
         private val variableNameData: VariableNameData,
         private val verboseErrorTypes: Boolean,
-    ) : IrElementVisitor<String, Nothing?> {
+    ) : IrElementVisitor<String, Nothing?>() {
 
         override fun visitElement(element: IrElement, data: Nothing?) = buildTrimEnd {
             append('{')
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt
index edde271..d009f49 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt
@@ -117,7 +117,7 @@
     * wrap/escape invalid identifiers with "`", like "$$delegate"
  */
 
-private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOptions) : IrElementVisitor<Unit, IrDeclaration?> {
+private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOptions) : IrElementVisitor<Unit, IrDeclaration?>() {
     private val IrSymbol.safeName get() = if (!isBound) {
         "/* ERROR: unbound symbol $signature */"
     } else {
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformerVoid.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformerVoid.kt
index 9776339..eeb5b5c 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformerVoid.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformerVoid.kt
@@ -21,7 +21,7 @@
 import org.jetbrains.kotlin.ir.declarations.*
 import org.jetbrains.kotlin.ir.expressions.*
 
-abstract class IrElementTransformerVoid : IrElementTransformer<Nothing?> {
+abstract class IrElementTransformerVoid : IrElementTransformer<Nothing?>() {
     open fun visitElement(element: IrElement): IrElement {
         element.transformChildren(this, null)
         return element
diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrideChecker.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrideChecker.kt
index f19fc26..d0902f3e 100644
--- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrideChecker.kt
+++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrideChecker.kt
@@ -71,7 +71,7 @@
     }
 
     fun check(module: IrModuleFragment) {
-        module.acceptVoid(object : IrElementVisitorVoid {
+        module.acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/ExpectActualTable.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/ExpectActualTable.kt
index 630972d..c1c5b8b 100644
--- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/ExpectActualTable.kt
+++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/ExpectActualTable.kt
@@ -16,7 +16,7 @@
     val table = mutableMapOf<DeclarationDescriptor, IrSymbol>()
 
     private fun IrElement.recordActuals(rightHandSide: Map<DeclarationDescriptor, IrSymbol>, inModule: ModuleDescriptor) {
-        this.acceptVoid(object : IrElementVisitorVoid {
+        this.acceptVoid(object : IrElementVisitorVoid() {
 
             private fun recordDeclarationActuals(declaration: IrDeclaration) {
 
@@ -64,7 +64,7 @@
     private fun IrDeclaration.recordRightHandSide(): Map<DeclarationDescriptor, IrSymbol> {
         val rightHandSide = mutableMapOf<DeclarationDescriptor, IrSymbol>()
 
-        this.acceptVoid(object : IrElementVisitorVoid {
+        this.acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt
index ee99672..d03c170 100644
--- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt
+++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt
@@ -1374,7 +1374,7 @@
             }
         } else {
             file.acceptVoid(
-                object : IrElementVisitorVoid {
+                object : IrElementVisitorVoid() {
                     override fun visitElement(element: IrElement) {
                         element.acceptChildrenVoid(this)
                     }
diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ManglerChecker.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ManglerChecker.kt
index f130715..68debae 100644
--- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ManglerChecker.kt
+++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ManglerChecker.kt
@@ -15,7 +15,7 @@
 import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
 import org.jetbrains.kotlin.name.SpecialNames
 
-class ManglerChecker(vararg _manglers: KotlinMangler<IrDeclaration>) : IrElementVisitorVoid {
+class ManglerChecker(vararg _manglers: KotlinMangler<IrDeclaration>) : IrElementVisitorVoid() {
 
     private val manglers = _manglers.toList()
 
@@ -23,7 +23,7 @@
         element.acceptChildrenVoid(this)
     }
 
-    private val skipper = object : IrElementVisitor<Boolean, Nothing?> {
+    private val skipper = object : IrElementVisitor<Boolean, Nothing?>() {
         override fun visitElement(element: IrElement, data: Nothing?): Boolean {
             error("unexpected element: ${element.render()}")
         }
diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ir/IrExportCheckerVisitor.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ir/IrExportCheckerVisitor.kt
index 8e871a8..c466996 100644
--- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ir/IrExportCheckerVisitor.kt
+++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ir/IrExportCheckerVisitor.kt
@@ -39,7 +39,7 @@
      * Corresponding to export policy of klib ABI >= 1.6.0.
      * In that case any non-local declaration (including type parameter and field) is exportable and could be navigated between modules
      */
-    private class Checker : IrElementVisitor<Boolean, Nothing?> {
+    private class Checker : IrElementVisitor<Boolean, Nothing?>() {
         override fun visitElement(element: IrElement, data: Nothing?): Boolean {
             error("Should bot reach here ${element.render()}")
         }
@@ -84,7 +84,7 @@
      *
      * Is used to link libraries with ABI level <= 1.5.0
      */
-    private inner class CompatibleChecker : IrElementVisitor<Boolean, Nothing?> {
+    private inner class CompatibleChecker : IrElementVisitor<Boolean, Nothing?>() {
         private fun IrDeclaration.isExported(annotations: List<IrConstructorCall>, visibility: DescriptorVisibility?): Boolean {
             val speciallyExported = annotations.hasAnnotation(publishedApiAnnotation) || isPlatformSpecificExported()
 
diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ir/IrMangleComputer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ir/IrMangleComputer.kt
index a283264..00ef67c 100644
--- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ir/IrMangleComputer.kt
+++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ir/IrMangleComputer.kt
@@ -21,7 +21,7 @@
 import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
 
 abstract class IrMangleComputer(protected val builder: StringBuilder, private val mode: MangleMode, protected val compatibleMode: Boolean) :
-    IrElementVisitorVoid, KotlinMangleComputer<IrDeclaration> {
+    IrElementVisitorVoid(), KotlinMangleComputer<IrDeclaration> {
 
     private val typeParameterContainer = ArrayList<IrDeclaration>(4)
 
diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureSerializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureSerializer.kt
index 9c8487d..315b73c 100644
--- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureSerializer.kt
+++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureSerializer.kt
@@ -60,14 +60,117 @@
         scopeCounter = 0
     }
 
-    private inner class PublicIdSigBuilder : IdSignatureBuilder<IrDeclaration>(),
-        IrElementVisitorVoid {
+    private inner class PublicIdSigBuilder : IdSignatureBuilder<IrDeclaration>() {
+
+        val visitor = object : IrElementVisitorVoid() {
+            override fun visitElement(element: IrElement) =
+                error("Unexpected element ${element.render()}")
+
+            override fun visitErrorDeclaration(declaration: IrErrorDeclaration) {
+                description = declaration.render()
+            }
+
+            override fun visitPackageFragment(declaration: IrPackageFragment) {
+                packageFqn = declaration.fqName
+            }
+
+            override fun visitClass(declaration: IrClass) {
+                collectParents(declaration)
+                isTopLevelPrivate = isTopLevelPrivate || declaration.isTopLevelPrivate
+                if (declaration.kind == ClassKind.ENUM_ENTRY) {
+                    classFqnSegments.add(MangleConstant.ENUM_ENTRY_CLASS_NAME)
+                }
+                setDescription(declaration)
+                setExpected(declaration.isExpect)
+            }
+
+            override fun visitSimpleFunction(declaration: IrSimpleFunction) {
+                val property = declaration.correspondingPropertySymbol
+                if (property != null) {
+                    property.owner.acceptVoid(this)
+                    val preservedId = declaration.hashId()
+                    if (container != null) {
+                        createContainer()
+                        hashId = preservedId
+                    } else {
+                        hashIdAcc = preservedId
+                    }
+                    classFqnSegments.add(declaration.name.asString())
+                } else {
+                    collectParents(declaration)
+                    isTopLevelPrivate = isTopLevelPrivate || declaration.isTopLevelPrivate
+                    hashId = declaration.hashId()
+                    setDescription(declaration)
+                }
+                setExpected(declaration.isExpect)
+            }
+
+            override fun visitConstructor(declaration: IrConstructor) {
+                collectParents(declaration)
+                hashId = declaration.hashId()
+                setExpected(declaration.isExpect)
+            }
+
+            override fun visitScript(declaration: IrScript) {
+                collectParents(declaration)
+            }
+
+            override fun visitProperty(declaration: IrProperty) {
+                collectParents(declaration)
+                isTopLevelPrivate = isTopLevelPrivate || declaration.isTopLevelPrivate
+                hashId = declaration.hashId()
+                setExpected(declaration.isExpect)
+            }
+
+            override fun visitTypeAlias(declaration: IrTypeAlias) {
+                collectParents(declaration)
+                isTopLevelPrivate = isTopLevelPrivate || declaration.isTopLevelPrivate
+            }
+
+            override fun visitEnumEntry(declaration: IrEnumEntry) {
+                collectParents(declaration)
+            }
+
+            override fun visitTypeParameter(declaration: IrTypeParameter) {
+                val rawParent = declaration.parent
+
+                val parent = if (rawParent is IrSimpleFunction) {
+                    rawParent.correspondingPropertySymbol?.owner ?: rawParent
+                } else rawParent
+
+                parent.accept(this, null)
+                createContainer()
+
+                if (parent is IrProperty && parent.setter == rawParent) {
+                    classFqnSegments.add(MangleConstant.TYPE_PARAMETER_MARKER_NAME_SETTER)
+                } else {
+                    classFqnSegments.add(MangleConstant.TYPE_PARAMETER_MARKER_NAME)
+                }
+                hashId = declaration.index.toLong()
+                description = declaration.render()
+            }
+
+            override fun visitField(declaration: IrField) {
+                val prop = declaration.correspondingPropertySymbol?.owner
+
+                if (prop != null) {
+                    // backing field
+                    prop.acceptVoid(this)
+                    createContainer()
+                    classFqnSegments.add(MangleConstant.BACKING_FIELD_NAME)
+                    description = declaration.render()
+                } else {
+                    collectParents(declaration)
+                    hashId = declaration.hashId()
+                }
+            }
+        }
 
         override val currentFileSignature: IdSignature.FileSignature?
             get() = currentFileSignatureX
 
         override fun accept(d: IrDeclaration) {
-            d.acceptVoid(this)
+            d.acceptVoid(visitor)
         }
 
         private fun createContainer() {
@@ -79,7 +182,7 @@
         }
 
         private fun collectParents(declaration: IrDeclarationWithName) {
-            declaration.parent.acceptVoid(this)
+            declaration.parent.acceptVoid(visitor)
             if (declaration !is IrClass || !declaration.isFacadeClass) {
                 classFqnSegments.add(declaration.name.asString())
             }
@@ -91,114 +194,12 @@
             }
         }
 
-        override fun visitElement(element: IrElement) =
-            error("Unexpected element ${element.render()}")
-
-        override fun visitErrorDeclaration(declaration: IrErrorDeclaration) {
-            description = declaration.render()
-        }
-
-        override fun visitPackageFragment(declaration: IrPackageFragment) {
-            packageFqn = declaration.fqName
-        }
-
         private val IrDeclarationWithVisibility.isTopLevelPrivate: Boolean
             get() = visibility == DescriptorVisibilities.PRIVATE && !checkIfPlatformSpecificExport() &&
                     (parent is IrPackageFragment || parent.isFacadeClass)
 
-        override fun visitClass(declaration: IrClass) {
-            collectParents(declaration)
-            isTopLevelPrivate = isTopLevelPrivate || declaration.isTopLevelPrivate
-            if (declaration.kind == ClassKind.ENUM_ENTRY) {
-                classFqnSegments.add(MangleConstant.ENUM_ENTRY_CLASS_NAME)
-            }
-            setDescription(declaration)
-            setExpected(declaration.isExpect)
-        }
-
         // Note: `false` because `compatibleMode` is not applied to public signatures
         private fun IrDeclarationWithName.hashId(): Long = mangler.run { signatureMangle(compatibleMode = false) }
-
-        override fun visitSimpleFunction(declaration: IrSimpleFunction) {
-            val property = declaration.correspondingPropertySymbol
-            if (property != null) {
-                property.owner.acceptVoid(this)
-                val preservedId = declaration.hashId()
-                if (container != null) {
-                    createContainer()
-                    hashId = preservedId
-                } else {
-                    hashIdAcc = preservedId
-                }
-                classFqnSegments.add(declaration.name.asString())
-            } else {
-                collectParents(declaration)
-                isTopLevelPrivate = isTopLevelPrivate || declaration.isTopLevelPrivate
-                hashId = declaration.hashId()
-                setDescription(declaration)
-            }
-            setExpected(declaration.isExpect)
-        }
-
-        override fun visitConstructor(declaration: IrConstructor) {
-            collectParents(declaration)
-            hashId = declaration.hashId()
-            setExpected(declaration.isExpect)
-        }
-
-        override fun visitScript(declaration: IrScript) {
-            collectParents(declaration)
-        }
-
-        override fun visitProperty(declaration: IrProperty) {
-            collectParents(declaration)
-            isTopLevelPrivate = isTopLevelPrivate || declaration.isTopLevelPrivate
-            hashId = declaration.hashId()
-            setExpected(declaration.isExpect)
-        }
-
-        override fun visitTypeAlias(declaration: IrTypeAlias) {
-            collectParents(declaration)
-            isTopLevelPrivate = isTopLevelPrivate || declaration.isTopLevelPrivate
-        }
-
-        override fun visitEnumEntry(declaration: IrEnumEntry) {
-            collectParents(declaration)
-        }
-
-        override fun visitTypeParameter(declaration: IrTypeParameter) {
-            val rawParent = declaration.parent
-
-            val parent = if (rawParent is IrSimpleFunction) {
-                rawParent.correspondingPropertySymbol?.owner ?: rawParent
-            } else rawParent
-
-            parent.accept(this, null)
-            createContainer()
-
-            if (parent is IrProperty && parent.setter == rawParent) {
-                classFqnSegments.add(MangleConstant.TYPE_PARAMETER_MARKER_NAME_SETTER)
-            } else {
-                classFqnSegments.add(MangleConstant.TYPE_PARAMETER_MARKER_NAME)
-            }
-            hashId = declaration.index.toLong()
-            description = declaration.render()
-        }
-
-        override fun visitField(declaration: IrField) {
-            val prop = declaration.correspondingPropertySymbol?.owner
-
-            if (prop != null) {
-                // backing field
-                prop.acceptVoid(this)
-                createContainer()
-                classFqnSegments.add(MangleConstant.BACKING_FIELD_NAME)
-                description = declaration.render()
-            } else {
-                collectParents(declaration)
-                hashId = declaration.hashId()
-            }
-        }
     }
 }
 
diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/unlinked/PartialLinkageSupportImpl.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/unlinked/PartialLinkageSupportImpl.kt
index 512219c..83a7a36 100644
--- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/unlinked/PartialLinkageSupportImpl.kt
+++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/unlinked/PartialLinkageSupportImpl.kt
@@ -111,7 +111,7 @@
     }
 
     override fun markUsedClassifiersInInlineLazyIrFunction(function: IrFunction) {
-        function.acceptChildrenVoid(object : IrElementVisitorVoid {
+        function.acceptChildrenVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/JvmIrSerializerSession.kt b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/JvmIrSerializerSession.kt
index 0df40f8..f433096 100644
--- a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/JvmIrSerializerSession.kt
+++ b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/JvmIrSerializerSession.kt
@@ -93,7 +93,7 @@
     }
 }
 
-private object ForVisibleInlineFunctionsVisitor : IrElementVisitor<Unit, (IrDeclaration) -> Unit> {
+private object ForVisibleInlineFunctionsVisitor : IrElementVisitor<Unit, (IrDeclaration) -> Unit>() {
     override fun visitElement(element: IrElement, data: (IrDeclaration) -> Unit) {
         error("Visitor only for nonlocal declarations")
     }
diff --git a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/deserializeLazyDeclarations.kt b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/deserializeLazyDeclarations.kt
index 6c1865d..d352600 100644
--- a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/deserializeLazyDeclarations.kt
+++ b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/deserializeLazyDeclarations.kt
@@ -173,7 +173,7 @@
 ) {
     val builder = makeSimpleFakeOverrideBuilder(symbolTable, typeSystemContext, symbolDeserializer)
     toplevel.acceptChildrenVoid(
-        object : IrElementVisitorVoid {
+        object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrInlineBodiesHandler.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrInlineBodiesHandler.kt
index f19699d..9bf1632 100644
--- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrInlineBodiesHandler.kt
+++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrInlineBodiesHandler.kt
@@ -31,7 +31,7 @@
         assertions.assertTrue(declaredInlineFunctionSignatures.isNotEmpty())
     }
 
-    inner class InlineFunctionsCollector : IrElementVisitorVoid {
+    inner class InlineFunctionsCollector : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement) {
             element.acceptChildrenVoid(this)
         }
@@ -42,7 +42,7 @@
         }
     }
 
-    inner class InlineCallBodiesCheck : IrElementVisitorVoid {
+    inner class InlineCallBodiesCheck : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement) {
             element.acceptChildrenVoid(this)
         }
diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrSourceRangesTestCase.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrSourceRangesTestCase.kt
index f24f032..55b8cb6 100644
--- a/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrSourceRangesTestCase.kt
+++ b/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrSourceRangesTestCase.kt
@@ -44,7 +44,7 @@
     private class DumpSourceLocations(
         out: Appendable,
         val fileEntry: IrFileEntry
-    ) : IrElementVisitorVoid {
+    ) : IrElementVisitorVoid() {
         val printer = Printer(out, "  ")
         val elementRenderer = RenderIrElementVisitor()
 
diff --git a/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/ir/IrVerifier.kt b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/ir/IrVerifier.kt
index 2b1248c..bbdb3ff 100644
--- a/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/ir/IrVerifier.kt
+++ b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/ir/IrVerifier.kt
@@ -19,7 +19,7 @@
 class IrVerifier(
     private val assertions: Assertions,
     private val isFir: Boolean,
-) : IrElementVisitorVoid {
+) : IrElementVisitorVoid() {
     private val errors = ArrayList<String>()
 
     private val symbolForDeclaration = HashMap<IrElement, IrSymbol>()
@@ -38,7 +38,7 @@
         }
     }
 
-    private val elementsAreUniqueChecker = object : IrElementVisitorVoid {
+    private val elementsAreUniqueChecker = object : IrElementVisitorVoid() {
         private val elements = HashSet<IrElement>()
 
         override fun visitElement(element: IrElement) {
diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/MethodOrderTest.kt b/compiler/tests/org/jetbrains/kotlin/codegen/MethodOrderTest.kt
index 204abc1..2a8958a 100644
--- a/compiler/tests/org/jetbrains/kotlin/codegen/MethodOrderTest.kt
+++ b/compiler/tests/org/jetbrains/kotlin/codegen/MethodOrderTest.kt
@@ -157,7 +157,7 @@
                     fun visitElement(element: IrElement, data: D): R
                 }
 
-                interface IrElementTransformer<in D> : IrElementVisitor<IrElement, D> {
+                interface IrElementTransformer<in D> : IrElementVisitor<IrElement, D>() {
                     override fun visitElement(element: IrElement, data: D): IrElement =
                             element.also { throw RuntimeException() }
                 }
diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/JvmIrLinkageModeTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/JvmIrLinkageModeTest.kt
index 6ab696b..5a27c35 100644
--- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/JvmIrLinkageModeTest.kt
+++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/JvmIrLinkageModeTest.kt
@@ -77,7 +77,7 @@
         override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) {
             val file = moduleFragment.files.single()
             val signatures = mutableListOf<IdSignature>()
-            file.acceptVoid(object : IrElementVisitorVoid {
+            file.acceptVoid(object : IrElementVisitorVoid() {
                 override fun visitElement(element: IrElement) {
                     element.acceptChildrenVoid(this)
                 }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLoweringPhases.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLoweringPhases.kt
index 09f3190..79c0ee5 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLoweringPhases.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLoweringPhases.kt
@@ -157,7 +157,7 @@
 
 internal val extractLocalClassesFromInlineBodies = makeKonanFileOpPhase(
         { context, irFile ->
-            irFile.acceptChildrenVoid(object : IrElementVisitorVoid {
+            irFile.acceptChildrenVoid(object : IrElementVisitorVoid() {
                 override fun visitElement(element: IrElement) {
                     element.acceptChildrenVoid(this)
                 }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/ClassLayoutBuilder.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/ClassLayoutBuilder.kt
index d791732..8022da9 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/ClassLayoutBuilder.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/ClassLayoutBuilder.kt
@@ -145,7 +145,7 @@
         val root = context.irBuiltIns.anyClass.owner
         val immediateInheritors = mutableMapOf<IrClass, MutableList<IrClass>>()
         val allClasses = mutableListOf<IrClass>()
-        irModule.acceptVoid(object: IrElementVisitorVoid {
+        irModule.acceptVoid(object: IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
@@ -217,7 +217,7 @@
                 val interfaceIndices = mutableMapOf<IrClass, Int>()
                 val interfaces = mutableListOf<IrClass>()
                 val forbidden = mutableListOf<MutableList<Int>>()
-                irModuleFragment.acceptVoid(object : IrElementVisitorVoid {
+                irModuleFragment.acceptVoid(object : IrElementVisitorVoid() {
                     override fun visitElement(element: IrElement) {
                         element.acceptChildrenVoid(this)
                     }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/ModuleIndex.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/ModuleIndex.kt
index d1b8612..a1f2cd3 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/ModuleIndex.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/ModuleIndex.kt
@@ -42,7 +42,7 @@
         properties = mutableMapOf()
         enumEntries = mutableMapOf()
 
-        module.acceptVoid(object : IrElementVisitorVoid {
+        module.acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BitcodePhases.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BitcodePhases.kt
index 6477c06..f9a19b6 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BitcodePhases.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BitcodePhases.kt
@@ -114,7 +114,7 @@
                 }
             }
 
-            context.irModule!!.acceptChildrenVoid(object: IrElementVisitorVoid {
+            context.irModule!!.acceptChildrenVoid(object: IrElementVisitorVoid() {
                 override fun visitElement(element: IrElement) {
                     element.acceptChildrenVoid(this)
                 }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt
index 8fae48d..654a789 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt
@@ -81,7 +81,7 @@
 internal fun IrField.shouldBeFrozen(context: Context): Boolean =
         this.storageKind(context) == FieldStorageKind.SHARED_FROZEN
 
-internal class RTTIGeneratorVisitor(generationState: NativeGenerationState) : IrElementVisitorVoid {
+internal class RTTIGeneratorVisitor(generationState: NativeGenerationState) : IrElementVisitorVoid() {
     val generator = RTTIGenerator(generationState)
 
     val kotlinObjCClassInfoGenerator = KotlinObjCClassInfoGenerator(generationState)
@@ -191,7 +191,7 @@
 
 //-------------------------------------------------------------------------//
 
-internal class CodeGeneratorVisitor(val generationState: NativeGenerationState, val lifetimes: Map<IrElement, Lifetime>) : IrElementVisitorVoid {
+internal class CodeGeneratorVisitor(val generationState: NativeGenerationState, val lifetimes: Map<IrElement, Lifetime>) : IrElementVisitorVoid() {
     private val context = generationState.context
     private val llvm = generationState.llvm
     private val debugInfo: DebugInfo
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/coverage/CoverageRegionCollector.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/coverage/CoverageRegionCollector.kt
index f5466a1..6c4c2f8 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/coverage/CoverageRegionCollector.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/coverage/CoverageRegionCollector.kt
@@ -32,7 +32,7 @@
                         FileRegionInfo(file, collector.functionRegions)
                     }
 
-    private inner class FunctionsCollector(val file: IrFile) : IrElementVisitorVoid {
+    private inner class FunctionsCollector(val file: IrFile) : IrElementVisitorVoid() {
 
         val functionRegions = mutableListOf<FunctionRegions>()
 
@@ -70,7 +70,7 @@
 private class IrFunctionRegionsCollector(
         val fileFilter: (IrFile) -> Boolean,
         val irFile: IrFile
-) : IrElementVisitorVoid {
+) : IrElementVisitorVoid() {
 
     private data class StatementContext(val current: IrStatement, val next: IrStatement?)
 
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/AddFunctionSupertypeToSuspendFunctionLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/AddFunctionSupertypeToSuspendFunctionLowering.kt
index 583c6c9..05ac542 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/AddFunctionSupertypeToSuspendFunctionLowering.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/AddFunctionSupertypeToSuspendFunctionLowering.kt
@@ -33,7 +33,7 @@
  */
 internal class AddFunctionSupertypeToSuspendFunctionLowering(val context: Context) : FileLoweringPass {
     override fun lower(irFile: IrFile) {
-        irFile.acceptChildrenVoid(object : IrElementVisitorVoid {
+        irFile.acceptChildrenVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 // Don't need to iterate through children. All local classes are already moved to the top level by this moment.
             }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/CacheInfoBuilder.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/CacheInfoBuilder.kt
index 121007a..447e652 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/CacheInfoBuilder.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/CacheInfoBuilder.kt
@@ -21,7 +21,7 @@
         private val moduleDeserializer: KonanIrLinker.KonanPartialModuleDeserializer,
         private val irModule: IrModuleFragment
 ) {
-    fun build() = irModule.acceptChildrenVoid(object : IrElementVisitorVoid {
+    fun build() = irModule.acceptChildrenVoid(object : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement) {
             element.acceptChildrenVoid(this)
         }
@@ -57,7 +57,7 @@
         if (irFunction in visitedInlineFunctions) return
         visitedInlineFunctions += irFunction
 
-        irFunction.acceptChildrenVoid(object : IrElementVisitorVoid {
+        irFunction.acceptChildrenVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/ExpectDeclarationsRemoving.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/ExpectDeclarationsRemoving.kt
index 621bdd3..058e6ab 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/ExpectDeclarationsRemoving.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/ExpectDeclarationsRemoving.kt
@@ -61,7 +61,7 @@
     }
 
     private fun copyDefaultArgumentsFromExpectToActual(declaration: IrDeclaration) {
-        declaration.acceptVoid(object : IrElementVisitorVoid {
+        declaration.acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt
index 9a200ac..1457e66 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt
@@ -698,7 +698,7 @@
             ///    inline fun <T> myAutoreleasepool(block: () -> T) = autoreleasepool(block)
             ///    myAutoreleasepool { suspendHere() }
 
-            expression.acceptVoid(object : IrElementVisitorVoid {
+            expression.acceptVoid(object : IrElementVisitorVoid() {
                 override fun visitElement(element: IrElement) {
                     element.acceptChildrenVoid(this)
                 }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeSuspendFunctionLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeSuspendFunctionLowering.kt
index 287c656..815a0c5 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeSuspendFunctionLowering.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeSuspendFunctionLowering.kt
@@ -97,7 +97,7 @@
                  *
                  * The visitor below does exactly this.
                  */
-                originalBody.transformChildren(object : IrElementTransformer<Boolean> {
+                originalBody.transformChildren(object : IrElementTransformer<Boolean>() {
                     fun IrBuilderWithScope.irGetCompletion() = irCall(completionGetter).apply { dispatchReceiver = irGet(thisReceiver) }
 
                     override fun visitCall(expression: IrCall, /* substituteContinuation */ data: Boolean): IrExpression {
@@ -507,7 +507,7 @@
 
     private fun IrElement.hasSuspendCalls(): Boolean {
         var hasSuspendCalls = false
-        acceptVoid(object : IrElementVisitorVoid {
+        acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PostInlineLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PostInlineLowering.kt
index 8e78497..095b0d9 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PostInlineLowering.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PostInlineLowering.kt
@@ -36,7 +36,7 @@
 
     override fun lower(irBody: IrBody, container: IrDeclaration) {
         val irFile = container.file
-        irBody.transformChildren(object : IrElementTransformer<IrBuilderWithScope> {
+        irBody.transformChildren(object : IrElementTransformer<IrBuilderWithScope>() {
             override fun visitDeclaration(declaration: IrDeclarationBase, data: IrBuilderWithScope) =
                     super.visitDeclaration(declaration,
                             data = (declaration as? IrSymbolOwner)?.let { context.createIrBuilder(it.symbol, it.startOffset, it.endOffset) }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PreInlineLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PreInlineLowering.kt
index 421e895..885eb2e 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PreInlineLowering.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PreInlineLowering.kt
@@ -39,7 +39,7 @@
     override fun lower(irBody: IrBody, container: IrDeclaration) = lower(irBody, container, container.file)
 
     fun lower(irBody: IrBody, container: IrDeclaration, irFile: IrFile) {
-        irBody.transformChildren(object : IrElementTransformer<IrBuilderWithScope> {
+        irBody.transformChildren(object : IrElementTransformer<IrBuilderWithScope>() {
             override fun visitDeclaration(declaration: IrDeclarationBase, data: IrBuilderWithScope) =
                     super.visitDeclaration(declaration,
                             data = (declaration as? IrSymbolOwner)?.let { context.createIrBuilder(it.symbol, it.startOffset, it.endOffset) }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/RedundantCoercionsCleaner.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/RedundantCoercionsCleaner.kt
index 687c91f..317f7f1 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/RedundantCoercionsCleaner.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/RedundantCoercionsCleaner.kt
@@ -51,7 +51,7 @@
     private val returnableBlockValues = mutableMapOf<IrReturnableBlock, MutableList<IrExpression>>()
 
     private fun computeReturnableBlockValues(irFile: IrFile) {
-        irFile.acceptChildrenVoid(object: IrElementVisitorVoid {
+        irFile.acceptChildrenVoid(object: IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/ReturnsInsertionLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/ReturnsInsertionLowering.kt
index 02f5a36..99b189a 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/ReturnsInsertionLowering.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/ReturnsInsertionLowering.kt
@@ -24,7 +24,7 @@
     private val symbols = context.ir.symbols
 
     override fun lower(irFile: IrFile) {
-        irFile.acceptVoid(object : IrElementVisitorVoid {
+        irFile.acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/SpecialBackendChecksTraversal.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/SpecialBackendChecksTraversal.kt
index c5bd06c..3031768 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/SpecialBackendChecksTraversal.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/SpecialBackendChecksTraversal.kt
@@ -56,7 +56,7 @@
         val symbols: KonanSymbols,
         val irBuiltIns: IrBuiltIns,
         private val irFile: IrFile,
-) : IrElementVisitorVoid {
+) : IrElementVisitorVoid() {
     val target = context.config.target
 
     fun reportError(location: IrElement, message: String): Nothing =
@@ -532,7 +532,7 @@
         if (targetValues.isEmpty()) return emptyList()
 
         val result = mutableListOf<IrExpression>()
-        function.acceptChildrenVoid(object: IrElementVisitorVoid {
+        function.acceptChildrenVoid(object: IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/StaticInitializersLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/StaticInitializersLowering.kt
index 0a3ab71..6c97b0f 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/StaticInitializersLowering.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/StaticInitializersLowering.kt
@@ -51,7 +51,7 @@
 // TODO: ExplicitlyExported for IR proto are not longer needed.
 internal class StaticInitializersLowering(val context: Context) : FileLoweringPass {
     override fun lower(irFile: IrFile) {
-        irFile.acceptVoid(object : IrElementVisitorVoid {
+        irFile.acceptVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/TestProcessor.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/TestProcessor.kt
index ba1b801..39dab3e 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/TestProcessor.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/TestProcessor.kt
@@ -173,7 +173,7 @@
                 functions.registerFunction(function, kind, ignored)
     }
 
-    private inner class AnnotationCollector(val irFile: IrFile) : IrElementVisitorVoid {
+    private inner class AnnotationCollector(val irFile: IrFile) : IrElementVisitorVoid() {
         val testClasses = mutableMapOf<IrClass, TestClass>()
 
         val topLevelFunctions = mutableListOf<TestFunction>()
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt
index d818141..7fa0c77 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt
@@ -172,7 +172,7 @@
 
     fun build(): ModuleDFG {
         val functions = mutableMapOf<DataFlowIR.FunctionSymbol, DataFlowIR.Function>()
-        irModule.accept(object : IrElementVisitorVoid {
+        irModule.accept(object : IrElementVisitorVoid() {
 
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
@@ -275,7 +275,7 @@
         return ModuleDFG(functions, symbolTable)
     }
 
-    private inner class ElementFinderVisitor : IrElementVisitorVoid {
+    private inner class ElementFinderVisitor : IrElementVisitorVoid() {
         val expressions = mutableMapOf<IrExpression, IrLoop?>()
         val parentLoops = mutableMapOf<IrLoop, IrLoop?>()
         val variableValues = VariableValues()
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt
index dfa770e..130a550 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt
@@ -455,7 +455,7 @@
         var privateFunIndex = 0
 
         init {
-            irModule.accept(object : IrElementVisitorVoid {
+            irModule.accept(object : IrElementVisitorVoid() {
                 override fun visitElement(element: IrElement) {
                     element.acceptChildrenVoid(this)
                 }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DevirtualizationAnalysis.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DevirtualizationAnalysis.kt
index 1a2e7a1..af9beb3 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DevirtualizationAnalysis.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DevirtualizationAnalysis.kt
@@ -97,7 +97,7 @@
         // At this point all function references are lowered except those leaking to the native world.
         // Conservatively assume them belonging of the root set.
         val leakingThroughFunctionReferences = mutableListOf<DataFlowIR.FunctionSymbol>()
-        context.irModule!!.acceptChildrenVoid(object : IrElementVisitorVoid {
+        context.irModule!!.acceptChildrenVoid(object : IrElementVisitorVoid() {
             override fun visitElement(element: IrElement) {
                 element.acceptChildrenVoid(this)
             }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/StaticInitializersOptimization.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/StaticInitializersOptimization.kt
index b80ee6d..d81b711 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/StaticInitializersOptimization.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/StaticInitializersOptimization.kt
@@ -286,7 +286,7 @@
             val initializedFilesAtLoopsContinues = mutableMapOf<IrLoop, BitSet>()
             // Each visitXXX function gets as [data] parameter the set of initialized files before evaluating
             // current element and returns the set of initialized files after evaluating this element.
-            val callerResult = body.accept(object : IrElementVisitor<BitSet, BitSet> {
+            val callerResult = body.accept(object : IrElementVisitor<BitSet, BitSet>() {
                 private fun intersectInitializedFiles(previous: BitSet?, current: BitSet) =
                         previous?.copy()?.also { it.and(current) } ?: current
 
@@ -532,7 +532,7 @@
         var numberOfCallSitesWithExtractedGlobalInitializerCall = 0
         var numberOfCallSitesWithExtractedThreadLocalInitializerCall = 0
 
-        context.irModule!!.transformChildren(object : IrElementTransformer<IrBuilderWithScope?> {
+        context.irModule!!.transformChildren(object : IrElementTransformer<IrBuilderWithScope?>() {
             override fun visitDeclaration(declaration: IrDeclarationBase, data: IrBuilderWithScope?): IrStatement {
                 return super.visitDeclaration(declaration, context.createIrBuilder(declaration.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET))
             }
diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt
index 604209c..deb310e 100644
--- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt
+++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt
@@ -39,7 +39,7 @@
 
 @OptIn(ObsoleteDescriptorBasedAPI::class)
 class ParcelableIrTransformer(private val context: IrPluginContext, private val androidSymbols: AndroidSymbols) :
-    ParcelableExtensionBase, IrElementVisitorVoid {
+    ParcelableExtensionBase, IrElementVisitorVoid() {
     private val serializerFactory = IrParcelSerializerFactory(androidSymbols)
 
     private val deferredOperations = mutableListOf<() -> Unit>()
diff --git a/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/js/AtomicfuJsIrTransformer.kt b/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/js/AtomicfuJsIrTransformer.kt
index bce499a..2b7667e 100644
--- a/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/js/AtomicfuJsIrTransformer.kt
+++ b/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/js/AtomicfuJsIrTransformer.kt
@@ -106,7 +106,7 @@
         }
     }
 
-    private inner class AtomicTransformer : IrElementTransformer<IrFunction?> {
+    private inner class AtomicTransformer : IrElementTransformer<IrFunction?>() {
 
         override fun visitProperty(declaration: IrProperty, data: IrFunction?): IrStatement {
             // Support transformation for delegated properties:
diff --git a/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/jvm/AtomicfuJvmIrTransformer.kt b/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/jvm/AtomicfuJvmIrTransformer.kt
index 7d50f7e..656594f 100644
--- a/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/jvm/AtomicfuJvmIrTransformer.kt
+++ b/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/jvm/AtomicfuJvmIrTransformer.kt
@@ -87,7 +87,7 @@
 
     private val propertyToAtomicHandler = mutableMapOf<IrProperty, IrProperty>()
 
-    private inner class AtomicHandlerTransformer : IrElementTransformer<IrFunction?> {
+    private inner class AtomicHandlerTransformer : IrElementTransformer<IrFunction?>() {
         override fun visitClass(declaration: IrClass, data: IrFunction?): IrStatement {
             declaration.declarations.filter(::fromKotlinxAtomicfu).forEach {
                 (it as IrProperty).transformAtomicfuProperty(declaration)
@@ -472,7 +472,7 @@
 
     private data class AtomicFieldInfo(val dispatchReceiver: IrExpression?, val atomicHandler: IrExpression)
 
-    private inner class AtomicfuTransformer : IrElementTransformer<IrFunction?> {
+    private inner class AtomicfuTransformer : IrElementTransformer<IrFunction?>() {
         override fun visitFunction(declaration: IrFunction, data: IrFunction?): IrStatement {
             return super.visitFunction(declaration, declaration)
         }
diff --git a/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/extensions/AtomicfuLoweringExtension.kt b/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/extensions/AtomicfuLoweringExtension.kt
index cdb0a158..3e47d2b 100644
--- a/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/extensions/AtomicfuLoweringExtension.kt
+++ b/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/extensions/AtomicfuLoweringExtension.kt
@@ -52,7 +52,7 @@
  * Copy of [runOnFilePostfix], but this implementation first lowers declaration, then its children.
  */
 fun FileLoweringPass.runOnFileInOrder(irFile: IrFile) {
-    irFile.acceptVoid(object : IrElementVisitorVoid {
+    irFile.acceptVoid(object : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement) {
             element.acceptChildrenVoid(this)
         }
diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/AbstractTransformerForGenerator.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/AbstractTransformerForGenerator.kt
index 57a6a1a..a1591d2 100644
--- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/AbstractTransformerForGenerator.kt
+++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/ir/plugin/AbstractTransformerForGenerator.kt
@@ -20,7 +20,7 @@
 import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
 import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
 
-abstract class AbstractTransformerForGenerator(protected val context: IrPluginContext) : IrElementVisitorVoid {
+abstract class AbstractTransformerForGenerator(protected val context: IrPluginContext) : IrElementVisitorVoid() {
     protected val irFactory = context.irFactory
     protected val irBuiltIns = context.irBuiltIns
 
diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationLoweringExtension.kt b/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationLoweringExtension.kt
index 3b6c1b9..a74ec15 100644
--- a/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationLoweringExtension.kt
+++ b/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationLoweringExtension.kt
@@ -42,7 +42,7 @@
  * Copy of [runOnFilePostfix], but this implementation first lowers declaration, then its children.
  */
 fun ClassLoweringPass.runOnFileInOrder(irFile: IrFile) {
-    irFile.acceptVoid(object : IrElementVisitorVoid {
+    irFile.acceptVoid(object : IrElementVisitorVoid() {
         override fun visitElement(element: IrElement) {
             element.acceptChildrenVoid(this)
         }
diff --git a/plugins/noarg/noarg.backend/src/org/jetbrains/kotlin/noarg/NoArgIrGenerationExtension.kt b/plugins/noarg/noarg.backend/src/org/jetbrains/kotlin/noarg/NoArgIrGenerationExtension.kt
index 000927a..7a859e3 100644
--- a/plugins/noarg/noarg.backend/src/org/jetbrains/kotlin/noarg/NoArgIrGenerationExtension.kt
+++ b/plugins/noarg/noarg.backend/src/org/jetbrains/kotlin/noarg/NoArgIrGenerationExtension.kt
@@ -37,7 +37,7 @@
     private val context: IrPluginContext,
     private val annotations: List<String>,
     private val invokeInitializers: Boolean,
-) : AnnotationBasedExtension, IrElementVisitorVoid {
+) : AnnotationBasedExtension, IrElementVisitorVoid() {
     override fun getAnnotationFqNames(modifierListOwner: KtModifierListOwner?): List<String> = annotations
 
     override fun visitElement(element: IrElement) {
diff --git a/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformerBase.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformerBase.kt
index 41d4e1a..7ff88b3 100644
--- a/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformerBase.kt
+++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformerBase.kt
@@ -28,7 +28,7 @@
 abstract class ParcelizeIrTransformerBase(
     protected val context: IrPluginContext,
     protected val androidSymbols: AndroidSymbols
-) : ParcelizeExtensionBase, IrElementVisitorVoid {
+) : ParcelizeExtensionBase, IrElementVisitorVoid() {
     private val irFactory: IrFactory = IrFactoryImpl
 
     protected val deferredOperations = mutableListOf<() -> Unit>()