[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 package org.jetbrains.kotlin.backend.common
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
@@ -283,6 +283,19 @@ class CheckIrElementVisitor(
expression.symbol.ensureBound(expression) 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) { override fun visitFunctionAccess(expression: IrFunctionAccessExpression) {
super.visitFunctionAccess(expression) super.visitFunctionAccess(expression)
@@ -464,6 +464,7 @@ fun IrClass.addFakeOverrides() {
irClass.declarations irClass.declarations
.flatMap { it.toList() } .flatMap { it.toList() }
.filter { it !in overriddenFunctions } .filter { it !in overriddenFunctions }
.filter { it.visibility != Visibilities.PRIVATE }
} }
.toMutableSet() .toMutableSet()
@@ -24,7 +24,7 @@ private fun ClassLoweringPass.runOnFilesPostfix(moduleFragment: IrModuleFragment
private fun validationCallback(context: JsIrBackendContext, module: IrModuleFragment) { private fun validationCallback(context: JsIrBackendContext, module: IrModuleFragment) {
val validatorConfig = IrValidatorConfig( val validatorConfig = IrValidatorConfig(
abortOnError = false, abortOnError = true,
ensureAllNodesAreDifferent = true, ensureAllNodesAreDifferent = true,
checkTypes = false, checkTypes = false,
checkDescriptors = false checkDescriptors = false