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

refactor: Move Config.kt into :tool:config module. #2079

Merged
merged 1 commit into from
Jul 12, 2021
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
4 changes: 1 addition & 3 deletions corellium/cli/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,8 @@ dependencies {
implementation(Dependencies.PICOCLI)
implementation(project(":corellium:domain"))
implementation(project(":corellium:adapter"))
implementation(project(":tool:config"))
implementation(project(":tool:log:format"))
implementation(Dependencies.JACKSON_KOTLIN)
implementation(Dependencies.JACKSON_YAML)
implementation(Dependencies.JACKSON_XML)
testImplementation(Dependencies.JUNIT)
testImplementation(Dependencies.MOCKK)
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ import com.fasterxml.jackson.annotation.JsonIgnore
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import com.fasterxml.jackson.annotation.JsonProperty
import flank.apk.Apk
import flank.config.ConfigMap
import flank.config.emptyConfigMap
import flank.config.loadYaml
import flank.config.merge
import flank.corellium.api.AndroidApps
import flank.corellium.api.AndroidInstance
import flank.corellium.cli.RunTestCorelliumAndroidCommand.Config
import flank.corellium.cli.util.ConfigMap
import flank.corellium.cli.util.emptyConfigMap
import flank.corellium.cli.util.loadYaml
import flank.corellium.cli.util.merge
import flank.corellium.corelliumApi
import flank.corellium.domain.RunTestCorelliumAndroid
import flank.corellium.domain.RunTestCorelliumAndroid.Args
Expand Down
1 change: 1 addition & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ include(
":corellium:sandbox",

":tool:apk",
":tool:config",
":tool:filter",
":tool:shard",
":tool:shard:calculate",
Expand Down
9 changes: 9 additions & 0 deletions tool/config/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Config

Extension for managing user configuration.

### References

* Module type - [tool](../../../docs/architecture.md#tool)
* Dependency type - [static](../../../docs/architecture.md#static_dependencies)
* Public API - [Config.kt](./src/main/kotlin/flank/config/Config.kt)
21 changes: 21 additions & 0 deletions tool/config/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
kotlin(Plugins.Kotlin.PLUGIN_JVM)
}

repositories {
jcenter()
mavenCentral()
maven(url = "https://kotlin.bintray.com/kotlinx")
}

tasks.withType<KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }

dependencies {
implementation(Dependencies.KOTLIN_COROUTINES_CORE)
api(Dependencies.JACKSON_KOTLIN)
api(Dependencies.JACKSON_YAML)
api(Dependencies.JACKSON_XML)
testImplementation(Dependencies.JUNIT)
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package flank.corellium.cli.util
package flank.config

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
Expand All @@ -8,7 +8,7 @@ import java.io.File
/**
* Abstraction for configuration structures
*/
internal interface ConfigMap {
interface ConfigMap {
val data: MutableMap<String, Any?>
}

Expand All @@ -20,21 +20,21 @@ internal interface ConfigMap {
* @param others Other configuration to accumulate in first.
* @return The [first] parameter with accumulated values.
*/
internal fun <C : ConfigMap> merge(first: C, vararg others: C): C =
fun <C : ConfigMap> merge(first: C, vararg others: C): C =
others.fold(first) { acc, config -> acc.apply { data += config.data } }

/**
* Factory method for the empty configuration map with null as default value
*/
internal fun emptyConfigMap(): MutableMap<String, Any?> =
fun emptyConfigMap(): MutableMap<String, Any?> =
mutableMapOf<String, Any?>().withDefault { null }

/**
* Load the yaml configuration file as structure.
*/
internal inline fun <reified T> loadYaml(path: String): T =
inline fun <reified T> loadYaml(path: String): T =
yamlMapper.readValue(File(path), T::class.java)

private val yamlMapper: ObjectMapper by lazy {
val yamlMapper: ObjectMapper by lazy {
ObjectMapper(YAMLFactory()).registerKotlinModule()
}