Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Kotlin Annotation IntDef

I have this code sample:

class MeasureTextView: TextView {     constructor(context: Context?) : super(context)     constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)     constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)     constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes)      companion object{         val UNIT_NONE = -1         val UNIT_KG = 1         val UNIT_LB = 0                 }      fun setMeasureText(number: Float, unitType: Int){          val suffix = when(unitType){             UNIT_NONE -> {                 EMPTY_STRING             }             UNIT_KG -> {                 KG_SUFIX             }             UNIT_LB -> {                 LB_SUFIX             }             else -> throw IllegalArgumentException("Wrong unitType passed to formatter: MeasureTextView.setMeasureText")         }          // set the final text         text = "$number $suffix"     } } 

I want to be able to use, at compile time, the auto complete feature in conjunction with IntDef annotation, so when i invoke setMeasureText(...), the static variables are shown as options to the argument of this method.

I have searched about this, and i couldn't find if Kotlin supported this java-style annotations (intdef for example). So i have tried it, and made an annotation for this, but it won't show in autocompletion.

My question: - Is Java annotation IntDef supported in Kotlin (latest version)

  • If it is, how can i turn in ON in the Android Studio IDE (if it works, i can't get the compiler to suggest it).

  • If it is not, is there any Kotlin-way of make this compile time checks

like image 640
johnny_crq Avatar asked Jun 15 '16 10:06

johnny_crq


People also ask

What is @IntDef?

Kotlin |Java. @Retention(value = AnnotationRetention.SOURCE) @Target(allowedTargets = [AnnotationTarget.ANNOTATION_CLASS]) annotation IntDef. Denotes that the annotated element of integer type, represents a logical type and that its value should be one of the explicitly named constants.


1 Answers

Strange thing, but this question comes in search before the same with right answer

Copying it here:

import android.support.annotation.IntDef public class Test {      companion object {           @IntDef(SLOW, NORMAL, FAST)          @Retention(AnnotationRetention.SOURCE)          annotation class Speed           const val SLOW = 0          const val NORMAL = 1          const val FAST = 2     }      @Speed     private var speed: Int=SLOW      public fun setSpeed(@Speed speed: Int) {         this.speed = speed     } } 
like image 173
Dima Rostopira Avatar answered Sep 21 '22 09:09

Dima Rostopira