Intereting Posts

Является ли формат данных, хранящихся в kotlin.MetaData документированы где угодно?

Мне интересно узнать, какие данные хранятся в аннотации MetaData, добавленной к каждому классу Kotlin.

Но большинство полей не дает больше деталей, чем

«Метаданные в пользовательском формате. Формат может быть другим (или даже отсутствовать) для разных видов».

https://github.com/JetBrains/kotlin/blob/master/core/runtime.jvm/src/kotlin/Metadata.kt

Есть ли ссылки где-то, что объясняет, как интерпретировать эти данные?

kotlin.Metadata содержит информацию о символах Котлина, таких как их имена, подписи, отношения между типами и т. д. Часть этой информации уже присутствует в подписях JVM в файлах классов, но многого нет, так как существует немало Котлин -специфические вещи, которые файлы классов JVM не могут представлять должным образом: тип nullability, изменяемые / только для чтения интерфейсы коллекции, дисперсия объявления-сайта и другие.

Никаких конкретных действий не было сделано, чтобы сделать схему данных, закодированных в этой аннотации общедоступной, потому что для большинства пользователей такие данные необходимы для интроспекции программы во время выполнения, а библиотека отражения Kotlin предоставляет для этого хороший API.

Если вам нужно проверить специфические для Kotlin вещи, которые не отображаются через API отражения, или вам просто интересно, что еще хранится в этой аннотации, вы можете взглянуть на реализацию kotlinx.reflect.lite . Это небольшая библиотека, ядром которой является синтаксический анализатор, созданный protobuf. На данный момент там не так много поддержки, но есть доступные схемы, которые вы можете использовать для чтения любых других данных, которые вам нужны.