Fix default positioning strategy handling
that causes flaky tests because the default positioning strategy was dependent on the order of the reported messages. The code led to it was introduced in an attempt to extract common PSI-independent strategy because PSI is leaking into the abstract diagnostic infrastructure. The approach is definitely problematic, but to fix it now, the leaking dependency to the psi-based module is introduced. This should be fixed in the future by introducing better abstractions. Fixes flaky tests touched in the commit. #KT-63002 fixed
This commit is contained in:
committed by
Space Team
parent
0de04f934e
commit
1ad4f19181
@@ -12,6 +12,7 @@ dependencies {
|
||||
api(project(":compiler:fir:tree"))
|
||||
|
||||
implementation(kotlinxCollectionsImmutable())
|
||||
implementation(project(":compiler:frontend.common-psi"))
|
||||
implementation(project(":compiler:psi"))
|
||||
|
||||
compileOnly(intellijCore())
|
||||
|
||||
+16
-16
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@@ -13,96 +13,96 @@ import kotlin.reflect.KClass
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
inline fun <reified P : PsiElement> warning0(
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = SourceElementPositioningStrategies.DEFAULT
|
||||
): DiagnosticFactory0DelegateProvider {
|
||||
return DiagnosticFactory0DelegateProvider(Severity.WARNING, positioningStrategy, P::class)
|
||||
}
|
||||
|
||||
inline fun <reified P : PsiElement, A> warning1(
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = SourceElementPositioningStrategies.DEFAULT
|
||||
): DiagnosticFactory1DelegateProvider<A> {
|
||||
return DiagnosticFactory1DelegateProvider(Severity.WARNING, positioningStrategy, P::class)
|
||||
}
|
||||
|
||||
inline fun <reified P : PsiElement, A, B> warning2(
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = SourceElementPositioningStrategies.DEFAULT
|
||||
): DiagnosticFactory2DelegateProvider<A, B> {
|
||||
return DiagnosticFactory2DelegateProvider(Severity.WARNING, positioningStrategy, P::class)
|
||||
}
|
||||
|
||||
inline fun <reified P : PsiElement, A, B, C> warning3(
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = SourceElementPositioningStrategies.DEFAULT
|
||||
): DiagnosticFactory3DelegateProvider<A, B, C> {
|
||||
return DiagnosticFactory3DelegateProvider(Severity.WARNING, positioningStrategy, P::class)
|
||||
}
|
||||
|
||||
inline fun <reified P : PsiElement, A, B, C, D> warning4(
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = SourceElementPositioningStrategies.DEFAULT
|
||||
): DiagnosticFactory4DelegateProvider<A, B, C, D> {
|
||||
return DiagnosticFactory4DelegateProvider(Severity.WARNING, positioningStrategy, P::class)
|
||||
}
|
||||
|
||||
inline fun <reified P : PsiElement> error0(
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = SourceElementPositioningStrategies.DEFAULT
|
||||
): DiagnosticFactory0DelegateProvider {
|
||||
return DiagnosticFactory0DelegateProvider(Severity.ERROR, positioningStrategy, P::class)
|
||||
}
|
||||
|
||||
inline fun <reified P : PsiElement, A> error1(
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = SourceElementPositioningStrategies.DEFAULT
|
||||
): DiagnosticFactory1DelegateProvider<A> {
|
||||
return DiagnosticFactory1DelegateProvider(Severity.ERROR, positioningStrategy, P::class)
|
||||
}
|
||||
|
||||
inline fun <reified P : PsiElement, A, B> error2(
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = SourceElementPositioningStrategies.DEFAULT
|
||||
): DiagnosticFactory2DelegateProvider<A, B> {
|
||||
return DiagnosticFactory2DelegateProvider(Severity.ERROR, positioningStrategy, P::class)
|
||||
}
|
||||
|
||||
inline fun <reified P : PsiElement, A, B, C> error3(
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = SourceElementPositioningStrategies.DEFAULT
|
||||
): DiagnosticFactory3DelegateProvider<A, B, C> {
|
||||
return DiagnosticFactory3DelegateProvider(Severity.ERROR, positioningStrategy, P::class)
|
||||
}
|
||||
|
||||
inline fun <reified P : PsiElement, A, B, C, D> error4(
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = SourceElementPositioningStrategies.DEFAULT
|
||||
): DiagnosticFactory4DelegateProvider<A, B, C, D> {
|
||||
return DiagnosticFactory4DelegateProvider(Severity.ERROR, positioningStrategy, P::class)
|
||||
}
|
||||
|
||||
inline fun <reified P : PsiElement> deprecationError0(
|
||||
featureForError: LanguageFeature,
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = SourceElementPositioningStrategies.DEFAULT
|
||||
): DeprecationDiagnosticFactory0DelegateProvider {
|
||||
return DeprecationDiagnosticFactory0DelegateProvider(featureForError, positioningStrategy, P::class)
|
||||
}
|
||||
|
||||
inline fun <reified P : PsiElement, A> deprecationError1(
|
||||
featureForError: LanguageFeature,
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = SourceElementPositioningStrategies.DEFAULT
|
||||
): DeprecationDiagnosticFactory1DelegateProvider<A> {
|
||||
return DeprecationDiagnosticFactory1DelegateProvider(featureForError, positioningStrategy, P::class)
|
||||
}
|
||||
|
||||
inline fun <reified P : PsiElement, A, B> deprecationError2(
|
||||
featureForError: LanguageFeature,
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = SourceElementPositioningStrategies.DEFAULT
|
||||
): DeprecationDiagnosticFactory2DelegateProvider<A, B> {
|
||||
return DeprecationDiagnosticFactory2DelegateProvider(featureForError, positioningStrategy, P::class)
|
||||
}
|
||||
|
||||
inline fun <reified P : PsiElement, A, B, C> deprecationError3(
|
||||
featureForError: LanguageFeature,
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = SourceElementPositioningStrategies.DEFAULT
|
||||
): DeprecationDiagnosticFactory3DelegateProvider<A, B, C> {
|
||||
return DeprecationDiagnosticFactory3DelegateProvider(featureForError, positioningStrategy, P::class)
|
||||
}
|
||||
|
||||
inline fun <reified P : PsiElement, A, B, C, D> deprecationError4(
|
||||
featureForError: LanguageFeature,
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT
|
||||
positioningStrategy: AbstractSourceElementPositioningStrategy = SourceElementPositioningStrategies.DEFAULT
|
||||
): DeprecationDiagnosticFactory4DelegateProvider<A, B, C, D> {
|
||||
return DeprecationDiagnosticFactory4DelegateProvider(featureForError, positioningStrategy, P::class)
|
||||
}
|
||||
+1
-3
@@ -9,9 +9,7 @@ object SourceElementPositioningStrategies {
|
||||
val DEFAULT = SourceElementPositioningStrategy(
|
||||
LightTreePositioningStrategies.DEFAULT,
|
||||
PositioningStrategies.DEFAULT
|
||||
).also {
|
||||
AbstractSourceElementPositioningStrategy.setDefault(it)
|
||||
}
|
||||
)
|
||||
|
||||
val VAL_OR_VAR_NODE = SourceElementPositioningStrategy(
|
||||
LightTreePositioningStrategies.VAL_OR_VAR_NODE,
|
||||
|
||||
+1
-12
@@ -12,15 +12,4 @@ abstract class AbstractSourceElementPositioningStrategy {
|
||||
abstract fun markDiagnostic(diagnostic: KtDiagnostic): List<TextRange>
|
||||
|
||||
abstract fun isValid(element: AbstractKtSourceElement): Boolean
|
||||
|
||||
companion object {
|
||||
|
||||
@JvmStatic
|
||||
fun setDefault(default: AbstractSourceElementPositioningStrategy) {
|
||||
DEFAULT = default
|
||||
}
|
||||
|
||||
var DEFAULT: AbstractSourceElementPositioningStrategy = OffsetsOnlyPositioningStrategy()
|
||||
private set
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
// ISSUE: KT-62447, KT-62628
|
||||
// FIR_DUMP
|
||||
|
||||
fun main() {
|
||||
val x: <!SYNTAX, WRONG_ANNOTATION_TARGET!>@SinceKotlin("2.0")<!><!SYNTAX!><!>
|
||||
}
|
||||
|
||||
@Target(AnnotationTarget.TYPE)
|
||||
annotation class Anno
|
||||
|
||||
val prop: @Anno <!UNRESOLVED_REFERENCE!>Foo<!>? = null
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
FILE: AnnotatedErrorTypeRef.fir.kt
|
||||
FILE: AnnotatedErrorTypeRef.kt
|
||||
public final fun main(): R|kotlin/Unit| {
|
||||
lval x: @R|kotlin/SinceKotlin|(version = String(2.0)) <ERROR TYPE REF: Incomplete code>
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// ISSUE: KT-62447, KT-62628
|
||||
// FIR_DUMP
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
// DIAGNOSTICS: -DEBUG_INFO_MISSING_UNRESOLVED
|
||||
interface I
|
||||
fun <E> foo() where E: I {}
|
||||
fun <E> fooE1() where <!SYNTAX!><!>: I {}
|
||||
fun <E> fooE2() where E: <!SYNTAX, SYNTAX!><!>{}
|
||||
fun <E> fooE3() where <!SYNTAX!><!>{}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// DIAGNOSTICS: -DEBUG_INFO_MISSING_UNRESOLVED
|
||||
interface I
|
||||
fun <E> foo() where E: I {}
|
||||
|
||||
+2
-2
@@ -449,7 +449,7 @@ private class DebugDiagnosticConsumer(
|
||||
val factory = KtDiagnosticFactory0(
|
||||
name = debugFactory.name,
|
||||
severity = debugFactory.severity,
|
||||
defaultPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT,
|
||||
defaultPositioningStrategy = SourceElementPositioningStrategies.DEFAULT,
|
||||
psiType = PsiElement::class
|
||||
)
|
||||
|
||||
@@ -490,7 +490,7 @@ private class DebugDiagnosticConsumer(
|
||||
val factory = KtDiagnosticFactory1<String>(
|
||||
name = debugFactory.name,
|
||||
severity = debugFactory.severity,
|
||||
defaultPositioningStrategy = AbstractSourceElementPositioningStrategy.DEFAULT,
|
||||
defaultPositioningStrategy = SourceElementPositioningStrategies.DEFAULT,
|
||||
psiType = PsiElement::class
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user