From f892714beaed7799a48a5d32ef849fa8da0477aa Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 17 Oct 2018 20:11:05 +0300 Subject: [PATCH] Test for stubs in annotations (KT-23738) --- idea/testData/stubs/AnnotationValues.expected | 225 ++++++++++++++++++ idea/testData/stubs/AnnotationValues.kt | 120 ++++++++++ .../idea/stubs/StubBuilderTestGenerated.java | 5 + 3 files changed, 350 insertions(+) create mode 100644 idea/testData/stubs/AnnotationValues.expected create mode 100644 idea/testData/stubs/AnnotationValues.kt diff --git a/idea/testData/stubs/AnnotationValues.expected b/idea/testData/stubs/AnnotationValues.expected new file mode 100644 index 00000000000..f250b6fe867 --- /dev/null +++ b/idea/testData/stubs/AnnotationValues.expected @@ -0,0 +1,225 @@ +PsiJetFileStubImpl[package=test] + PACKAGE_DIRECTIVE + REFERENCE_EXPRESSION[referencedName=test] + IMPORT_LIST + IMPORT_DIRECTIVE[importedFqName=test.E.E1, isAllUnder=false, isValid=true] + DOT_QUALIFIED_EXPRESSION + DOT_QUALIFIED_EXPRESSION + REFERENCE_EXPRESSION[referencedName=test] + REFERENCE_EXPRESSION[referencedName=E] + REFERENCE_EXPRESSION[referencedName=E1] + IMPORT_DIRECTIVE[importedFqName=kotlin.reflect.KClass, isAllUnder=false, isValid=true] + DOT_QUALIFIED_EXPRESSION + DOT_QUALIFIED_EXPRESSION + REFERENCE_EXPRESSION[referencedName=kotlin] + REFERENCE_EXPRESSION[referencedName=reflect] + REFERENCE_EXPRESSION[referencedName=KClass] + CLASS[fqName=test.Simple, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=Simple, superNames=[]] + MODIFIER_LIST[annotation] + PRIMARY_CONSTRUCTOR + VALUE_PARAMETER_LIST + VALUE_PARAMETER[fqName=test.Simple.i, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=i] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=Int] + VALUE_PARAMETER[fqName=test.Simple.l, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=l] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=Long] + VALUE_PARAMETER[fqName=test.Simple.b, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=b] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=Byte] + VALUE_PARAMETER[fqName=test.Simple.d, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=d] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=Double] + VALUE_PARAMETER[fqName=test.Simple.f, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=f] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=Float] + VALUE_PARAMETER[fqName=test.Simple.c, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=c] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=Char] + VALUE_PARAMETER[fqName=test.Simple.b1, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=b1] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=Boolean] + VALUE_PARAMETER[fqName=test.Simple.b2, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=b2] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=Boolean] + CLASS[fqName=test.WithSimple, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=WithSimple, superNames=[]] + MODIFIER_LIST[] + ANNOTATION_ENTRY[hasValueArguments=true, shortName=Simple] + CONSTRUCTOR_CALLEE + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=Simple] + CLASS[fqName=test.StringLiteral, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=StringLiteral, superNames=[]] + MODIFIER_LIST[annotation] + PRIMARY_CONSTRUCTOR + VALUE_PARAMETER_LIST + VALUE_PARAMETER[fqName=test.StringLiteral.s1, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=s1] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=String] + VALUE_PARAMETER[fqName=test.StringLiteral.s2, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=s2] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=String] + VALUE_PARAMETER[fqName=test.StringLiteral.s3, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=s3] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=String] + PROPERTY[fqName=test.CONSTANT, hasDelegate=false, hasDelegateExpression=false, hasInitializer=true, hasReturnTypeRef=false, isExtension=false, isTopLevel=true, isVar=false, name=CONSTANT] + MODIFIER_LIST[const] + CLASS[fqName=test.WithStringLiteral, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=WithStringLiteral, superNames=[]] + MODIFIER_LIST[] + ANNOTATION_ENTRY[hasValueArguments=true, shortName=StringLiteral] + CONSTRUCTOR_CALLEE + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=StringLiteral] + CLASS[fqName=test.E, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=E, superNames=[]] + MODIFIER_LIST[enum] + CLASS_BODY + ENUM_ENTRY[fqName=test.E.E1, isEnumEntry=true, isInterface=false, isLocal=false, isTopLevel=false, name=E1, superNames=[]] + ENUM_ENTRY[fqName=test.E.E2, isEnumEntry=true, isInterface=false, isLocal=false, isTopLevel=false, name=E2, superNames=[]] + CLASS[fqName=test.EnumLiteral, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=EnumLiteral, superNames=[]] + MODIFIER_LIST[annotation] + PRIMARY_CONSTRUCTOR + VALUE_PARAMETER_LIST + VALUE_PARAMETER[fqName=test.EnumLiteral.e1, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=e1] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=E] + VALUE_PARAMETER[fqName=test.EnumLiteral.e2, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=e2] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=E] + VALUE_PARAMETER[fqName=test.EnumLiteral.e3, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=e3] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=E] + CLASS[fqName=test.WithEnumLiteral, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=WithEnumLiteral, superNames=[]] + MODIFIER_LIST[] + ANNOTATION_ENTRY[hasValueArguments=true, shortName=EnumLiteral] + CONSTRUCTOR_CALLEE + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=EnumLiteral] + CLASS[fqName=test.VarArg, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=VarArg, superNames=[]] + MODIFIER_LIST[annotation] + PRIMARY_CONSTRUCTOR + VALUE_PARAMETER_LIST + VALUE_PARAMETER[fqName=test.VarArg.v, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=v] + MODIFIER_LIST[vararg] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=Int] + CLASS[fqName=test.WithVarArg, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=WithVarArg, superNames=[]] + MODIFIER_LIST[] + ANNOTATION_ENTRY[hasValueArguments=true, shortName=VarArg] + CONSTRUCTOR_CALLEE + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=VarArg] + CLASS[fqName=test.Arrays, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=Arrays, superNames=[]] + MODIFIER_LIST[annotation] + PRIMARY_CONSTRUCTOR + VALUE_PARAMETER_LIST + VALUE_PARAMETER[fqName=test.Arrays.ia, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=ia] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=IntArray] + VALUE_PARAMETER[fqName=test.Arrays.la, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=la] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=LongArray] + VALUE_PARAMETER[fqName=test.Arrays.fa, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=fa] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=FloatArray] + VALUE_PARAMETER[fqName=test.Arrays.da, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=da] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=DoubleArray] + VALUE_PARAMETER[fqName=test.Arrays.ca, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=ca] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=CharArray] + VALUE_PARAMETER[fqName=test.Arrays.ba, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=ba] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=BooleanArray] + CLASS[fqName=test.WithArrays, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=WithArrays, superNames=[]] + MODIFIER_LIST[] + ANNOTATION_ENTRY[hasValueArguments=true, shortName=Arrays] + CONSTRUCTOR_CALLEE + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=Arrays] + CLASS[fqName=test.ClassLiteral, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=ClassLiteral, superNames=[]] + MODIFIER_LIST[annotation] + PRIMARY_CONSTRUCTOR + VALUE_PARAMETER_LIST + VALUE_PARAMETER[fqName=test.ClassLiteral.c1, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=c1] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=KClass] + TYPE_ARGUMENT_LIST + TYPE_PROJECTION[projectionKind=STAR] + VALUE_PARAMETER[fqName=test.ClassLiteral.c2, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=c2] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=KClass] + TYPE_ARGUMENT_LIST + TYPE_PROJECTION[projectionKind=STAR] + VALUE_PARAMETER[fqName=test.ClassLiteral.c3, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=c3] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=KClass] + TYPE_ARGUMENT_LIST + TYPE_PROJECTION[projectionKind=STAR] + CLASS[fqName=test.WithClassLiteral, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=WithClassLiteral, superNames=[]] + MODIFIER_LIST[] + ANNOTATION_ENTRY[hasValueArguments=true, shortName=ClassLiteral] + CONSTRUCTOR_CALLEE + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=ClassLiteral] + TYPE_PARAMETER_LIST + TYPE_PARAMETER[fqName=null, isInVariance=false, isOutVariance=false, name=T] + CLASS[fqName=test.Nested, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=Nested, superNames=[]] + MODIFIER_LIST[annotation] + PRIMARY_CONSTRUCTOR + VALUE_PARAMETER_LIST + VALUE_PARAMETER[fqName=test.Nested.i, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=i] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=Int] + VALUE_PARAMETER[fqName=test.Nested.s, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=s] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=String] + CLASS[fqName=test.Outer, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=Outer, superNames=[]] + MODIFIER_LIST[annotation] + PRIMARY_CONSTRUCTOR + VALUE_PARAMETER_LIST + VALUE_PARAMETER[fqName=test.Outer.some, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=some] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=String] + VALUE_PARAMETER[fqName=test.Outer.nested, hasDefaultValue=false, hasValOrVar=true, isMutable=false, name=nested] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=Nested] + CLASS[fqName=test.WithNested, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=WithNested, superNames=[]] + MODIFIER_LIST[] + ANNOTATION_ENTRY[hasValueArguments=true, shortName=Outer] + CONSTRUCTOR_CALLEE + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=Outer] diff --git a/idea/testData/stubs/AnnotationValues.kt b/idea/testData/stubs/AnnotationValues.kt new file mode 100644 index 00000000000..5f40ea3a350 --- /dev/null +++ b/idea/testData/stubs/AnnotationValues.kt @@ -0,0 +1,120 @@ +package test + +import test.E.E1 +import kotlin.reflect.KClass + +annotation class Simple( + val i: Int, + val l: Long, + val b: Byte, + + val d: Double, + val f: Float, + + val c: Char, + + val b1: Boolean, + val b2: Boolean +) + +@Simple( + 12, + 12L, + 12, + + 3.3, + f = 3.3F, + + c = 'a', + + b1 = true, + b2 = false +) +class WithSimple + +// =============================== + +annotation class StringLiteral( + val s1: String, + val s2: String, + val s3: String +) + +const val CONSTANT = 12 + +@StringLiteral("some", "", "H$CONSTANT") +class WithStringLiteral + +// =============================== + +enum class E { + E1, E2 +} +annotation class EnumLiteral( + val e1: E, + val e2: E, + val e3: E +) + +@EnumLiteral(E1, E.E2, e3 = test.E.E2) +class WithEnumLiteral + +// =============================== + +annotation class VarArg( + vararg val v: Int +) + +@VarArg(1, 2, 3) +class WithVarArg + +// =============================== + +annotation class Arrays( + val ia: IntArray, + val la: LongArray, + val fa: FloatArray, + val da: DoubleArray, + val ca: CharArray, + val ba: BooleanArray +) + +@Arrays( + [1, 2, 3], + [1L], + [], + [2.2], + ['a'], + [true, false] +) +class WithArrays + +// =============================== + +annotation class ClassLiteral( + val c1: KClass<*>, + val c2: KClass<*>, + val c3: KClass<*> +) + +@ClassLiteral( + WithClassLiteral::class, + String::class, + T::class // Error intentionally +) +class WithClassLiteral + +// =============================== + +annotation class Nested( + val i: Int, + val s: String +) + +annotation class Outer( + val some: String, + val nested: Nested +) + +@Outer("value", nested = Nested(12, "nested value")) +class WithNested \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/stubs/StubBuilderTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/stubs/StubBuilderTestGenerated.java index fd8165a55b4..04cdcbb313d 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/stubs/StubBuilderTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/stubs/StubBuilderTestGenerated.java @@ -49,6 +49,11 @@ public class StubBuilderTestGenerated extends AbstractStubBuilderTest { runTest("idea/testData/stubs/AnnotationOnLocalFunction.kt"); } + @TestMetadata("AnnotationValues.kt") + public void testAnnotationValues() throws Exception { + runTest("idea/testData/stubs/AnnotationValues.kt"); + } + @TestMetadata("AnnotationWithValue.kt") public void testAnnotationWithValue() throws Exception { runTest("idea/testData/stubs/AnnotationWithValue.kt");