JVM_IR. Remove descriptors from ConstAndJvmFieldPropertiesLowering
This commit is contained in:
+3
-11
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
|||||||
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
|
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
|
||||||
import org.jetbrains.kotlin.backend.common.lower.irBlock
|
import org.jetbrains.kotlin.backend.common.lower.irBlock
|
||||||
import org.jetbrains.kotlin.backend.common.makePhase
|
import org.jetbrains.kotlin.backend.common.makePhase
|
||||||
import org.jetbrains.kotlin.codegen.JvmCodegenUtil
|
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
@@ -20,7 +19,6 @@ import org.jetbrains.kotlin.ir.util.hasAnnotation
|
|||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi.JVM_FIELD_ANNOTATION_FQ_NAME
|
import org.jetbrains.kotlin.load.java.JvmAbi.JVM_FIELD_ANNOTATION_FQ_NAME
|
||||||
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
|
||||||
|
|
||||||
class ConstAndJvmFieldPropertiesLowering(val context: CommonBackendContext) : IrElementTransformerVoid(), FileLoweringPass {
|
class ConstAndJvmFieldPropertiesLowering(val context: CommonBackendContext) : IrElementTransformerVoid(), FileLoweringPass {
|
||||||
override fun lower(irFile: IrFile) {
|
override fun lower(irFile: IrFile) {
|
||||||
@@ -28,7 +26,7 @@ class ConstAndJvmFieldPropertiesLowering(val context: CommonBackendContext) : Ir
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitProperty(declaration: IrProperty): IrStatement {
|
override fun visitProperty(declaration: IrProperty): IrStatement {
|
||||||
if (JvmCodegenUtil.isConstOrHasJvmFieldAnnotation(declaration.descriptor)) {
|
if (declaration.isConst || declaration.backingField?.hasAnnotation(JVM_FIELD_ANNOTATION_FQ_NAME) == true) {
|
||||||
/*Safe or need copy?*/
|
/*Safe or need copy?*/
|
||||||
declaration.getter = null
|
declaration.getter = null
|
||||||
declaration.setter = null
|
declaration.setter = null
|
||||||
@@ -51,9 +49,6 @@ class ConstAndJvmFieldPropertiesLowering(val context: CommonBackendContext) : Ir
|
|||||||
assert(expression is IrSetterCallImpl)
|
assert(expression is IrSetterCallImpl)
|
||||||
substituteSetter(irProperty, expression)
|
substituteSetter(irProperty, expression)
|
||||||
}
|
}
|
||||||
} else if (irProperty.descriptor is SyntheticJavaPropertyDescriptor) {
|
|
||||||
expression.dispatchReceiver = expression.extensionReceiver
|
|
||||||
expression.extensionReceiver = null
|
|
||||||
}
|
}
|
||||||
return super.visitCall(expression)
|
return super.visitCall(expression)
|
||||||
}
|
}
|
||||||
@@ -71,7 +66,7 @@ class ConstAndJvmFieldPropertiesLowering(val context: CommonBackendContext) : Ir
|
|||||||
expression.origin,
|
expression.origin,
|
||||||
expression.superQualifierSymbol
|
expression.superQualifierSymbol
|
||||||
)
|
)
|
||||||
return buildSubstitution(backingField.isStaticField(), setExpr, receiver)
|
return buildSubstitution(backingField.isStatic, setExpr, receiver)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun substituteGetter(irProperty: IrProperty, expression: IrCall): IrExpression {
|
private fun substituteGetter(irProperty: IrProperty, expression: IrCall): IrExpression {
|
||||||
@@ -86,7 +81,7 @@ class ConstAndJvmFieldPropertiesLowering(val context: CommonBackendContext) : Ir
|
|||||||
expression.origin,
|
expression.origin,
|
||||||
expression.superQualifierSymbol
|
expression.superQualifierSymbol
|
||||||
)
|
)
|
||||||
return buildSubstitution(backingField.isStaticField(), getExpr, receiver)
|
return buildSubstitution(backingField.isStatic, getExpr, receiver)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildSubstitution(needBlock: Boolean, setOrGetExpr: IrFieldAccessExpression, receiver: IrExpression?): IrExpression {
|
private fun buildSubstitution(needBlock: Boolean, setOrGetExpr: IrFieldAccessExpression, receiver: IrExpression?): IrExpression {
|
||||||
@@ -112,6 +107,3 @@ class ConstAndJvmFieldPropertiesLowering(val context: CommonBackendContext) : Ir
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Should probably be an utility function with a more direct implementation.
|
|
||||||
private fun IrField.isStaticField() = (descriptor.dispatchReceiverParameter == null)
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.ir.declarations
|
package org.jetbrains.kotlin.ir.declarations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
|||||||
Reference in New Issue
Block a user