Выражение Java-класса аннотации с членами в Kotlin - PullRequest
0 голосов
/ 14 мая 2019

Я новичок в Kotlin и в настоящее время использую v1.3.31 в POC разработки комплекта OSGI. В настоящее время я использую процессоры аннотаций для генерации деклараций манифеста OSGI и пытаюсь найти эквивалент Котлина из следующего:

@ObjectClassDefinition(name="Config", description = "Sample Config")
    public static @interface Config {
        @AttributeDefinition(name = "A parameter", description = "Configurable param")
        String myParameter() default "";
    }

Учитывая, что эти аннотации OSGI создаются как:

@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface ObjectClassDefinition

/*....*/

@Retention(RetentionPolicy.CLASS)
@Target(ElementType.METHOD)
public @interface AttributeDefinition

Самое близкое, что я могу получить в Kotlin, - это использование аннотации @ObjectClassDefinition для public annotation class, но поскольку классы аннотаций Kotlin не поддерживают членов, я не могу использовать @AttributeDefinition для члена класса.

  • Я пытался использовать только Kotlin class или interface, но процессор аннотаций не допускает никаких классов без аннотаций.
  • Я также пытался создать java.lang.Annotation в Kotlin, чтобы обойти это поведение, но компилятор не допустит этого.

Текущая частично работающая реализация, и вот последний работающий GitHub source. :

@ObjectClassDefinition(name = "Sample Kotlin servlet",
            description = "Simple Kotlin servlet with configurable properties")
    public annotation class  Config (
        val value : String = "hello"
    )

Я заметил, что аннотации могут быть особенно хитрыми в Kotlin. Любое понимание очень ценится!

...