[IR BE] Don't override private declarations

This commit is contained in:
Svyatoslav Kuzmich
2019-06-17 16:35:38 +03:00
parent 7796d084e1
commit 84d48b8c7b
3 changed files with 17 additions and 3 deletions
@@ -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