Skip to content

Commit f820604

Browse files
committed
Handle multiple YAML formats for backward compatibility
1 parent debb698 commit f820604

1 file changed

Lines changed: 38 additions & 15 deletions

File tree

data/src/main/kotlin/com/theapache64/stackzy/data/repo/ApkAnalyzerRepo.kt

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import kotlin.io.path.Path
2222
import kotlin.io.path.div
2323
import kotlin.io.path.exists
2424
import kotlin.io.path.readText
25+
import kotlin.jvm.java
2526

2627
class ApkAnalyzerRepo @Inject constructor() {
2728

@@ -69,21 +70,43 @@ class ApkAnalyzerRepo @Inject constructor() {
6970
}
7071
)
7172
val yamlString = yamlFile.readText()
72-
val metaInfo: MetaInfo = yaml.load(yamlString)
73-
74-
// Building gradle info
75-
return GradleInfo(
76-
versionCode = metaInfo.versionInfo?.versionCode,
77-
versionName = metaInfo.versionInfo?.versionName,
78-
minSdk = metaInfo.sdkInfo?.minSdkVersion?.let {
79-
val androidVersionName = AndroidVersionIdentifier.getVersion(it)
80-
GradleInfo.Sdk(it, androidVersionName)
81-
},
82-
targetSdk = metaInfo.sdkInfo?.targetSdkVersion?.let {
83-
val androidVersionName = AndroidVersionIdentifier.getVersion(it)
84-
GradleInfo.Sdk(it, androidVersionName)
85-
}
86-
)
73+
val metaInfo : Any = yaml.load(yamlString)
74+
if(metaInfo is MetaInfo){
75+
// Backward compatible
76+
77+
// Building gradle info
78+
return GradleInfo(
79+
versionCode = metaInfo.versionInfo?.versionCode,
80+
versionName = metaInfo.versionInfo?.versionName,
81+
minSdk = metaInfo.sdkInfo?.minSdkVersion?.let {
82+
val androidVersionName = AndroidVersionIdentifier.getVersion(it)
83+
GradleInfo.Sdk(it, androidVersionName)
84+
},
85+
targetSdk = metaInfo.sdkInfo?.targetSdkVersion?.let {
86+
val androidVersionName = AndroidVersionIdentifier.getVersion(it)
87+
GradleInfo.Sdk(it, androidVersionName)
88+
}
89+
)
90+
}else if(metaInfo is LinkedHashMap<*, *>) {
91+
// Handle LinkedHashMap format
92+
val versionInfo = metaInfo["versionInfo"] as? LinkedHashMap<*, *>
93+
val sdkInfo = metaInfo["sdkInfo"] as? LinkedHashMap<*, *>
94+
95+
return GradleInfo(
96+
versionCode = versionInfo?.get("versionCode")?.toString()?.toIntOrNull(),
97+
versionName = versionInfo?.get("versionName") as? String,
98+
minSdk = (sdkInfo?.get("minSdkVersion") as? Int)?.let {
99+
val androidVersionName = AndroidVersionIdentifier.getVersion(it)
100+
GradleInfo.Sdk(it, androidVersionName)
101+
},
102+
targetSdk = (sdkInfo?.get("targetSdkVersion") as? Int)?.let {
103+
val androidVersionName = AndroidVersionIdentifier.getVersion(it)
104+
GradleInfo.Sdk(it, androidVersionName)
105+
}
106+
)
107+
}else{
108+
error("Unsupported meta info type: ${metaInfo::class.simpleName}. Expected MetaInfo or LinkedHashMap")
109+
}
87110
}
88111

89112
/**

0 commit comments

Comments
 (0)