Skip to content

Commit 06bb279

Browse files
committed
Migrate to KotlinX Serialization
1 parent 89eab28 commit 06bb279

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+471
-314
lines changed

.idea/deviceManager.xml

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
kotlin version: 2.1.21
2+
error message: java.lang.IllegalStateException: Unexpected member: class org.jetbrains.kotlin.fir.declarations.impl.FirDanglingModifierListImpl
3+
at org.jetbrains.kotlin.fir.backend.Fir2IrConverter.processMemberDeclaration(Fir2IrConverter.kt:556)
4+
at org.jetbrains.kotlin.fir.backend.Fir2IrConverter.processFileAndClassMembers(Fir2IrConverter.kt:195)
5+
at org.jetbrains.kotlin.fir.backend.Fir2IrConverter.runSourcesConversion(Fir2IrConverter.kt:97)
6+
at org.jetbrains.kotlin.fir.backend.Fir2IrConverter.access$runSourcesConversion(Fir2IrConverter.kt:71)
7+
at org.jetbrains.kotlin.fir.backend.Fir2IrConverter$Companion.generateIrModuleFragment(Fir2IrConverter.kt:702)
8+
at org.jetbrains.kotlin.fir.pipeline.Fir2IrPipeline.runFir2IrConversion(convertToIr.kt:162)
9+
at org.jetbrains.kotlin.fir.pipeline.Fir2IrPipeline.convertToIrAndActualize(convertToIr.kt:129)
10+
at org.jetbrains.kotlin.fir.pipeline.ConvertToIrKt.convertToIrAndActualize(convertToIr.kt:100)
11+
at org.jetbrains.kotlin.fir.pipeline.ConvertToIrKt.convertToIrAndActualize$default(convertToIr.kt:75)
12+
at org.jetbrains.kotlin.cli.jvm.compiler.legacy.pipeline.JvmCompilerPipelineKt.convertToIrAndActualizeForJvm(jvmCompilerPipeline.kt:108)
13+
at org.jetbrains.kotlin.cli.jvm.compiler.legacy.pipeline.JvmCompilerPipelineKt.convertAnalyzedFirToIr(jvmCompilerPipeline.kt:81)
14+
at org.jetbrains.kotlin.kapt4.FirKaptAnalysisHandlerExtension.contextForStubGeneration(FirKaptAnalysisHandlerExtension.kt:230)
15+
at org.jetbrains.kotlin.kapt4.FirKaptAnalysisHandlerExtension.doAnalysis(FirKaptAnalysisHandlerExtension.kt:126)
16+
at org.jetbrains.kotlin.fir.extensions.FirAnalysisHandlerExtension$Companion.analyze(FirAnalysisHandlerExtension.kt:29)
17+
at org.jetbrains.kotlin.cli.pipeline.jvm.JvmFrontendPipelinePhase.executePhase(JvmFrontendPipelinePhase.kt:76)
18+
at org.jetbrains.kotlin.cli.pipeline.jvm.JvmFrontendPipelinePhase.executePhase(JvmFrontendPipelinePhase.kt:56)
19+
at org.jetbrains.kotlin.cli.pipeline.PipelinePhase.phaseBody(PipelinePhase.kt:68)
20+
at org.jetbrains.kotlin.cli.pipeline.PipelinePhase.phaseBody(PipelinePhase.kt:58)
21+
at org.jetbrains.kotlin.config.phaser.SimpleNamedCompilerPhase.phaseBody(CompilerPhase.kt:215)
22+
at org.jetbrains.kotlin.config.phaser.NamedCompilerPhase.invoke(CompilerPhase.kt:111)
23+
at org.jetbrains.kotlin.backend.common.phaser.CompositePhase.invoke(PhaseBuilders.kt:28)
24+
at org.jetbrains.kotlin.config.phaser.CompilerPhaseKt.invokeToplevel(CompilerPhase.kt:62)
25+
at org.jetbrains.kotlin.cli.pipeline.AbstractCliPipeline.runPhasedPipeline(AbstractCliPipeline.kt:106)
26+
at org.jetbrains.kotlin.cli.pipeline.AbstractCliPipeline.execute(AbstractCliPipeline.kt:65)
27+
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecutePhased(K2JVMCompiler.kt:61)
28+
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecutePhased(K2JVMCompiler.kt:36)
29+
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:80)
30+
at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.kt:337)
31+
at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:466)
32+
at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:75)
33+
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.doCompile(IncrementalCompilerRunner.kt:514)
34+
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:431)
35+
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.tryCompileIncrementally$lambda$10$compile(IncrementalCompilerRunner.kt:258)
36+
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.tryCompileIncrementally(IncrementalCompilerRunner.kt:276)
37+
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:128)
38+
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:678)
39+
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:92)
40+
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1805)
41+
at jdk.internal.reflect.GeneratedMethodAccessor22.invoke(Unknown Source)
42+
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
43+
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
44+
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
45+
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
46+
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
47+
at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
48+
at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
49+
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
50+
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
51+
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
52+
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
53+
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
54+
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
55+
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
56+
at java.base/java.lang.Thread.run(Thread.java:840)
57+
58+

app/build.gradle

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,9 @@ plugins {
55
id 'org.jetbrains.kotlin.plugin.compose'
66
id 'org.jetbrains.kotlin.plugin.serialization'
77
id 'com.google.devtools.ksp' version "$ksp_version"
8-
id 'dev.zacsweers.moshix' version "$moshix_version"
98
id 'dagger.hilt.android.plugin'
109
}
1110

12-
moshi {
13-
enableSealed.set(true)
14-
}
15-
1611
kapt {
1712
correctErrorTypes = true
1813
}
@@ -70,6 +65,7 @@ dependencies {
7065

7166
// Kotlin
7267
implementation "org.jetbrains.kotlinx:kotlinx-datetime:0.6.2"
68+
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1"
7369

7470
// AndroidX
7571
implementation "androidx.core:core-ktx:1.16.0"
@@ -107,7 +103,7 @@ dependencies {
107103

108104
// Network
109105
implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
110-
implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version"
106+
implementation "com.squareup.retrofit2:converter-kotlinx-serialization:$retrofit_version"
111107
implementation "io.coil-kt:coil:$coil_version"
112108
implementation "io.coil-kt:coil-compose:$coil_version"
113109

8.5 KB
Loading

app/src/main/java/bruhcollective/itaysonlab/jetibox/core/config/MsCapDatabase.kt

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@ import bruhcollective.itaysonlab.jetibox.core.models.displaycatalog.ProductFamil
55
import bruhcollective.itaysonlab.jetibox.core.models.displaycatalog.RatingBoard
66
import bruhcollective.itaysonlab.jetibox.core.models.displaycatalog.RatingBoardsData
77
import bruhcollective.itaysonlab.jetibox.core.service.DisplayCatalogService
8-
import com.squareup.moshi.JsonAdapter
9-
import com.squareup.moshi.JsonEncodingException
10-
import com.squareup.moshi.Moshi
11-
import com.squareup.moshi.adapter
128
import kotlinx.coroutines.Dispatchers
139
import kotlinx.coroutines.withContext
10+
import kotlinx.serialization.KSerializer
11+
import kotlinx.serialization.json.Json
1412
import javax.inject.Inject
1513
import javax.inject.Singleton
1614

@@ -19,11 +17,8 @@ import javax.inject.Singleton
1917
class MsCapDatabase @Inject constructor(
2018
private val cfgService: ConfigService,
2119
private val displayCatalogService: DisplayCatalogService,
22-
private val moshi: Moshi
20+
private val json: Json
2321
) {
24-
private val ratingAdapter = moshi.adapter<RatingBoardsData>()
25-
private val pfAdapter = moshi.adapter<ProductFamiliesData>()
26-
2722
private var mObjPFamilies: List<ProductFamilyGroup> = emptyList()
2823

2924
var mObjPFCaps: Map<String, String> = emptyMap()
@@ -33,21 +28,21 @@ class MsCapDatabase @Inject constructor(
3328
private set
3429

3530
suspend fun restore() = withContext(Dispatchers.IO) {
36-
mObjRatings = restoreOrFetch("msdb.ratings", ratingAdapter, displayCatalogService::getRatings)?.ratingBoards.orEmpty()
37-
mObjPFamilies = restoreOrFetch("msdb.productfamilies", pfAdapter, displayCatalogService::getProductFamiliesForGames)?.displayData.orEmpty()
31+
mObjRatings = restoreOrFetch("msdb.ratings", RatingBoardsData.serializer(), displayCatalogService::getRatings)?.ratingBoards.orEmpty()
32+
mObjPFamilies = restoreOrFetch("msdb.productfamilies", ProductFamiliesData.serializer(), displayCatalogService::getProductFamiliesForGames)?.displayData.orEmpty()
3833
mObjPFCaps = mObjPFamilies.first { it.group == "StoreClientSharedStrings" }.values.associate { it.value to it.localized }
3934
}
4035

41-
private suspend fun <T> restoreOrFetch (key: String, adapter: JsonAdapter<T>, funcToFetch: suspend (market: String, languages: String) -> T): T? {
36+
private suspend fun <T> restoreOrFetch (key: String, adapter: KSerializer<T>, funcToFetch: suspend (market: String, languages: String) -> T): T? {
4237
val fetch = suspend {
4338
funcToFetch(cfgService.marketCountry, cfgService.marketLanguage).also {
44-
cfgService.put(key, adapter.toJson(it))
39+
cfgService.put(key, json.encodeToString(adapter, it))
4540
}
4641
}
4742

4843
return if (cfgService.has(key)) {
4944
try {
50-
adapter.fromJson(cfgService.string(key, ""))
45+
json.decodeFromString(adapter, cfgService.string(key, ""))
5146
} catch (e: Exception) {
5247
// malformed JSON or invalid fields
5348
fetch()

app/src/main/java/bruhcollective/itaysonlab/jetibox/core/models/achievements/AchvModels.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,43 @@
11
package bruhcollective.itaysonlab.jetibox.core.models.achievements
22

3-
import com.squareup.moshi.JsonClass
3+
import kotlinx.serialization.Serializable
44

5-
@JsonClass(generateAdapter = true)
5+
@Serializable
66
class AchievementsResponse(
7-
val achievements: List<Achievement>,
7+
val achievements: List<Achievement> = emptyList(),
88
val pagingInfo: AchievementPagingInfo
99
)
1010

11-
@JsonClass(generateAdapter = true)
11+
@Serializable
1212
class AchievementPagingInfo(
1313
val totalRecords: Int,
14-
val continuationToken: String?,
14+
val continuationToken: String? = null,
1515
)
1616

17-
@JsonClass(generateAdapter = true)
17+
@Serializable
1818
class Achievement(
1919
val name: String,
2020
val lockedDescription: String,
2121
val description: String,
2222
val isSecret: Boolean,
2323
val rarity: AchievementRarity,
24-
val rewards: List<AchievementReward>,
25-
val mediaAssets: List<AchievementMedia>,
24+
val rewards: List<AchievementReward> = emptyList(),
25+
val mediaAssets: List<AchievementMedia> = emptyList(),
2626
)
2727

28-
@JsonClass(generateAdapter = true)
28+
@Serializable
2929
class AchievementRarity(
3030
val currentPercentage: Float,
3131
val currentCategory: String
3232
)
3333

34-
@JsonClass(generateAdapter = true)
34+
@Serializable
3535
class AchievementReward(
3636
val value: Int,
3737
val type: String
3838
)
3939

40-
@JsonClass(generateAdapter = true)
40+
@Serializable
4141
class AchievementMedia(
4242
val name: String,
4343
val type: String,
Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
package bruhcollective.itaysonlab.jetibox.core.models.collections
22

3-
import com.squareup.moshi.JsonClass
3+
import kotlinx.serialization.Serializable
44

5-
@JsonClass(generateAdapter = true)
5+
@Serializable
66
class QueryCollectionsBody(
7-
val beneficiaries: List<String>,
7+
val beneficiaries: List<String> = emptyList(),
88
val market: String,
99
val includeDuplicates: Boolean,
1010
val checkSatisfyingEntitlements: Boolean,
1111
val expandSatisfyingItems: Boolean,
1212
val showSatisfiedBy: Boolean,
1313
val maxPageSize: Long, // 1000
1414
val validityType: String, // ValidAndFuture
15-
val entitlementFilters: List<String>, // *:Game
16-
val productSkuIds: List<ProductSkuId>,
15+
val entitlementFilters: List<String> = emptyList(), // *:Game
16+
val productSkuIds: List<ProductSkuId> = emptyList(),
1717
val continuationToken: String
1818
)
1919

20-
@JsonClass(generateAdapter = true)
20+
@Serializable
2121
class QueryCollectionResponse(
22-
val continuationToken: String?,
23-
val items: List<CollectionItem>
22+
val continuationToken: String? = null,
23+
val items: List<CollectionItem> = emptyList()
2424
)
2525

26-
@JsonClass(generateAdapter = true)
26+
@Serializable
2727
class ProductSkuId(
2828
val productId: String,
2929
val skuId: String? = null
@@ -35,7 +35,7 @@ class ProductSkuId(
3535
}
3636
}
3737

38-
@JsonClass(generateAdapter = true)
38+
@Serializable
3939
data class CollectionItem(
4040
val status: String,
4141
val acquiredDate: String,
@@ -44,7 +44,7 @@ data class CollectionItem(
4444
val endDate: String,
4545
val startDate: String,
4646
val modifiedDate: String,
47-
val purchasedCountry: String?,
48-
val isTrial: Boolean?,
49-
val trialTimeRemaining: String?
47+
val purchasedCountry: String? = null,
48+
val isTrial: Boolean? = null,
49+
val trialTimeRemaining: String? = null
5050
)

app/src/main/java/bruhcollective/itaysonlab/jetibox/core/models/contentbuilder/ContentBuilder.kt

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
package bruhcollective.itaysonlab.jetibox.core.models.contentbuilder
22

3-
import com.squareup.moshi.JsonClass
4-
import dev.zacsweers.moshix.sealed.annotations.DefaultObject
5-
import dev.zacsweers.moshix.sealed.annotations.TypeLabel
6-
7-
@JsonClass(generateAdapter = true)
3+
import kotlinx.serialization.ExperimentalSerializationApi
4+
import kotlinx.serialization.SerialName
5+
import kotlinx.serialization.Serializable
6+
import kotlinx.serialization.json.JsonClassDiscriminator
7+
import kotlinx.serialization.modules.SerializersModule
8+
import kotlinx.serialization.modules.polymorphic
9+
10+
@Serializable
811
class ContentBuilderResponse(
912
val v: Int,
10-
val layout: List<ContentBuilderLayoutItem>
13+
val layout: List<ContentBuilderLayoutItem> = emptyList()
1114
)
1215

13-
@JsonClass(generateAdapter = true)
16+
@Serializable
1417
class ContentBuilderLayoutItem(
1518
val channelType: String,
1619
val channelId: String,
@@ -20,67 +23,77 @@ class ContentBuilderLayoutItem(
2023
val channelData: ContentBuilderLayoutItemData? = null
2124
)
2225

23-
@JsonClass(generateAdapter = true)
26+
@Serializable
2427
class ContentBuilderLayoutItemData(
25-
val items: List<ContentBuilderDataItem>
28+
val items: List<ContentBuilderDataItem> = emptyList()
2629
)
2730

28-
@JsonClass(generateAdapter = true)
31+
@Serializable
2932
class ContentBuilderDataItem(
3033
val itemId: String,
31-
val itemLayers: List<ContentBuilderLayer>
34+
val itemLayers: List<ContentBuilderLayer> = emptyList()
3235
)
3336

34-
@JsonClass(generateAdapter = true)
37+
@Serializable
3538
class ContentBuilderDataLayer(
3639
val layer: String,
3740
val dataType: String,
3841
val data: ContentBuilderDataLayerEntry,
3942
)
4043

41-
@JsonClass(generateAdapter = true)
44+
@Serializable
4245
class ContentBuilderDataLayerEntry(
4346
val totalCount: Int,
4447
)
4548

4649
//
4750

48-
@JsonClass(generateAdapter = true, generator = "sealed:dataType")
51+
@OptIn(ExperimentalSerializationApi::class)
52+
@Serializable
53+
@JsonClassDiscriminator("dataType")
4954
sealed class ContentBuilderLayer {
55+
companion object {
56+
val serializerModule = SerializersModule {
57+
polymorphic(ContentBuilderLayer::class) {
58+
defaultDeserializer { Unknown.serializer() }
59+
}
60+
}
61+
}
62+
5063
abstract val layer: String
5164

52-
@TypeLabel("title")
53-
@JsonClass(generateAdapter = true)
65+
@SerialName("title")
66+
@Serializable
5467
data class GameTitle(override val layer: String, val data: GameTitleLayerData) : ContentBuilderLayer()
5568

56-
@TypeLabel("label")
57-
@JsonClass(generateAdapter = true)
69+
@SerialName("label")
70+
@Serializable
5871
data class Label(override val layer: String, val data: LabelLayerData) : ContentBuilderLayer()
5972

60-
@TypeLabel("editorial")
61-
@JsonClass(generateAdapter = true)
73+
@SerialName("editorial")
74+
@Serializable
6275
data class Editorial(override val layer: String, val data: EditorialLayerData) : ContentBuilderLayer()
6376

64-
@DefaultObject
65-
object Unknown : ContentBuilderLayer() {
77+
@Serializable
78+
data object Unknown : ContentBuilderLayer() {
6679
override val layer = ""
6780
}
6881
}
6982

7083
//
7184

72-
@JsonClass(generateAdapter = true)
85+
@Serializable
7386
class GameTitleLayerData(
7487
val totalCount: Int,
75-
val titles: List<Long>
88+
val titles: List<Long> = emptyList()
7689
)
7790

78-
@JsonClass(generateAdapter = true)
91+
@Serializable
7992
class LabelLayerData(
8093
val label: String
8194
)
8295

83-
@JsonClass(generateAdapter = true)
96+
@Serializable
8497
class EditorialLayerData(
8598
val label: String,
8699
val action: String,

0 commit comments

Comments
 (0)