```private fun transformDepsRecursively(target: Pr...
# getting-started
s
Copy code
private fun transformDepsRecursively(target: Project, from: Map<*, *>, to: MutableMap<*, *>) {
    log.quiet("$TAG transformDepsRecursion start")
    from.forEach {
        val valueFrom = it.value
        var valueTo = valueFrom;
        if (valueFrom is ProjectDescriptor) {
            valueTo = target.project(valueFrom.path)
        } else if (valueFrom is Map<*, *>) {
            valueTo = mutableMapOf<String, Any>()
            transformDepsRecursively(target, valueFrom, valueTo)
        }
        mapOf<Any,Any>()
        to[it.key]=valueTo
    }
    log.quiet("$TAG transformDepsRecursion end")
}
a
*
can represents any type and there isn't any restriction so under your current function signature, this is possible, for example:
Copy code
transformDepsRecursively(target, mapOf<Int, Int>(), mutableMapOf<String, String>())
But of course you can't put int values into a map of strings. This is the reason of the error.
This should work.
s
@Albert Chang BIG THANKS for your help, it work with little modify like this:
Copy code
private fun transformDeps(target: Project): Map<String, Any?> {
    <http://log.info|log.info>("$TAG transformDeps start")
    val deps = mutableMapOf<String, Any?>()
    transformDepsRecursively(target, Nest.dependens, deps)
    <http://log.info|log.info>("$TAG transformDeps end from size(${Nest.dependens.size}) to size(${deps.size})")
    return deps
}

private fun <K> transformDepsRecursively(target: Project, from: Map<out K, Any?>, to: MutableMap<in K, Any?>) {
    <http://log.info|log.info>("$TAG transformDepsRecursively start from.size(${from.size} to.size(${to.size}))")
    from.forEach {
        val valueFrom = it.value
        var valueTo = valueFrom;
        <http://log.info|log.info>("$TAG transformDepsRecursively for key = ${it.key} with value type ${valueFrom?.javaClass}")
        log.debug("$TAG transformDepsRecursively valueFrom = ${valueFrom}")
        if (valueFrom is ProjectDescriptor) {
            valueTo = target.project(valueFrom.path)
        } else if (valueFrom is Map<*, *>) {
            valueTo = mutableMapOf<Any?, Any?>()
            transformDepsRecursively(target, valueFrom , valueTo)
        }
        log.debug("$TAG transformDepsRecursively valueTo = ${valueTo}")
        to[it.key] = valueTo
    }
    <http://log.info|log.info>("$TAG transformDepsRecursively end")
}