Can't use a qualified name of an annotation class in an annotation parameter
#KT-6151 Fixed
This commit is contained in:
@@ -334,6 +334,11 @@ public class ConstantExpressionEvaluator private (val trace: BindingTrace) : Jet
|
||||
val selectorExpression = expression.getSelectorExpression()
|
||||
// 1.toInt(); 1.plus(1);
|
||||
if (selectorExpression is JetCallExpression) {
|
||||
val qualifiedCallValue = evaluate(selectorExpression, expectedType)
|
||||
if (qualifiedCallValue != null) {
|
||||
return qualifiedCallValue
|
||||
}
|
||||
|
||||
val calleeExpression = selectorExpression.getCalleeExpression()
|
||||
if (calleeExpression !is JetSimpleNameExpression) {
|
||||
return null
|
||||
|
||||
+2
-1
@@ -225,7 +225,8 @@ public class CallExpressionResolver {
|
||||
}
|
||||
|
||||
private static boolean canInstantiateAnnotationClass(@NotNull JetCallExpression expression) {
|
||||
PsiElement parent = expression.getParent();
|
||||
//noinspection unchecked
|
||||
PsiElement parent = PsiTreeUtil.getParentOfType(expression, JetValueArgument.class, JetParameter.class);
|
||||
if (parent instanceof JetValueArgument) {
|
||||
return PsiTreeUtil.getParentOfType(parent, JetAnnotationEntry.class) != null;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package a.b.c
|
||||
|
||||
kotlin.deprecated("aaa")
|
||||
ann1(kotlin.deprecated("aaa"))
|
||||
|
||||
a.b.c.ann1()
|
||||
ann2(a.b.c.ann1())
|
||||
|
||||
A.IAnn()
|
||||
ann3(A.IAnn())
|
||||
|
||||
a.b.c.A.IAnn()
|
||||
ann3(a.b.c.A.IAnn())
|
||||
|
||||
annJavaClass(kotlin.javaClass<A>())
|
||||
|
||||
annArray(kotlin.array("a"))
|
||||
fun test() = 1
|
||||
|
||||
annotation class ann1(val p: deprecated = kotlin.deprecated("aaa"))
|
||||
annotation class ann2(val p: ann1 = a.b.c.ann1())
|
||||
annotation class ann3(val p: A.IAnn = A.IAnn(), val p2: A.IAnn = a.b.c.A.IAnn())
|
||||
|
||||
annotation class annJavaClass(val p: Class<*> = kotlin.javaClass<A>())
|
||||
|
||||
annotation class annArray(val p: Array<String> = kotlin.array("a"))
|
||||
|
||||
class A {
|
||||
annotation class IAnn
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package
|
||||
|
||||
package a {
|
||||
|
||||
package a.b {
|
||||
|
||||
package a.b.c {
|
||||
kotlin.deprecated(value = "aaa": kotlin.String) a.b.c.ann1(p = kotlin.deprecated(value = "aaa": kotlin.String): kotlin.deprecated) a.b.c.ann1() a.b.c.ann2(p = a.b.c.ann1(): a.b.c.ann1) a.b.c.A.IAnn() a.b.c.ann3(p = a.b.c.A.IAnn(): a.b.c.A.IAnn) a.b.c.A.IAnn() a.b.c.ann3(p = a.b.c.A.IAnn(): a.b.c.A.IAnn) a.b.c.annJavaClass(p = a.b.c.A.class: java.lang.Class<a.b.c.A>) a.b.c.annArray(p = {"a"}: kotlin.Array<kotlin.String>) internal fun test(): kotlin.Int
|
||||
|
||||
internal final class A {
|
||||
public constructor A()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
internal final annotation class IAnn : kotlin.Annotation {
|
||||
public constructor IAnn()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
|
||||
internal final annotation class ann1 : kotlin.Annotation {
|
||||
public constructor ann1(/*0*/ p: kotlin.deprecated = ...)
|
||||
internal final val p: kotlin.deprecated
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
internal final annotation class ann2 : kotlin.Annotation {
|
||||
public constructor ann2(/*0*/ p: a.b.c.ann1 = ...)
|
||||
internal final val p: a.b.c.ann1
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
internal final annotation class ann3 : kotlin.Annotation {
|
||||
public constructor ann3(/*0*/ p: a.b.c.A.IAnn = ..., /*1*/ p2: a.b.c.A.IAnn = ...)
|
||||
internal final val p: a.b.c.A.IAnn
|
||||
internal final val p2: a.b.c.A.IAnn
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
internal final annotation class annArray : kotlin.Annotation {
|
||||
public constructor annArray(/*0*/ p: kotlin.Array<kotlin.String> = ...)
|
||||
internal final val p: kotlin.Array<kotlin.String>
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
internal final annotation class annJavaClass : kotlin.Annotation {
|
||||
public constructor annJavaClass(/*0*/ p: java.lang.Class<out kotlin.Any?> = ...)
|
||||
internal final val p: java.lang.Class<out kotlin.Any?>
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -52,6 +52,12 @@ public class JetDiagnosticsTestWithStdLibGenerated extends AbstractJetDiagnostic
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("qualifiedCallValue.kt")
|
||||
public void testQualifiedCallValue() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/qualifiedCallValue.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/diagnostics/testsWithStdLib/annotations/annotationApplicability")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
|
||||
Reference in New Issue
Block a user