[IR BE] Don't override private declarations
This commit is contained in:
+15
-2
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user