Get rid of 'descriptor.isInner()' call

This commit is contained in:
Mikhael Bogdanov
2018-05-09 12:21:10 +02:00
parent b9da331dcd
commit 9546c36c3c
6 changed files with 23 additions and 21 deletions
@@ -119,7 +119,7 @@ class ClosureAnnotator {
closureBuilders[declaration.descriptor] = closureBuilder
closureBuilder.declareVariable(classDescriptor.thisAsReceiverParameter)
if (classDescriptor.isInner) {
if (declaration.isInner) {
closureBuilder.declareVariable((classDescriptor.containingDeclaration as ClassDescriptor).thisAsReceiverParameter)
includeInParent(closureBuilder)
}
@@ -20,9 +20,7 @@ import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
import org.jetbrains.kotlin.ir.util.createParameterDeclarations
import org.jetbrains.kotlin.ir.util.dump
import org.jetbrains.kotlin.ir.util.transformFlat
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.*
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitClassReceiver
import java.util.*
@@ -41,7 +39,7 @@ class InnerClassesLowering(val context: BackendContext) : ClassLoweringPass {
val class2Symbol = HashMap<ClassDescriptor, IrClass>()
fun lowerInnerClass() {
if (!irClass.descriptor.isInner) return
if (!irClass.isInner) return
rememberClassSymbols()
createOuterThisField()
@@ -161,7 +159,7 @@ class InnerClassesLowering(val context: BackendContext) : ClassLoweringPass {
var innerClass = irClass
while (innerClass != implicitThisClass) {
if (!innerClass.descriptor.isInner) {
if (!innerClass.isInner) {
// Captured 'this' unrelated to inner classes nesting hierarchy, leave it as is -
// should be transformed by closures conversion.
return expression
@@ -202,7 +200,7 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLowe
val dispatchReceiver = expression.dispatchReceiver ?: return expression
val callee = expression.symbol as? IrConstructorSymbol ?: return expression
val parent = callee.owner.parent as? IrClass ?: return expression
if (!parent.descriptor.isInner) return expression
if (!parent.isInner) return expression
val newCallee = context.descriptorsFactory.getInnerClassConstructorWithOuterThisParameter(callee.owner)
val newCall = IrCallImpl(
@@ -223,14 +221,14 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLowe
expression.transformChildrenVoid(this)
val dispatchReceiver = expression.dispatchReceiver ?: return expression
val callee = expression.symbol
if (!callee.descriptor.containingDeclaration.isInner) return expression
val classConstructor = expression.symbol.owner
if (!(classConstructor.parent as IrClass).isInner) return expression
val newCallee = context.descriptorsFactory.getInnerClassConstructorWithOuterThisParameter(callee.owner)
val newCallee = context.descriptorsFactory.getInnerClassConstructorWithOuterThisParameter(classConstructor)
val newCall = IrDelegatingConstructorCallImpl(
expression.startOffset, expression.endOffset, newCallee, newCallee.descriptor,
null // TODO type arguments map
)
classConstructor.typeParameters.size
).apply { copyTypeArgumentsFrom(expression) }
newCall.putValueArgument(0, dispatchReceiver)
for (i in 1..newCallee.descriptor.valueParameters.lastIndex) {
@@ -513,6 +513,7 @@ class LocalDeclarationsLowering(val context: BackendContext, val localNameProvid
localFunctionContext.transformedDeclaration = with(localFunctionContext.declaration) {
IrFunctionImpl(startOffset, endOffset, origin, newDescriptor)
}.apply {
parent = localFunctionContext.declaration.parent
createParameterDeclarations()
recordTransformedValueParameters(localFunctionContext)
transformedDeclarations[oldDescriptor] = this.symbol
@@ -600,6 +601,7 @@ class LocalDeclarationsLowering(val context: BackendContext, val localNameProvid
constructorContext.transformedDeclaration = with(constructorContext.declaration) {
IrConstructorImpl(startOffset, endOffset, origin, newDescriptor)
}.apply {
parent = constructorContext.declaration.parent
createParameterDeclarations()
recordTransformedValueParameters(constructorContext)
transformedDeclarations[oldDescriptor] = this.symbol
@@ -642,7 +644,9 @@ class LocalDeclarationsLowering(val context: BackendContext, val localNameProvid
localClassContext.declaration.startOffset, localClassContext.declaration.endOffset,
DECLARATION_ORIGIN_FIELD_FOR_CAPTURED_VALUE,
fieldDescriptor
)
).apply {
parent = localClassContext.declaration
}
}
}
@@ -728,9 +732,9 @@ class LocalDeclarationsLowering(val context: BackendContext, val localNameProvid
declaration.acceptChildrenVoid(this)
val descriptor = declaration.descriptor
assert(descriptor.visibility != Visibilities.LOCAL)
assert(declaration.visibility != Visibilities.LOCAL)
if (descriptor.constructedClass.isInner) return
if ((declaration.parent as IrClass).isInner) return
localClassConstructors[descriptor] = LocalClassConstructorContext(declaration)
}
@@ -740,7 +744,7 @@ class LocalDeclarationsLowering(val context: BackendContext, val localNameProvid
val descriptor = declaration.descriptor
if (descriptor.isInner) return
if (declaration.isInner) return
// Local nested classes can only be inner.
assert(descriptor.declaredInFunction())
@@ -44,7 +44,7 @@ class JsDescriptorsFactory(
override fun getSymbolForEnumEntry(enumEntry: IrEnumEntrySymbol): IrFieldSymbol = TODO()
override fun getOuterThisFieldSymbol(innerClass: IrClass): IrFieldSymbol =
if (!innerClass.descriptor.isInner) throw AssertionError("Class is not inner: ${innerClass.dump()}")
if (!innerClass.isInner) throw AssertionError("Class is not inner: ${innerClass.dump()}")
else outerThisFieldSymbols.getOrPut(innerClass) {
val outerClass = innerClass.parent as? IrClass
?: throw AssertionError("No containing class for inner class ${innerClass.dump()}")
@@ -78,7 +78,7 @@ class JsDescriptorsFactory(
override fun getInnerClassConstructorWithOuterThisParameter(innerClassConstructor: IrConstructor): IrConstructorSymbol {
val innerClass = innerClassConstructor.parent as IrClass
assert(innerClass.descriptor.isInner) { "Class is not inner: $innerClass" }
assert(innerClass.isInner) { "Class is not inner: $innerClass" }
return innerClassConstructors.getOrPut(innerClassConstructor.symbol) {
createInnerClassConstructorWithOuterThisParameter(innerClassConstructor.descriptor)
@@ -47,6 +47,7 @@ class JvmLower(val context: JvmBackendContext) {
InnerClassesLowering(context).runOnFilePostfix(irFile)
InnerClassConstructorCallsLowering(context).runOnFilePostfix(irFile)
irFile.acceptVoid(PatchDeclarationParentsVisitor())
LocalDeclarationsLowering(
context,
object : LocalNameProvider {
@@ -55,7 +56,6 @@ class JvmLower(val context: JvmBackendContext) {
}
).runOnFilePostfix(irFile)
irFile.acceptVoid(PatchDeclarationParentsVisitor())
EnumClassLowering(context).runOnFilePostfix(irFile)
//Should be before SyntheticAccessorLowering cause of synthetic accessor for companion constructor
ObjectClassLowering(context).lower(irFile)
@@ -67,7 +67,7 @@ class JvmDescriptorsFactory(
}
override fun getOuterThisFieldSymbol(innerClass: IrClass): IrFieldSymbol =
if (!innerClass.descriptor.isInner) throw AssertionError("Class is not inner: ${innerClass.dump()}")
if (!innerClass.isInner) throw AssertionError("Class is not inner: ${innerClass.dump()}")
else outerThisDescriptors.getOrPut(innerClass) {
val outerClass = innerClass.parent as? IrClass
?: throw AssertionError("No containing class for inner class ${innerClass.dump()}")
@@ -81,7 +81,7 @@ class JvmDescriptorsFactory(
}
override fun getInnerClassConstructorWithOuterThisParameter(innerClassConstructor: IrConstructor): IrConstructorSymbol {
assert((innerClassConstructor.parent as IrClass).descriptor.isInner) { "Class is not inner: ${(innerClassConstructor.parent as IrClass).dump()}" }
assert((innerClassConstructor.parent as IrClass).isInner) { "Class is not inner: ${(innerClassConstructor.parent as IrClass).dump()}" }
return innerClassConstructors.getOrPut(innerClassConstructor.symbol) {
createInnerClassConstructorWithOuterThisParameter(innerClassConstructor)