From 51cc7992047b07f9ec7265d68270505695c2d132 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Mon, 21 Aug 2023 17:59:16 +0200 Subject: [PATCH] [SLC] fix flaky test --- .../base/service/symbolLightClassTestUtils.kt | 6 +- .../lightClassByPsi/typeAnnotations.kt | 3 +- .../lightClassByPsi/typeAnnotations.lib.java | 69 +++++++++++++++++++ .../kotlin/asJava/PsiClassRenderer.kt | 4 +- 4 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 compiler/testData/asJava/lightClasses/lightClassByPsi/typeAnnotations.lib.java diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/service/symbolLightClassTestUtils.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/service/symbolLightClassTestUtils.kt index 43058150fc3..846aa5278f4 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/service/symbolLightClassTestUtils.kt +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/service/symbolLightClassTestUtils.kt @@ -15,12 +15,12 @@ import org.jetbrains.kotlin.psi.KtFile import java.nio.file.Path internal inline fun withExtendedTypeRenderer(testDataFile: Path, action: () -> R): R { - val extendedTypeRendererOld = PsiClassRenderer.extendedTypeRenderer + val extendedTypeRendererOld = PsiClassRenderer.extendedTypeRenderer.get() return try { - PsiClassRenderer.extendedTypeRenderer = testDataFile.toString().endsWith("typeAnnotations.kt") + PsiClassRenderer.extendedTypeRenderer.set(testDataFile.toString().endsWith("typeAnnotations.kt")) action() } finally { - PsiClassRenderer.extendedTypeRenderer = extendedTypeRendererOld + PsiClassRenderer.extendedTypeRenderer.set(extendedTypeRendererOld) } } diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/typeAnnotations.kt b/compiler/testData/asJava/lightClasses/lightClassByPsi/typeAnnotations.kt index 207a7217c13..c4f718a6727 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/typeAnnotations.kt +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/typeAnnotations.kt @@ -22,10 +22,9 @@ class Y class klass { fun annotatedMethod(x: @A0 P<@A1 X, P<@A2 @A3 X, @A4 Y>>, y: Array<@A5 Y>): @A6 X { - return "" + return X() } val x: @A0 Int = 2 val y: List<@A0 Int>? = null } -// COMPILATION_ERRORS \ No newline at end of file diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/typeAnnotations.lib.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/typeAnnotations.lib.java new file mode 100644 index 00000000000..380b2bed58d --- /dev/null +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/typeAnnotations.lib.java @@ -0,0 +1,69 @@ +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.TYPE_USE}) +@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.VALUE_PARAMETER, kotlin.annotation.AnnotationTarget.TYPE}) +public abstract @interface A0 /* A0*/ { +} + +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.TYPE_USE}) +@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.VALUE_PARAMETER, kotlin.annotation.AnnotationTarget.TYPE}) +public abstract @interface A1 /* A1*/ { +} + +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.TYPE_USE}) +@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.VALUE_PARAMETER, kotlin.annotation.AnnotationTarget.TYPE}) +public abstract @interface A2 /* A2*/ { +} + +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.TYPE_USE}) +@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.VALUE_PARAMETER, kotlin.annotation.AnnotationTarget.TYPE}) +public abstract @interface A3 /* A3*/ { +} + +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.TYPE_USE}) +@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.VALUE_PARAMETER, kotlin.annotation.AnnotationTarget.TYPE}) +public abstract @interface A4 /* A4*/ { +} + +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.TYPE_USE}) +@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.VALUE_PARAMETER, kotlin.annotation.AnnotationTarget.TYPE}) +public abstract @interface A5 /* A5*/ { +} + +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.TYPE_USE}) +@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.VALUE_PARAMETER, kotlin.annotation.AnnotationTarget.TYPE}) +public abstract @interface A6 /* A6*/ { +} + +public abstract interface P /* P*/ { +} + +public final class X /* X*/ { + public X();// .ctor() +} + +public final class Y /* Y*/ { + public Y();// .ctor() +} + +public final class klass /* klass*/ { + @org.jetbrains.annotations.Nullable() + private final java.util.List y; + + private final int x; + + @org.jetbrains.annotations.NotNull() + public final X annotatedMethod(@org.jetbrains.annotations.NotNull() P>, @org.jetbrains.annotations.NotNull() Y[]);// annotatedMethod(P>, Y[]) + + @org.jetbrains.annotations.Nullable() + public final java.util.List getY();// getY() + + public klass();// .ctor() + + public final int getX();// getX() +} diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/asJava/PsiClassRenderer.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/asJava/PsiClassRenderer.kt index 66de22f2143..ba7cbe77088 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/asJava/PsiClassRenderer.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/asJava/PsiClassRenderer.kt @@ -38,7 +38,7 @@ class PsiClassRenderer private constructor( } companion object { - var extendedTypeRenderer = false + var extendedTypeRenderer: ThreadLocal = ThreadLocal.withInitial { false } fun renderClass( psiClass: PsiClass, @@ -85,7 +85,7 @@ class PsiClassRenderer private constructor( private fun PsiType.renderType() = StringBuffer().also { renderType(it) }.toString() private fun PsiType.renderType(sb: StringBuffer) { - if (extendedTypeRenderer && annotations.isNotEmpty()) { + if (extendedTypeRenderer.get() && annotations.isNotEmpty()) { sb.append(annotations.joinToString(" ", postfix = " ") { it.renderAnnotation() }) } when (this) {