Make descriptor-based API in ir:tree more granular
This commit is contained in:
+2
-2
@@ -6,12 +6,12 @@
|
||||
package org.jetbrains.kotlin.android.parcel.ir
|
||||
|
||||
import org.jetbrains.kotlin.android.parcel.serializers.RAWVALUE_ANNOTATION_FQNAME
|
||||
import org.jetbrains.kotlin.backend.jvm.codegen.psiElement
|
||||
import org.jetbrains.kotlin.backend.jvm.ir.erasedUpperBound
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.resolve.source.PsiSourceElement
|
||||
|
||||
class IrParcelSerializerFactory(symbols: AndroidSymbols) {
|
||||
/**
|
||||
@@ -209,7 +209,7 @@ class IrParcelSerializerFactory(symbols: AndroidSymbols) {
|
||||
// for writeToParcel/createFromParcel. For Java classes (or compiled Kotlin classes annotated with
|
||||
// @Parcelize), we'll have a field in the class itself. Finally, with Parcelable instances which were
|
||||
// manually implemented in Kotlin, we'll instead have an @JvmField property getter in the companion object.
|
||||
return if (classifier.modality == Modality.FINAL && classifier.descriptor.source is PsiSourceElement
|
||||
return if (classifier.modality == Modality.FINAL && classifier.psiElement != null
|
||||
&& (classifier.isParcelize || classifier.hasCreatorField)
|
||||
) {
|
||||
wrapNullableSerializerIfNeeded(irType, IrEfficientParcelableParcelSerializer(classifier))
|
||||
|
||||
+2
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.backend.jvm.ir.erasedUpperBound
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.ir.DescriptorBasedIr
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.builders.*
|
||||
@@ -39,6 +40,7 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
|
||||
@OptIn(DescriptorBasedIr::class)
|
||||
class ParcelableIrTransformer(private val context: IrPluginContext, private val androidSymbols: AndroidSymbols) :
|
||||
ParcelableExtensionBase, IrElementVisitorVoid {
|
||||
private val serializerFactory = IrParcelSerializerFactory(androidSymbols)
|
||||
|
||||
+3
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder
|
||||
import org.jetbrains.kotlin.backend.common.lower.irBlock
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor
|
||||
import org.jetbrains.kotlin.ir.DescriptorBasedIr
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.builders.*
|
||||
@@ -50,6 +51,7 @@ abstract class AndroidIrExtension : IrGenerationExtension {
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(DescriptorBasedIr::class)
|
||||
private class AndroidIrTransformer(val extension: AndroidIrExtension, val pluginContext: IrPluginContext) :
|
||||
IrElementTransformerVoidWithContext() {
|
||||
|
||||
@@ -201,6 +203,7 @@ private class AndroidIrTransformer(val extension: AndroidIrExtension, val plugin
|
||||
|
||||
private fun FqName.child(name: String) = child(Name.identifier(name))
|
||||
|
||||
@DescriptorBasedIr
|
||||
private fun IrSimpleFunction.callWithRanges(source: IrExpression) =
|
||||
IrCallImpl(source.startOffset, source.endOffset, returnType, symbol)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user