<@U0QBCLV62> This hacky AF. But I feel like I'm ve...
# gradle
j
@bamboo This hacky AF. But I feel like I'm very close to getting this to work:
Copy code
fun <R> callBasedOnContext(
    ifBuildScript: KotlinBuildScript.() -> R,
    ifSettingsScript: KotlinSettingsScript.() -> R
): R {
    val kotlinProjectClass: KClass<*> = KotlinBuildScript::class
    val kotlinSettingsClass: KClass<*> = KotlinSettingsScript::class

    return when {
        kotlinProjectClass.isInstance(this) -> (this as KotlinBuildScript).ifBuildScript()
        kotlinSettingsClass.isInstance(this) -> (this as KotlinSettingsScript).ifSettingsScript()
        else -> throw AssertionError("$this is not being applied to a supported type.")
    }
}

val extra: ExtraPropertiesExtension by lazy {
    callBasedOnContext(
        ifBuildScript = { (this as ExtensionAware).extra },
        ifSettingsScript = { (settings as ExtensionAware).extra }
    )
}

fun hasPropertyHelper(propertyName: String): Boolean {
    return callBasedOnContext(
        ifBuildScript = { hasProperty(propertyName) },
        ifSettingsScript = { (settings as ExtensibleDynamicObject).hasProperty(propertyName) }
    )
}

fun propertyHelper(propertyName: String): Any? {
    return callBasedOnContext(
        ifBuildScript = { property(propertyName) },
        ifSettingsScript = { (settings as ExtensibleDynamicObject).getProperty(propertyName) }
    )
}
Currently, I'm getting a:
Copy code
java.lang.ClassCastException: org.gradle.initialization.DefaultSettings_Decorated cannot be cast to org.gradle.api.internal.ExtensibleDynamicObject
Just a note, I'm running Gradle
4.7