Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Kotlin 2.1.20 support #59

Merged
merged 1 commit into from
Feb 18, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

### Updated

- `Kotlin -> 2.1.20-Beta2`
- `com.javiersc.hubdle:hubdle-version-catalog -> 0.4.4`
- `com.javiersc.hubdle:com.javiersc.hubdle.gradle.plugin -> 0.8.3`

Expand Down
1 change: 0 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ pom.scm.developerConnection=scm:git:git@github.com:JavierSegoviaCordoba/kopy.git
### Gradle ###
####################################################################################################
kotlin.code.style=official
kotlin.js.compiler=ir
org.gradle.caching=true
#org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2048m
Expand Down
4 changes: 2 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
[versions]
hubdle = "0.8.3"
hubdleCatalog = "0.4.4"
javiersc-kotlin-compiler-extensions = "0.5.2+2.1.10"
jetbrains-kotlin = "2.1.10"
javiersc-kotlin-compiler-extensions = "0.6.0+2.1.20-Beta2"
jetbrains-kotlin = "2.1.20-Beta2"

[libraries]
hubdle-catalog = { module = "com.javiersc.hubdle:hubdle-version-catalog", version.ref = "hubdleCatalog" }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirCallChecker
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirReceiverParameter
import org.jetbrains.kotlin.fir.declarations.hasAnnotation
import org.jetbrains.kotlin.fir.declarations.utils.isData
import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression
Expand All @@ -31,8 +32,8 @@ import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
import org.jetbrains.kotlin.fir.references.toResolvedFunctionSymbol
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.toRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirThisOwnerSymbol
import org.jetbrains.kotlin.fir.types.resolvedType

internal object BreakingCallsChecker : FirCallChecker(MppCheckerKind.Common) {
Expand Down Expand Up @@ -95,7 +96,7 @@ internal object BreakingCallsChecker : FirCallChecker(MppCheckerKind.Common) {
val extensionReceiver: FirPropertyAccessExpression =
setOrUpdateCall.extensionReceiver?.asFirOrNull<FirPropertyAccessExpression>()
?: return Failure.BrokenChain(setOrUpdateCall)
val updateOrSetThisBoundSymbol: FirBasedSymbol<*> =
val updateOrSetThisBoundSymbol: FirThisOwnerSymbol<*> =
setOrUpdateCall.dispatchReceiver
?.asFirOrNull<FirThisReceiverExpression>()
?.calleeReference
Expand All @@ -120,7 +121,11 @@ internal object BreakingCallsChecker : FirCallChecker(MppCheckerKind.Common) {
?.asFirOrNull<FirThisReceiverExpression>()
?.calleeReference
?.boundSymbol
?.fir ?: return Failure.NoCopyScope(setOrUpdateCall)
?.fir
?.asFirOrNull<FirReceiverParameter>()
?.containingDeclarationSymbol
?.fir
?: return Failure.NoCopyScope(setOrUpdateCall)
val isCopyScope: Boolean =
context.callsOrAssignments
.asSequence()
Expand All @@ -147,9 +152,9 @@ internal object BreakingCallsChecker : FirCallChecker(MppCheckerKind.Common) {

private fun FirExpression.isBreakingChainCall(
session: FirSession,
updateOrSetThisBoundSymbol: FirBasedSymbol<*>
updateOrSetThisBoundSymbol: FirThisOwnerSymbol<*>,
): CheckerResult {
val thisBoundSymbol: FirBasedSymbol<*>? =
val thisBoundSymbol: FirThisOwnerSymbol<*>? =
this.asFirOrNull<FirThisReceiverExpression>()?.calleeReference?.boundSymbol
if (updateOrSetThisBoundSymbol == thisBoundSymbol) return Success

Expand All @@ -159,7 +164,7 @@ internal object BreakingCallsChecker : FirCallChecker(MppCheckerKind.Common) {

val receiver: FirExpression? = this.dispatchReceiver

val dispatcherBoundSymbol: FirBasedSymbol<*>? =
val dispatcherBoundSymbol: FirThisOwnerSymbol<*>? =
receiver?.asFirOrNull<FirThisReceiverExpression>()?.calleeReference?.boundSymbol

val hasSameBoundSymbol: Boolean = dispatcherBoundSymbol == updateOrSetThisBoundSymbol
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.expressions.buildUnaryArgumentList
import org.jetbrains.kotlin.fir.expressions.builder.buildFunctionCall
import org.jetbrains.kotlin.fir.expressions.builder.buildPropertyAccessExpression
import org.jetbrains.kotlin.fir.expressions.calleeReference
import org.jetbrains.kotlin.fir.expressions.contextReceiverArguments
import org.jetbrains.kotlin.fir.expressions.contextArguments
import org.jetbrains.kotlin.fir.expressions.dispatchReceiver
import org.jetbrains.kotlin.fir.expressions.explicitReceiver
import org.jetbrains.kotlin.fir.expressions.extensionReceiver
Expand Down Expand Up @@ -71,7 +71,7 @@ internal class FirKopyAssignExpressionAltererExtension(
explicitReceiver = variableAssignment.explicitReceiver
dispatchReceiver = variableAssignment.dispatchReceiver
extensionReceiver = variableAssignment.extensionReceiver
contextReceiverArguments += variableAssignment.contextReceiverArguments
contextArguments += variableAssignment.contextArguments
}
argumentList = buildUnaryArgumentList(rightArgument)
calleeReference = buildSimpleNamedReference {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ import org.jetbrains.kotlin.ir.types.classOrFail
import org.jetbrains.kotlin.ir.types.typeWith
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
import org.jetbrains.kotlin.ir.util.functions
import org.jetbrains.kotlin.ir.util.getArguments
import org.jetbrains.kotlin.ir.util.getArgumentsWithIr
import org.jetbrains.kotlin.ir.util.getPropertyGetter
import org.jetbrains.kotlin.ir.util.getSimpleFunction
import org.jetbrains.kotlin.ir.util.indexOrMinusOne
Expand Down Expand Up @@ -90,9 +90,8 @@ internal class IrSetOrUpdateCallTransformer(
return originalCallCallWithAlsoCall
}

private inner class SetValueTransformer(
private val expressionCall: IrCall,
) : IrElementTransformerVoid() {
private inner class SetValueTransformer(private val expressionCall: IrCall) :
IrElementTransformerVoid() {
override fun visitExpression(expression: IrExpression): IrExpression {
fun original(): IrExpression = super.visitExpression(expression)
if (expression !in expressionCall.valueArguments) return original()
Expand All @@ -106,9 +105,8 @@ internal class IrSetOrUpdateCallTransformer(
}
}

private inner class UpdateReturnTransformer(
private val expressionCall: IrCall,
) : IrElementTransformerVoid() {
private inner class UpdateReturnTransformer(private val expressionCall: IrCall) :
IrElementTransformerVoid() {
override fun visitReturn(expression: IrReturn): IrExpression {
fun original(): IrExpression = super.visitReturn(expression)
val parent: IrDeclarationParent =
Expand All @@ -132,7 +130,7 @@ internal class IrSetOrUpdateCallTransformer(

private fun IrPluginContext.createAlsoCall(
expression: IrCall,
expressionParent: IrDeclarationParent
expressionParent: IrDeclarationParent,
): IrCall? {
val setOrUpdateType: IrType = expression.extensionReceiver?.type ?: return null

Expand Down Expand Up @@ -171,7 +169,7 @@ internal class IrSetOrUpdateCallTransformer(
private fun createAlsoBlockFunction(
expressionParent: IrDeclarationParent,
setOrUpdateType: IrType,
expression: IrCall
expression: IrCall,
): IrSimpleFunction? {
val alsoBlockFunction: IrSimpleFunction =
pluginContext.irFactory
Expand All @@ -197,7 +195,7 @@ internal class IrSetOrUpdateCallTransformer(
?: return null
val atomicGetterLazySetFunctionCall: IrCall? =
expression.createAtomicGetterLazySetFunctionCall(
copyChainCall = copyChainCall,
copyChainCall = copyChainCall
)
if (atomicGetterLazySetFunctionCall != null) {
+atomicGetterLazySetFunctionCall
Expand Down Expand Up @@ -230,7 +228,7 @@ internal class IrSetOrUpdateCallTransformer(
val isLast: Boolean = next == dispatchers.last()
val argumentValue: IrDeclarationReference =
if (isLast) alsoItValueParameterGetValue
else next.apply { this.dispatchReceiver = current }
else next.apply { insertDispatchReceiver(current) }

val copyCall: IrCall? =
current.symbol.createCopyCall(
Expand All @@ -246,8 +244,8 @@ internal class IrSetOrUpdateCallTransformer(
val copyChainCall: IrCall =
calls.reduce { acc, irCall ->
val argumentIndex: Int =
irCall.getArguments().firstNotNullOfOrNull {
val index = it.first.indexOrMinusOne
irCall.getArgumentsWithIr().firstNotNullOfOrNull { (valueParameter, _) ->
val index: Int = valueParameter.descriptor.indexOrMinusOne
if (index != -1) index else null
} ?: return null
irCall.putValueArgument(argumentIndex, acc)
Expand All @@ -271,10 +269,10 @@ internal class IrSetOrUpdateCallTransformer(
buildList {
val extensionReceiver: IrMemberAccessExpression<*> =
runCatching {
extensionReceiver
?.asIrOrNull<IrMemberAccessExpression<*>>()
?.deepCopyWithSymbols()
}
extensionReceiver
?.asIrOrNull<IrMemberAccessExpression<*>>()
?.deepCopyWithSymbols()
}
.getOrNull() ?: return@buildList

add(extensionReceiver)
Expand Down Expand Up @@ -303,8 +301,7 @@ internal class IrSetOrUpdateCallTransformer(
val kotlinCopyFunctionSymbol: IrSimpleFunctionSymbol =
dataClass.owner.functions
.firstOrNull {
it.name == copyName &&
!it.hasAnnotation(kopyFunctionCopyFqName)
it.name == copyName && !it.hasAnnotation(kopyFunctionCopyFqName)
}
?.symbol ?: return null
irCall(kotlinCopyFunctionSymbol).apply {
Expand Down
Loading
Loading