[KAPT] Keep original expressions in annotations vararg

#KT-29929 Fixed
This commit is contained in:
Andrey Zinovyev
2021-05-28 12:33:19 +03:00
committed by Space
parent e927764aaf
commit 78e20c1098
3 changed files with 48 additions and 1 deletions
@@ -1280,6 +1280,8 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati
null
}
is KtCollectionLiteralExpression -> singleArg.getInnerExpressions()
is KtDotQualifiedExpression -> listOf(singleArg)
null -> args
else -> null
}
@@ -1317,7 +1319,7 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati
if (constantValue is List<*>) {
val callArgs = unwrapArgumentExpression()
// So we make sure something is absent in the constant value
if (callArgs != null && callArgs.size != constantValue.size) {
if (callArgs != null && callArgs.size > constantValue.size) {
val literalExpressions = mapJList(callArgs, ::tryParseTypeLiteralExpression)
if (literalExpressions.size == callArgs.size) {
return treeMaker.NewArray(null, null, literalExpressions)
@@ -44,11 +44,26 @@ public class B {
public final static String a9 = "A";
}
//FILE: lib/OnClick.java
package lib;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface OnClick {
int[] value() default {};
}
//FILE: test.kt
package app
import lib.R as LibR
import lib.R.id.textView
import lib.OnClick
annotation class Bind(val id: Int)
@@ -133,6 +148,12 @@ class MyActivity {
@MultiValueByte(ids = byteArrayOf(B.a2))
fun multi5() {}
@OnClick(B.id.textView)
fun multiJava1() {}
@OnClick(B.id.textView, app.R.layout.mainActivity)
fun multiJava2() {}
const val propA = B.id.textView
val propB = B.id.textView
var propC = B.id.textView
@@ -285,6 +285,14 @@ public final class MyActivity {
public final void multi5() {
}
@lib.OnClick(value = {app.B.id.textView})
public final void multiJava1() {
}
@lib.OnClick(value = {app.B.id.textView, app.R.layout.mainActivity})
public final void multiJava2() {
}
public final int getPropB() {
return 0;
}
@@ -343,6 +351,22 @@ public class R2 {
package lib;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value = ElementType.METHOD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface OnClick {
int[] value() default {};
}
////////////////////
package lib;
public class R {
public R() {