[KAPT] Keep constant references in annotations with array values

#KT-29929 Fixed
This commit is contained in:
Andrey Zinovyev
2021-02-10 16:17:02 +03:00
committed by TeamCityServer
parent 9e9450caa2
commit 8071a1e246
6 changed files with 141 additions and 34 deletions
@@ -52,6 +52,10 @@ import lib.R.id.textView
annotation class Bind(val id: Int)
annotation class MultiValue(val ids: IntArray)
annotation class MultiValueString(val ids: Array<String>)
annotation class MultiValueByte(val ids: ByteArray)
@Target(AnnotationTarget.FIELD)
annotation class BindField(val id: Int)
@@ -111,6 +115,24 @@ class MyActivity {
@Bind(B.id.textView)
fun plainIntConstant() {}
@MultiValue(ids = [])
fun multi0() {}
@MultiValue(ids = [B.id.textView])
fun multi1() {}
@MultiValue(ids = [B.id.textView, B.a3])
fun multi2() {}
@MultiValue(ids = intArrayOf(B.id.textView, B.a3))
fun multi3() {}
@MultiValueString(ids = arrayOf(B.a9))
fun multi4() {}
@MultiValueByte(ids = byteArrayOf(B.a2))
fun multi5() {}
const val propA = B.id.textView
val propB = B.id.textView
var propC = B.id.textView
@@ -129,4 +151,4 @@ object JJ {
// EXPECTED_ERROR class B is public, should be declared in a file named B.java
// EXPECTED_ERROR class R is public, should be declared in a file named R.java
// EXPECTED_ERROR class R is public, should be declared in a file named R.java
// EXPECTED_ERROR class R2 is public, should be declared in a file named R2.java
// EXPECTED_ERROR class R2 is public, should be declared in a file named R2.java
@@ -115,6 +115,45 @@ package app;
import java.lang.System;
@kotlin.Metadata()
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
public abstract @interface MultiValue {
public abstract int[] ids();
}
////////////////////
package app;
import java.lang.System;
@kotlin.Metadata()
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
public abstract @interface MultiValueByte {
public abstract byte[] ids();
}
////////////////////
package app;
import java.lang.System;
@kotlin.Metadata()
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
public abstract @interface MultiValueString {
public abstract java.lang.String[] ids();
}
////////////////////
package app;
import java.lang.System;
@kotlin.Metadata()
public final class MyActivity {
@BindField(id = lib.R.id.textView)
@@ -222,6 +261,30 @@ public final class MyActivity {
public final void plainIntConstant() {
}
@MultiValue(ids = {})
public final void multi0() {
}
@MultiValue(ids = {app.B.id.textView})
public final void multi1() {
}
@MultiValue(ids = {app.B.id.textView, app.B.a3})
public final void multi2() {
}
@MultiValue(ids = {app.B.id.textView, app.B.a3})
public final void multi3() {
}
@MultiValueString(ids = {"A"})
public final void multi4() {
}
@MultiValueByte(ids = {app.B.a2})
public final void multi5() {
}
public final int getPropB() {
return 0;
}