Skip to content

Commit 797263f

Browse files
authored
Merge pull request #88 from ForteScarlet/kt-to-2120
Update Kotlin to v2.1.20
2 parents 2643c2f + 171ab34 commit 797263f

File tree

7 files changed

+157
-65
lines changed

7 files changed

+157
-65
lines changed

.github/workflows/publish-release.yml

+5-4
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ env:
1717
IS_CI: true
1818
SIMBOT_LOCAL: false
1919
GRADLE_OPTS: "-Dfile.encoding=UTF-8"
20+
GRADLE_VERSION: 8.10.2
2021

2122
jobs:
2223
test:
@@ -34,7 +35,7 @@ jobs:
3435
- name: Setup Gradle
3536
uses: gradle/actions/setup-gradle@v3
3637
with:
37-
gradle-version: 8.5
38+
gradle-version: ${{ env.GRADLE_VERSION }}
3839
- run: gradle assemble build -s
3940

4041
publish:
@@ -53,7 +54,7 @@ jobs:
5354
- name: Test and publish to sonatype
5455
uses: gradle/actions/setup-gradle@v3
5556
with:
56-
gradle-version: 8.5
57+
gradle-version: ${{ env.GRADLE_VERSION }}
5758
arguments:
5859
publishToSonatype
5960
closeAndReleaseStagingRepositories
@@ -86,7 +87,7 @@ jobs:
8687
- name: Publish to gradle
8788
uses: gradle/actions/setup-gradle@v3
8889
with:
89-
gradle-version: 8.5
90+
gradle-version: ${{ env.GRADLE_VERSION }}
9091
arguments: |
9192
build
9293
publishPlugins
@@ -117,7 +118,7 @@ jobs:
117118
- name: Create changelog
118119
uses: gradle/actions/setup-gradle@v3
119120
with:
120-
gradle-version: 8.5
121+
gradle-version: ${{ env.GRADLE_VERSION }}
121122
arguments: createChangelog
122123

123124
# https://github.com/softprops/action-gh-release

.github/workflows/test-branch.yml

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
name: Test Branch
2+
on:
3+
pull_request:
4+
branches:
5+
- 'dev'
6+
paths:
7+
- '**.java'
8+
- '**.kt'
9+
- '**.kts'
10+
- '*/src/*/kotlin/**'
11+
- '*/src/*/java/**'
12+
- '*/src/*/resource/**'
13+
- 'gradle/**'
14+
15+
concurrency:
16+
group: ${{ github.workflow }}-${{ github.ref }}
17+
cancel-in-progress: true
18+
19+
env:
20+
IS_CI: true
21+
GRADLE_OPTS: "-Dfile.encoding=UTF-8"
22+
GRADLE_VERSION: 8.10.2
23+
24+
jobs:
25+
build-test:
26+
name: Build and test
27+
strategy:
28+
matrix:
29+
os: [ macos-latest, windows-latest, ubuntu-latest ]
30+
runs-on: ${{ matrix.os }}
31+
steps:
32+
- uses: actions/checkout@v4
33+
- uses: actions/setup-java@v4
34+
with:
35+
distribution: 'zulu'
36+
java-version: 11
37+
cache: 'gradle'
38+
39+
- name: Run All Tests
40+
uses: gradle/actions/setup-gradle@v3
41+
with:
42+
gradle-version: ${{ env.GRADLE_VERSION }}
43+
arguments: |
44+
assemble
45+
build
46+
test
47+
--info
48+
--warning-mode all
49+
# --build-cache
50+
# -Porg.gradle.daemon=false
51+
# -Porg.gradle.jvmargs="-Xmx4g -Xms2g -XX:MaxMetaspaceSize=1g -Dfile.encoding=UTF-8"
52+
53+
- name: Upload test reports
54+
uses: actions/upload-artifact@v4
55+
if: ${{ always() }}
56+
with:
57+
name: test-reports-${{ matrix.os }}
58+
path: '**/build/reports/tests'
59+
retention-days: 7

buildSrc/src/main/kotlin/IProject.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ object IProject : ProjectDetail() {
1010
const val HOMEPAGE = "https://github.com/ForteScarlet/kotlin-suspend-transform-compiler-plugin"
1111

1212
// Remember the libs.versions.toml!
13-
val ktVersion = "2.1.0"
13+
val ktVersion = "2.1.20"
1414
val pluginVersion = "0.11.1"
1515

1616
override val version: String = "$ktVersion-$pluginVersion"

compiler/suspend-transform-plugin/src/main/kotlin/love/forte/plugin/suspendtrans/fir/SuspendTransformFirTransformer.kt

+57-30
Original file line numberDiff line numberDiff line change
@@ -195,11 +195,13 @@ class SuspendTransformFirTransformer(
195195
}
196196

197197
private fun List<FirValueParameter>.mapToNewValueParameters(
198-
originalTypeParameterCache: MutableList<CopiedTypeParameterPair>
198+
originalTypeParameterCache: MutableList<CopiedTypeParameterPair>,
199+
newContainingDeclarationSymbol: FirBasedSymbol<*>
199200
): List<FirValueParameter> {
200201
return map { vp ->
201202
buildValueParameterCopy(vp) {
202203
symbol = FirValueParameterSymbol(vp.symbol.name)
204+
containingDeclarationSymbol = newContainingDeclarationSymbol
203205

204206
val copiedConeType = vp.returnTypeRef.coneTypeOrNull
205207
?.copyWithTypeParameters(originalTypeParameterCache)
@@ -211,11 +213,16 @@ class SuspendTransformFirTransformer(
211213
}
212214
}
213215

214-
private fun FirReceiverParameter.copyToNew(originalTypeParameterCache: MutableList<CopiedTypeParameterPair>): FirReceiverParameter? {
216+
private fun FirReceiverParameter.copyToNew(
217+
originalTypeParameterCache: MutableList<CopiedTypeParameterPair>,
218+
newContainingDeclarationSymbol: FirBasedSymbol<*>
219+
): FirReceiverParameter? {
215220
return typeRef.coneTypeOrNull
216221
?.copyWithTypeParameters(originalTypeParameterCache)
217222
?.let { foundCopied ->
218223
buildReceiverParameterCopy(this) {
224+
symbol = FirReceiverParameterSymbol()
225+
containingDeclarationSymbol = newContainingDeclarationSymbol
219226
typeRef = typeRef.withReplacedConeType(foundCopied)
220227
}
221228
}
@@ -231,17 +238,28 @@ class SuspendTransformFirTransformer(
231238
}
232239

233240
private fun FirSimpleFunctionBuilder.copyParameters() {
241+
val newFunSymbol = symbol
234242
val originalTypeParameterCache = mutableListOf<CopiedTypeParameterPair>()
235243

236-
val newTypeParameters = typeParameters.mapToNewTypeParameters(symbol, originalTypeParameterCache)
244+
val newTypeParameters = typeParameters.mapToNewTypeParameters(newFunSymbol, originalTypeParameterCache)
237245
typeParameters.clear()
238246
typeParameters.addAll(newTypeParameters)
239247

240-
val newValueParameters = valueParameters.mapToNewValueParameters(originalTypeParameterCache)
248+
val newContextParameters = contextParameters.mapToNewValueParameters(
249+
originalTypeParameterCache,
250+
newFunSymbol,
251+
)
252+
contextParameters.clear()
253+
contextParameters.addAll(newContextParameters)
254+
255+
val newValueParameters = valueParameters.mapToNewValueParameters(
256+
originalTypeParameterCache,
257+
newFunSymbol
258+
)
241259
valueParameters.clear()
242260
valueParameters.addAll(newValueParameters)
243261

244-
receiverParameter?.copyToNew(originalTypeParameterCache)?.also {
262+
receiverParameter?.copyToNew(originalTypeParameterCache, newFunSymbol)?.also {
245263
this.receiverParameter = it
246264
}
247265

@@ -254,13 +272,18 @@ class SuspendTransformFirTransformer(
254272

255273
private fun FirPropertyAccessorBuilder.copyParameters(
256274
originalTypeParameterCache: MutableList<CopiedTypeParameterPair> = mutableListOf(),
257-
copyReturnType: Boolean = true
275+
copyReturnType: Boolean = true,
276+
newFunSymbol: FirBasedSymbol<*>,
258277
) {
259-
val newTypeParameters = typeParameters.mapToNewTypeParameters(symbol, originalTypeParameterCache)
260-
typeParameters.clear()
261-
typeParameters.addAll(newTypeParameters)
262-
263-
val newValueParameters = valueParameters.mapToNewValueParameters(originalTypeParameterCache)
278+
// 的确,property 哪儿来的 type parameter
279+
// val newTypeParameters = typeParameters.mapToNewTypeParameters(symbol, originalTypeParameterCache)
280+
// typeParameters.clear()
281+
// typeParameters.addAll(newTypeParameters)
282+
283+
val newValueParameters = valueParameters.mapToNewValueParameters(
284+
originalTypeParameterCache,
285+
newFunSymbol
286+
)
264287
valueParameters.clear()
265288
valueParameters.addAll(newValueParameters)
266289

@@ -303,10 +326,12 @@ class SuspendTransformFirTransformer(
303326
originFunc: FirSimpleFunction,
304327
originFunSymbol: FirNamedFunctionSymbol,
305328
owner: FirClassSymbol<*>,
306-
thisContextReceivers: MutableList<FirContextReceiver>,
329+
// thisContextReceivers: MutableList<FirContextReceiver>,
330+
thisContextParameters: List<FirValueParameter>,
307331
thisReceiverParameter: FirReceiverParameter?,
308332
newFunSymbol: FirBasedSymbol<*>,
309-
thisValueParameters: MutableList<FirValueParameter>,
333+
// newFunSymbol: FirNamedFunctionSymbol,
334+
thisValueParameters: List<FirValueParameter>,
310335
bridgeFunSymbol: FirNamedFunctionSymbol,
311336
newFunTarget: FirFunctionTarget,
312337
transformer: Transformer
@@ -347,13 +372,13 @@ class SuspendTransformFirTransformer(
347372
}
348373
}
349374

350-
this.contextReceiverArguments.addAll(thisContextReceivers.map { receiver ->
375+
this.contextArguments.addAll(thisContextParameters.map { receiver ->
351376
buildThisReceiverExpression {
352-
coneTypeOrNull = receiver.typeRef.coneTypeOrNull
377+
coneTypeOrNull = receiver.returnTypeRef.coneTypeOrNull
353378
source = receiver.source
354379
calleeReference = buildExplicitThisReference {
355380
source = receiver.source
356-
labelName = receiver.labelName?.asString()
381+
// labelName = receiver.labelName?.asString()
357382
}
358383
}
359384
})
@@ -364,7 +389,8 @@ class SuspendTransformFirTransformer(
364389
coneTypeOrNull = thisReceiverParameter.typeRef.coneTypeOrNull
365390
source = thisReceiverParameter.source
366391
calleeReference = buildImplicitThisReference {
367-
boundSymbol = newFunSymbol
392+
boundSymbol = thisReceiverParameter.symbol
393+
println("[${newFunSymbol}] thisReceiverParameter.symbol: ${thisReceiverParameter.symbol}")
368394
}
369395
}
370396
}
@@ -596,7 +622,7 @@ class SuspendTransformFirTransformer(
596622
returnTypeRef = resolveReturnType(funData.transformer, returnTypeRef)
597623

598624
val thisReceiverParameter = this.receiverParameter
599-
val thisContextReceivers = this.contextReceivers
625+
val thisContextParameters = this.contextParameters
600626
val thisValueParameters = this.valueParameters
601627

602628
annotations.clear()
@@ -606,7 +632,7 @@ class SuspendTransformFirTransformer(
606632
originFunc,
607633
originFunSymbol,
608634
owner,
609-
thisContextReceivers,
635+
thisContextParameters,
610636
thisReceiverParameter,
611637
newFunSymbol,
612638
thisValueParameters,
@@ -713,7 +739,8 @@ class SuspendTransformFirTransformer(
713739
deprecationsProvider = UnresolvedDeprecationProvider //original.deprecationsProvider
714740
containerSource = original.containerSource
715741
dispatchReceiverType = original.dispatchReceiverType
716-
contextReceivers.addAll(original.contextReceivers)
742+
contextParameters.addAll(original.contextParameters)
743+
// contextReceivers.addAll(original.contextReceivers)
717744
// annotations
718745
annotations.addAll(propertyAnnotations)
719746
typeParameters.addAll(original.typeParameters)
@@ -745,19 +772,19 @@ class SuspendTransformFirTransformer(
745772
)
746773

747774
valueParameters.addAll(original.valueParameters)
748-
typeParameters.addAll(original.typeParameters)
749-
contextReceivers.addAll(original.contextReceivers)
775+
// typeParameters.addAll(original.typeParameters)
776+
// contextReceivers.addAll(original.contextReceivers)
750777

751-
copyParameters(originalTypeParameterCache, false)
778+
copyParameters(originalTypeParameterCache, false, propertyAccessorSymbol)
752779

753-
val thisContextReceivers = this.contextReceivers
780+
// val thisContextReceivers = this.contextReceivers
754781
val thisValueParameters = this.valueParameters
755782

756783
body = generateSyntheticFunctionBody(
757784
original,
758785
originalFunSymbol,
759786
owner,
760-
thisContextReceivers,
787+
emptyList(),
761788
null,
762789
propertyAccessorSymbol,
763790
thisValueParameters,
@@ -991,7 +1018,6 @@ class SuspendTransformFirTransformer(
9911018
transformer: Transformer,
9921019
returnTypeRef: FirTypeRef
9931020
): ConeKotlinType {
994-
val transformer = transformer
9951021
val returnType = transformer.transformReturnType
9961022
?: return returnTypeRef.coneType // OrNull // original.symbol.resolvedReturnType
9971023

@@ -1370,12 +1396,13 @@ class SuspendTransformFirTransformer(
13701396
typeArguments = typeArguments,
13711397
nullable = isMarkedNullable
13721398
)
1373-
// typeArguments.forEach { projection ->
1374-
// projection.type?.copyWithTypeParameters(parameters)
1375-
// }
13761399
}
13771400

1378-
return null
1401+
if (isPrimitiveType()) {
1402+
return this
1403+
}
1404+
1405+
return classId?.createConeType(session = session, nullable = isMarkedNullable)
13791406
}
13801407

13811408
is ConeTypeParameterType -> {

compiler/suspend-transform-plugin/src/main/kotlin/love/forte/plugin/suspendtrans/ir/SuspendTransformTransformer.kt

+16-9
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,10 @@ import org.jetbrains.kotlin.ir.expressions.*
2222
import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionExpressionImpl
2323
import org.jetbrains.kotlin.ir.expressions.impl.IrTypeOperatorCallImpl
2424
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
25-
import org.jetbrains.kotlin.ir.types.*
26-
import org.jetbrains.kotlin.ir.util.file
27-
import org.jetbrains.kotlin.ir.util.isAnnotationWithEqualFqName
28-
import org.jetbrains.kotlin.ir.util.kotlinFqName
29-
import org.jetbrains.kotlin.ir.util.primaryConstructor
25+
import org.jetbrains.kotlin.ir.types.IrType
26+
import org.jetbrains.kotlin.ir.types.defaultType
27+
import org.jetbrains.kotlin.ir.types.typeWith
28+
import org.jetbrains.kotlin.ir.util.*
3029
import org.jetbrains.kotlin.name.ClassId
3130
import org.jetbrains.kotlin.name.FqName
3231
import org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation
@@ -43,7 +42,8 @@ class SuspendTransformTransformer(
4342
// TODO What should be used in K2?
4443
private val reporter = kotlin.runCatching {
4544
// error: "This API is not supported for K2"
46-
pluginContext.createDiagnosticReporter(PLUGIN_REPORT_ID)
45+
pluginContext.messageCollector
46+
// pluginContext.createDiagnosticReporter(PLUGIN_REPORT_ID)
4747
}.getOrNull()
4848

4949

@@ -344,14 +344,14 @@ private fun IrFunction.reportLocation(): CompilerMessageSourceLocation? {
344344
return when (val sourceLocation =
345345
// getSourceLocation(runCatching { fileEntry }.getOrNull())) {
346346
getSourceLocation(declaration = symbol, file = file)) {
347-
is SourceLocation.Location -> {
347+
348+
is SourceLocation.WithFileAndLineNumberInformation ->
348349
CompilerMessageLocation.create(
349350
path = sourceLocation.file,
350351
line = sourceLocation.line,
351352
column = sourceLocation.column,
352353
lineContent = null
353354
)
354-
}
355355

356356
else -> null
357357
}
@@ -460,7 +460,14 @@ private fun generateTransformBodyForFunctionLambda(
460460
for (index in 1..ownerValueParameters.lastIndex) {
461461
val valueParameter = ownerValueParameters[index]
462462
val type = valueParameter.type
463-
tryResolveCoroutineScopeValueParameter(type, context, function, transformFunctionOwner, this@irBlockBody, index)
463+
tryResolveCoroutineScopeValueParameter(
464+
type,
465+
context,
466+
function,
467+
transformFunctionOwner,
468+
this@irBlockBody,
469+
index
470+
)
464471
}
465472
}
466473

0 commit comments

Comments
 (0)