[IR BE] Don't override private declarations
This commit is contained in:
+15
-2
@@ -17,9 +17,9 @@
|
||||
package org.jetbrains.kotlin.backend.common
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||
@@ -283,6 +283,19 @@ class CheckIrElementVisitor(
|
||||
expression.symbol.ensureBound(expression)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration) {
|
||||
super.visitDeclaration(declaration)
|
||||
|
||||
if (declaration is IrOverridableDeclaration<*>) {
|
||||
for (overriddenSymbol in declaration.overriddenSymbols) {
|
||||
val overriddenDeclaration = overriddenSymbol.owner as? IrDeclarationWithVisibility ?: continue
|
||||
if (overriddenDeclaration.visibility == Visibilities.PRIVATE) {
|
||||
reportError(declaration, "Overrides private declaration $overriddenDeclaration")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitFunctionAccess(expression: IrFunctionAccessExpression) {
|
||||
super.visitFunctionAccess(expression)
|
||||
|
||||
|
||||
@@ -464,6 +464,7 @@ fun IrClass.addFakeOverrides() {
|
||||
irClass.declarations
|
||||
.flatMap { it.toList() }
|
||||
.filter { it !in overriddenFunctions }
|
||||
.filter { it.visibility != Visibilities.PRIVATE }
|
||||
}
|
||||
.toMutableSet()
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ private fun ClassLoweringPass.runOnFilesPostfix(moduleFragment: IrModuleFragment
|
||||
|
||||
private fun validationCallback(context: JsIrBackendContext, module: IrModuleFragment) {
|
||||
val validatorConfig = IrValidatorConfig(
|
||||
abortOnError = false,
|
||||
abortOnError = true,
|
||||
ensureAllNodesAreDifferent = true,
|
||||
checkTypes = false,
|
||||
checkDescriptors = false
|
||||
|
||||
Reference in New Issue
Block a user