Поиск правильного синтаксиса kotlinpoet для инициализации PropertySpec.Builder для значений IntArrays и Array <String> - PullRequest
0 голосов
/ 02 июля 2019

Не вижу правильного синтаксиса для инициализации типов Array значениями из существующих типов в рамках проекта, примитивные типы работают нормально и классы, определенные программистом

Target(
    AnnotationTarget.FIELD,
    AnnotationTarget.PROPERTY_GETTER,
    AnnotationTarget.VALUE_PARAMETER,
    AnnotationTarget.PROPERTY)
    @Retention(AnnotationRetention.SOURCE)

класс аннотаций ConfigurableIntArray ( Вал ключ: Строка, val text: строка, Валь описание: Строка, val initialValue: IntArray )

Class BlockAnnotationTester2(@field:ConfigurableIntArray(
    key = UIComponentSettings.MAXIMUM_LENGTH_KEY,
    text = UIComponentSettings.MAXIMUM_LENGTH_TEXT,
    description = UIComponentSettings.MAXIMUM_LENGTH_DESCRIPTION,
    initialValue = [2]) 
val unusedIntArray: IntArray = intArrayOf(1, 2, 3, 4),

 for (data in memberDataIntArray)...`
addProperty( 
                  PropertySpec.builder(TestAnnotationProcessor.INITIAL_VALUE, IntArray::class) 

                        .initializer("intArrayOf(${data.annotation.initialValue.asList()})")
                        .build()
                ) 
   object Member_BlockAnnotationTester2UnusedIntArray {

    const val KEY: String = 
    "configurable_block_detail_ui_component_maximum_length"

    const val TEXT: String = "Maximum length"

    var INITIAL_VALUE: IntArray = intArrayOf([2]) <-- issue 

const val DESCRIPTION: String = "Maximum length of the corresponding UI 
component"
}

Может получить его только для инициализации статических данных в виде простых текстовых литералов или первого значения

1 Ответ

0 голосов
/ 03 июля 2019

думаю, что есть более простой способ, но это сработало

.initializer ("% L", buildCodeBlock {var lregex = data.annotation.initialValue.asList (). ToString () lregex = lregex.replace ("[", "") lregex = lregex.replace ("]", "") add ("intArrayOf ($ lregex)")})

...