Articles of dsl

Как элегантная пара родительского и дочернего тегов в определении DSL в Kotlin

Используя Kotlin, я хочу определить DSL для инициализации структуры. Как вы можете видеть, я хочу создать набор модулей, каждый из которых имеет несколько полей. class DSL : ModuleDSL() { init { module(Module("myModule")) { field("Test", "Test") field("Test", "Test") field("Test", "Test") } module(Module("myOtherModule")) { field("Test", "Test") field("Test", "Test") field("Test", "Test") } } } Каждое поле должно быть […]

Расширение класса данных Kotlin для использования с JPA?

У Kotlin есть класс Data который автоматически реализует equals и hashcode , но они все еще не могут автоматически использоваться в контексте JPA. Чтобы исправить это, мне было интересно, что потребуется, чтобы расширить тип Data , чтобы либо присвоить «Бизнес-ключ», либо свойство id которое является final и non updatable и инициализируется UUID который служит в […]

Создать класс CSS с помощью kotlinx.html DSL

Я использую Kotlin для Javascript- плагина и библиотеки kotlinx.html для создания примера приложения: fun main(args: Array<String>) { window.onload = { document.body!!.append.div { a("#", classes = "red") { +"Link" } } } } И я хочу нарисовать ссылку с «красным» классом CSS на красный цвет. Теперь я использую unsage + raw для этого: document.head!!.append.style { unsafe […]

Andoird anko DSL – добавление текстовых просмотров и создание их «новой строки», когда нет больше ширины экрана?

моя задача проста, у меня есть массив имен, каждое имя добавляется как отдельный текст. Однако некоторые из моих массивов длинны, а текстовые изображения слишком велики, чтобы поместиться на экране. Результат очень урод, и я не знаю, как его решить. Я попытался использовать все разные (насколько мне известно) типы макетов, и ни один из них, похоже, […]

Как вы скрываете параметры в шагах пользовательской сборки в Kotlin для TeamCity?

Я пытаюсь настроить TeamCity, используя config как код с Kotlin. Я пишу обертки для buildsteps, поэтому я могу скрыть открытую конфигурацию по умолчанию и только выставлять параметры, которые имеют значение. Это позволило бы мне запретить пользователям класса изменять значения, которые могли бы вызвать ошибки сборки. Я хочу это: steps { step { name = "Restore […]

Как извлечь часть кода в локальные переменные в Kotlin при использовании построителя HTML Ktor?

Я пытаюсь понять HTML-конструктор в Kotlin / Ktor. В примере здесь используется построитель HTML для построения результата: call.respondHtml { head { title { +"HTML Application" } } body { h1 { +"Sample application with HTML builders" } widget { +"Widgets are just functions" } } } Я пытаюсь извлечь тело в переменную следующим образом: val […]

расширение функции для класса в другом классе

Я хочу сделать расширение функции для класса внутри другого класса (для String в ModelAndView , а не для внутреннего), но не нашел способ сделать это без наследования классов. Это вообще возможно? Пример расширения класса: class MyModelAndView : ModelAndView() { infix fun String.to(value: Any?) { addObject(this, value) } }

Как установить заголовок NavigationView с помощью Anko DSL?

В общем формате XML основной макет по умолчанию выглядит так: <?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> Я попытался закодировать это с помощью Anko DSL: … override fun createView(ui: AnkoContext<MainActivity>) = with(ui) { drawerLayout { […]

Kotlin – Ограничить расширение метода расширения

Есть ли способ ограничить методы расширения в DSL? Скажем, у меня есть такая структура классов: 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 inner } } class Inner […]

Как заставить безопасных строителей Kotlin работать в Scala?

У Kotlin есть потрясающие типы безопасных сборщиков, которые позволяют создавать dsl, как это html { head { title("The title") body {} // compile error } body {} // fine } Удивительно то, что вы не можете поместить теги в недействительные места, например, внутри тела внутри, автоматическое завершение также работает правильно. Мне интересно, если это может […]