С KotlinPoet или подобным; генерирование не необработанного строкового литерала Kotlin - PullRequest
2 голосов
/ 19 февраля 2020

Непосредственная; есть ли способ создать действительный Kotlin строковый литерал ( не необработанный, как в не-тройных кавычках ) из строки; В настоящее время я пытаюсь выполнить sh с помощью KotlinPoet .

Для ясности, пример ввода:

Hello, how are you?
I'm doing "great"!
I hope you are too!
It'll cost you $2.

Требуемый пример вывода:

"Hello, how are you?\nI'm doing \"great\"!\nI hope you are too!\nIt'll cost you \$2."

С KotlinPoet лучшее, что я могу получить из API, который я узнал до сих пор, это:

"""
|Hello, how are you?
|I'm doing "great"!
|I hope you are too!
|It'll cost you ${'$'}2.
|""".trimMargin()

Что, хотя и функционально, не то, чего я пытаюсь достичь .


Мне удалось сделать sh что-то функционально близкое, с ObjectMapper::writeValueAsString Джексона, однако, я уверен, что есть много предостережений с использованием этого для создать действительный код Kotlin.

1 Ответ

1 голос
/ 19 февраля 2020

К сожалению, соответствующая функция в KotlinPoet равна internal, или вы можете просто вызвать ее с помощью isConstantContext = true, как в в этом тесте .

Таким образом, в качестве обходного пути вы можете поместить строку в постоянный контекст, такой как const val x = ... или @A(...) (где ... ваша строка), сгенерировать код для нее и затем удалить все, кроме буквальный.

...