FIR: change source of existing type refs in DataClassMembersGenerator to avoid sources clash

This commit is contained in:
Ilya Kirillov
2020-06-22 16:53:20 +03:00
parent 650f2dd713
commit 5acdad29ec
17 changed files with 270 additions and 31 deletions
@@ -43,3 +43,15 @@ inline fun buildComposedSuperTypeRef(init: FirComposedSuperTypeRefBuilder.() ->
}
return FirComposedSuperTypeRefBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
inline fun buildComposedSuperTypeRefCopy(original: FirComposedSuperTypeRef, init: FirComposedSuperTypeRefBuilder.() -> Unit = {}): FirComposedSuperTypeRef {
contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
}
val copyBuilder = FirComposedSuperTypeRefBuilder()
copyBuilder.source = original.source
copyBuilder.annotations.addAll(original.annotations)
copyBuilder.superTypeRefs.addAll(original.superTypeRefs)
return copyBuilder.apply(init).build()
}
@@ -41,3 +41,14 @@ inline fun buildDelegatedTypeRef(init: FirDelegatedTypeRefBuilder.() -> Unit): F
}
return FirDelegatedTypeRefBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
inline fun buildDelegatedTypeRefCopy(original: FirDelegatedTypeRef, init: FirDelegatedTypeRefBuilder.() -> Unit): FirDelegatedTypeRef {
contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
}
val copyBuilder = FirDelegatedTypeRefBuilder()
copyBuilder.delegate = original.delegate
copyBuilder.typeRef = original.typeRef
return copyBuilder.apply(init).build()
}
@@ -47,3 +47,14 @@ inline fun buildErrorTypeRef(init: FirErrorTypeRefBuilder.() -> Unit): FirErrorT
}
return FirErrorTypeRefBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
inline fun buildErrorTypeRefCopy(original: FirErrorTypeRef, init: FirErrorTypeRefBuilder.() -> Unit): FirErrorTypeRef {
contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
}
val copyBuilder = FirErrorTypeRefBuilder()
copyBuilder.source = original.source
copyBuilder.diagnostic = original.diagnostic
return copyBuilder.apply(init).build()
}
@@ -53,3 +53,19 @@ inline fun buildFunctionTypeRef(init: FirFunctionTypeRefBuilder.() -> Unit): Fir
}
return FirFunctionTypeRefBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
inline fun buildFunctionTypeRefCopy(original: FirFunctionTypeRef, init: FirFunctionTypeRefBuilder.() -> Unit): FirFunctionTypeRef {
contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
}
val copyBuilder = FirFunctionTypeRefBuilder()
copyBuilder.source = original.source
copyBuilder.annotations.addAll(original.annotations)
copyBuilder.isMarkedNullable = original.isMarkedNullable
copyBuilder.receiverTypeRef = original.receiverTypeRef
copyBuilder.valueParameters.addAll(original.valueParameters)
copyBuilder.returnTypeRef = original.returnTypeRef
copyBuilder.isSuspend = original.isSuspend
return copyBuilder.apply(init).build()
}
@@ -37,3 +37,13 @@ inline fun buildImplicitTypeRef(init: FirImplicitTypeRefBuilder.() -> Unit = {})
}
return FirImplicitTypeRefBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
inline fun buildImplicitTypeRefCopy(original: FirImplicitTypeRef, init: FirImplicitTypeRefBuilder.() -> Unit = {}): FirImplicitTypeRef {
contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
}
val copyBuilder = FirImplicitTypeRefBuilder()
copyBuilder.source = original.source
return copyBuilder.apply(init).build()
}
@@ -55,3 +55,20 @@ inline fun buildResolvedFunctionTypeRef(init: FirResolvedFunctionTypeRefBuilder.
}
return FirResolvedFunctionTypeRefBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
inline fun buildResolvedFunctionTypeRefCopy(original: FirResolvedFunctionTypeRef, init: FirResolvedFunctionTypeRefBuilder.() -> Unit): FirResolvedFunctionTypeRef {
contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
}
val copyBuilder = FirResolvedFunctionTypeRefBuilder()
copyBuilder.source = original.source
copyBuilder.annotations.addAll(original.annotations)
copyBuilder.type = original.type
copyBuilder.isSuspend = original.isSuspend
copyBuilder.isMarkedNullable = original.isMarkedNullable
copyBuilder.receiverTypeRef = original.receiverTypeRef
copyBuilder.valueParameters.addAll(original.valueParameters)
copyBuilder.returnTypeRef = original.returnTypeRef
return copyBuilder.apply(init).build()
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.types.builder
import kotlin.contracts.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
@@ -29,6 +30,7 @@ class FirResolvedTypeRefBuilder : FirAnnotationContainerBuilder {
var delegatedTypeRef: FirTypeRef? = null
var isSuspend: Boolean = false
@OptIn(FirImplementationDetail::class)
override fun build(): FirResolvedTypeRef {
return FirResolvedTypeRefImpl(
source,
@@ -48,3 +50,17 @@ inline fun buildResolvedTypeRef(init: FirResolvedTypeRefBuilder.() -> Unit): Fir
}
return FirResolvedTypeRefBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
inline fun buildResolvedTypeRefCopy(original: FirResolvedTypeRef, init: FirResolvedTypeRefBuilder.() -> Unit): FirResolvedTypeRef {
contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
}
val copyBuilder = FirResolvedTypeRefBuilder()
copyBuilder.source = original.source
copyBuilder.annotations.addAll(original.annotations)
copyBuilder.type = original.type
copyBuilder.delegatedTypeRef = original.delegatedTypeRef
copyBuilder.isSuspend = original.isSuspend
return copyBuilder.apply(init).build()
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir.types.impl
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -17,7 +18,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
internal class FirResolvedTypeRefImpl(
class FirResolvedTypeRefImpl @FirImplementationDetail constructor(
override val source: FirSourceElement?,
override val annotations: MutableList<FirAnnotationCall>,
override val type: ConeKotlinType,