Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Define StringDef in kotlin

I'm trying to define a StringDef in kotlin:

@Retention(AnnotationRetention.SOURCE)
@StringDef(NORTH, SOUTH)
annotation class FilterType {

    companion object {
        const val NORTH = "NORTH"
        const val SOUTH = "SOUTH"
    }
}

I think something is wrong in the code above.

// I can send anything to this method, when using my kotlin stringDef
private fun takeString(@DirectionJava.Direction filterType: String) {

I want the kotlin equivalent of the java below:

public class DirectionJava {

    public static final String NORTH = "NORTH";
    public static final String SOUTH = "SOUTH";

    @Retention(RetentionPolicy.SOURCE)
    @StringDef({
            NORTH,
            SOUTH,
    })
    public @interface Direction {

    }
}

Calling the java defined StringDef works from kotlin

// This works as expected, the Java-written string def 
// restricts what I can pass to this method
private fun takeString(@DirectionJava.Direction filterType: String) {

Where have I gone wrong, how do you define a StringDef in Kotlin?

like image 366
Adam Avatar asked Dec 14 '18 10:12

Adam


Video Answer


1 Answers

According to jetbrains issue, Lint check plugin for enumerated annotations in kotlin is under development and is not stable yet. Checking android support annotations such as @Nullable, @StringRes, @DrawableRes, @IntRange, ... (which are written in java) works fine and user defined enumerated annotations are not checked properly. So, it seems that we should define them in java then use in kotlin.

like image 170
aminography Avatar answered Sep 28 '22 00:09

aminography