Articles of dsl

¿Extendiendo la class de datos de Kotlin para usar con JPA?

Kotlin tiene una class de Data que implementa equals y hashcode automáticamente, pero estos aún no se pueden usar automáticamente en un context JPA. Para remediar esto, me preguntaba qué se necesitaría para extender el tipo de Data para asignar una "key comercial" o una propiedad de id que sea final y non updatable y […]

Crear class CSS con kotlinx.html DSL

Estoy usando el plugin de Kotlin a Javascript y la biblioteca kotlinx.html para crear una aplicación de muestra: fun main(args: Array<String>) { window.onload = { document.body!!.append.div { a("#", classes = "networking") { +"Link" } } } } Y quiero pintar a enlace con la class CSS "roja" al color rojo. Ahora estoy usando unsage + […]

Andoird anko DSL: ¿se agregan textviews y se convierten en "nueva línea" cuando no hay más ancho de pantalla?

mi tarea es simple, tengo una matriz de nombres, cada nombre se agrega como una vista de text individual. Sin embargo, algunas de mis matrices son largas y las textviews son demasiado grandes para caber en la pantalla. El resultado es muy ugle y no tengo ni idea de cómo resolverlo. Intenté utilizar todos los […]

¿Cómo se ocultan los parameters en los pasos de creación personalizados en Kotlin para TeamCity?

Estoy intentando configurar TeamCity, usando config como código con Kotlin. Estoy escribiendo wrappers para buildsteps para poder ocultar la configuration expuesta pnetworkingeterminada y solo exponer los parameters que importan. Esto me permitiría evitar que los usuarios de la class cambien los valores que causarían errores de compilation. Quiero esto: steps { step { name = […]

¿Cómo extraigo partes de código en variables locales en Kotlin cuando uso el generador HTML de Ktor?

Estoy tratando de entender el creador de HTML en Kotlin / Ktor. El ejemplo aquí usa el generador de HTML para generar el resultado: call.respondHtml { head { title { +"HTML Application" } } body { h1 { +"Sample application with HTML builders" } widget { +"Widgets are just functions" } } } Estoy tratando […]

¿Cómo configurar el headerView de NavigationView con Anko DSL?

En general, el layout XML, el layout principal pnetworkingeterminado es el siguiente: <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:openDrawer="start"> <include layout="@layout/app_bar_main" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" /> </android.support.v4.widget.DrawerLayout> Traté de codificar esto con Anko DSL: … override fun createView(ui: AnkoContext<MainActivity>) = with(ui) { drawerLayout […]

Kotlin – Restringir el scope del método de extensión

¿Hay alguna manera de restringir los methods de extensión en DSL? Digamos que tengo una estructura de classs como esta: class Outer { fun middle(op: Middle.() -> Unit): Middle { val middle = Middle() middle.op() return middle } } class Middle { fun inner(op: Inner.() -> Unit): Inner { val inner = Inner() inner.op() return […]

¿Cómo hacer que los constructores seguros de Kotlin trabajen en Scala?

Kotlin tiene increíbles types de constructores seguros que hacen posible crear dsl como este html { head { title("The title") body {} // compile error } body {} // fine } La maravilla es que no puedes poner tags en lugares no válidos, como el cuerpo dentro de la cabeza, la autocompletación también funciona correctamente. […]

Kotlin type DSLs constructor seguro, security para la function más externa

Voy a usar el ejemplo oficial de la documentation que implementa una DSL para la creación de HTML. Desde Kotlin 1.1, la anotación @DslMarker nos permite restringir el scope de las funciones en nuestras classs, como hace el ejemplo con la anotación @HtmlTagMarker . Esto nos da un error al intentar escribir código incorrectamente estructurado […]

"Lambda con receptor": ¿Qué es esta construcción de Kotlin?

Estoy viendo esta statement de object Kotlin: object A : B({ variableName1 = "text1" variableName2 = "text2" params { param("Foo", "Bar") } }) Y no puedo entender cuál es el argumento para el constructor de la class B. He abstraído a propósito la información en este ejemplo, pero la class B es en realidad jetbrains.buildServer.configs.kotlin.v10.BuildType […]