From 3566ea804261f7a1cafbea4fbace142fc3364875 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Mon, 18 Mar 2024 15:10:42 -0700 Subject: [PATCH] LC: regression test for findAttributeValue for defalut value in Java ^KT-66692 GitOrigin-RevId: 8721f49f4e6b1dff39001b338e0af6caa95a1ced --- .../kotlin/LightClassBehaviorTestBase.kt | 47 ++++++++++++++++++- .../uast/test/FirLightClassBehaviorTest.kt | 8 +++- .../comparison/FE1LightClassBehaviorTest.kt | 8 +++- 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/plugins/kotlin/uast/uast-kotlin-base/tests/test/org/jetbrains/uast/test/common/kotlin/LightClassBehaviorTestBase.kt b/plugins/kotlin/uast/uast-kotlin-base/tests/test/org/jetbrains/uast/test/common/kotlin/LightClassBehaviorTestBase.kt index 4b2ea0bd8b5b..adc410d41910 100644 --- a/plugins/kotlin/uast/uast-kotlin-base/tests/test/org/jetbrains/uast/test/common/kotlin/LightClassBehaviorTestBase.kt +++ b/plugins/kotlin/uast/uast-kotlin-base/tests/test/org/jetbrains/uast/test/common/kotlin/LightClassBehaviorTestBase.kt @@ -594,7 +594,7 @@ interface LightClassBehaviorTestBase : UastPluginSelection { ) } - fun checkDefaultValueOfAnnotation(myFixture: JavaCodeInsightTestFixture) { + fun checkDefaultValueOfAnnotation_Kotlin(myFixture: JavaCodeInsightTestFixture) { myFixture.configureByText( "main.kt", """ annotation class IntDef( @@ -629,6 +629,51 @@ interface LightClassBehaviorTestBase : UastPluginSelection { TestCase.assertEquals("false", flagValue?.toString()) } + fun checkDefaultValueOfAnnotation_Java(myFixture: JavaCodeInsightTestFixture) { + myFixture.addClass( + """ + import java.lang.annotation.Annotation; + import java.lang.annotation.ElementType; + import java.lang.annotation.Target; + + @Target({ElementType.METHOD, ElementType.CONSTRUCTOR}) + public @interface MyRestrictedApi { + String explanation(); + Class[] allowlistAnnotations() default {}; + boolean allowedInTestonlyTargets() default false; + } + """.trimIndent() + ) + myFixture.configureByText( + "main.kt", """ + @Target(AnnotationTarget.FUNCTION) annotation class KAllowlist + + class Test { + @MyRestrictedApi( + explanation = "umbrella", + allowlistAnnotations = [KAllowlist::class], + ) + fun foo() {} + } + """.trimIndent() + ) + + val uFile = myFixture.file.toUElement()!! + val foo = uFile.findElementByTextFromPsi("fun foo", strict = false) + .orFail("can't convert to UMethod") + val lc = foo.uAnnotations.single().javaPsi!! + val annos = (lc.findAttributeValue("allowlistAnnotations") as? PsiArrayInitializerMemberValue)?.initializers + TestCase.assertEquals( + "[KAllowlist]", + annos?.joinToString(separator = ", ", prefix = "[", postfix = "]") { annoValue -> + (annoValue as? PsiClassObjectAccessExpression)?.type?.canonicalText ?: annoValue.text + } + ) + + val flagValue = (lc.findAttributeValue("allowedInTestonlyTargets") as? PsiLiteralExpression)?.value + TestCase.assertEquals("false", flagValue?.toString()) + } + fun checkAnnotationParameterReference(myFixture: JavaCodeInsightTestFixture) { PsiReferenceContributor.EP_NAME.point.registerExtension( PsiReferenceContributorEP().apply { diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/test/org/jetbrains/fir/uast/test/FirLightClassBehaviorTest.kt b/plugins/kotlin/uast/uast-kotlin-fir/tests/test/org/jetbrains/fir/uast/test/FirLightClassBehaviorTest.kt index dfbc9220cc6b..6924094576a9 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/test/org/jetbrains/fir/uast/test/FirLightClassBehaviorTest.kt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/test/org/jetbrains/fir/uast/test/FirLightClassBehaviorTest.kt @@ -77,8 +77,12 @@ class FirLightClassBehaviorTest : KotlinLightCodeInsightFixtureTestCase(), Light checkUpperBoundForRecursiveTypeParameter(myFixture) } - fun testDefaultValueOfAnnotation() { - checkDefaultValueOfAnnotation(myFixture) + fun testDefaultValueOfAnnotation_Kotlin() { + checkDefaultValueOfAnnotation_Kotlin(myFixture) + } + + fun testDefaultValueOfAnnotation_Java() { + checkDefaultValueOfAnnotation_Java(myFixture) } fun testAnnotationParameterReference() { diff --git a/plugins/kotlin/uast/uast-kotlin/tests/test/org/jetbrains/uast/test/kotlin/comparison/FE1LightClassBehaviorTest.kt b/plugins/kotlin/uast/uast-kotlin/tests/test/org/jetbrains/uast/test/kotlin/comparison/FE1LightClassBehaviorTest.kt index 1d9ad3d99bd9..6bbd366d61ad 100644 --- a/plugins/kotlin/uast/uast-kotlin/tests/test/org/jetbrains/uast/test/kotlin/comparison/FE1LightClassBehaviorTest.kt +++ b/plugins/kotlin/uast/uast-kotlin/tests/test/org/jetbrains/uast/test/kotlin/comparison/FE1LightClassBehaviorTest.kt @@ -81,8 +81,12 @@ class FE1LightClassBehaviorTest : KotlinLightCodeInsightFixtureTestCase(), Light checkUpperBoundForRecursiveTypeParameter(myFixture) } - fun testDefaultValueOfAnnotation() { - checkDefaultValueOfAnnotation(myFixture) + fun testDefaultValueOfAnnotation_Kotlin() { + checkDefaultValueOfAnnotation_Kotlin(myFixture) + } + + fun testDefaultValueOfAnnotation_Java() { + checkDefaultValueOfAnnotation_Java(myFixture) } fun testAnnotationParameterReference() {