[FIR] Improve annotation use-site target rendring for diagnostics
#KT-62816 Fixed
This commit is contained in:
committed by
Space Team
parent
8f3f72d9c9
commit
5d3738c804
+2
@@ -46,7 +46,9 @@ object FirDiagnosticRenderers {
|
|||||||
modifierRenderer = FirPartialModifierRenderer(),
|
modifierRenderer = FirPartialModifierRenderer(),
|
||||||
valueParameterRenderer = FirValueParameterRendererNoDefaultValue(),
|
valueParameterRenderer = FirValueParameterRendererNoDefaultValue(),
|
||||||
declarationRenderer = FirDeclarationRenderer("local "),
|
declarationRenderer = FirDeclarationRenderer("local "),
|
||||||
|
annotationRenderer = FirAnnotationRendererForReadability(),
|
||||||
lineBreakAfterContextReceivers = false,
|
lineBreakAfterContextReceivers = false,
|
||||||
|
renderFieldAnnotationSeparately = false,
|
||||||
).renderElementAsString(symbol.fir, trim = true)
|
).renderElementAsString(symbol.fir, trim = true)
|
||||||
is FirTypeParameterSymbol -> symbol.name.asString()
|
is FirTypeParameterSymbol -> symbol.name.asString()
|
||||||
else -> "???"
|
else -> "???"
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ open class FirAnnotationRenderer {
|
|||||||
internal fun renderAnnotation(annotation: FirAnnotation, explicitAnnotationUseSiteTarget: AnnotationUseSiteTarget? = null) {
|
internal fun renderAnnotation(annotation: FirAnnotation, explicitAnnotationUseSiteTarget: AnnotationUseSiteTarget? = null) {
|
||||||
printer.print("@")
|
printer.print("@")
|
||||||
(explicitAnnotationUseSiteTarget ?: annotation.useSiteTarget)?.let {
|
(explicitAnnotationUseSiteTarget ?: annotation.useSiteTarget)?.let {
|
||||||
printer.print(it.name)
|
renderUseSiteTarget(it)
|
||||||
printer.print(":")
|
printer.print(":")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,4 +56,14 @@ open class FirAnnotationRenderer {
|
|||||||
printer.print(" ")
|
printer.print(" ")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open protected fun renderUseSiteTarget(it: AnnotationUseSiteTarget) {
|
||||||
|
printer.print(it.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class FirAnnotationRendererForReadability : FirAnnotationRenderer() {
|
||||||
|
override fun renderUseSiteTarget(it: AnnotationUseSiteTarget) {
|
||||||
|
printer.print(it.renderName)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -47,6 +47,7 @@ class FirRenderer(
|
|||||||
override val resolvedNamedReferenceRenderer: FirResolvedNamedReferenceRenderer = FirResolvedNamedReferenceRendererWithLabel(),
|
override val resolvedNamedReferenceRenderer: FirResolvedNamedReferenceRenderer = FirResolvedNamedReferenceRendererWithLabel(),
|
||||||
override val resolvedQualifierRenderer: FirResolvedQualifierRenderer = FirResolvedQualifierRendererWithLabel(),
|
override val resolvedQualifierRenderer: FirResolvedQualifierRenderer = FirResolvedQualifierRendererWithLabel(),
|
||||||
private val lineBreakAfterContextReceivers: Boolean = true,
|
private val lineBreakAfterContextReceivers: Boolean = true,
|
||||||
|
private val renderFieldAnnotationSeparately: Boolean = true,
|
||||||
override val getClassCallRenderer: FirGetClassCallRenderer = FirGetClassCallRendererForDebugging(),
|
override val getClassCallRenderer: FirGetClassCallRenderer = FirGetClassCallRendererForDebugging(),
|
||||||
) : FirRendererComponents {
|
) : FirRendererComponents {
|
||||||
|
|
||||||
@@ -258,7 +259,9 @@ class FirRenderer(
|
|||||||
if (callableDeclaration is FirProperty) {
|
if (callableDeclaration is FirProperty) {
|
||||||
val backingField = callableDeclaration.backingField
|
val backingField = callableDeclaration.backingField
|
||||||
if (backingField?.annotations?.isNotEmpty() == true) {
|
if (backingField?.annotations?.isNotEmpty() == true) {
|
||||||
print("field:")
|
if (renderFieldAnnotationSeparately) {
|
||||||
|
print("field:")
|
||||||
|
}
|
||||||
annotationRenderer?.render(backingField)
|
annotationRenderer?.render(backingField)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
/deprecatedError.kt:10:13: error: using 'C' is an error. alas
|
/deprecatedError.kt:14:13: error: using 'C' is an error. alas
|
||||||
fun test(c: C) {
|
fun test(c: C) {
|
||||||
^
|
^
|
||||||
/deprecatedError.kt:11:5: error: using 'foo(String): Unit' is an error. alas
|
/deprecatedError.kt:15:5: error: using 'foo(String): Unit' is an error. alas
|
||||||
foo("")
|
foo("")
|
||||||
^
|
^
|
||||||
/deprecatedError.kt:12:5: error: using 'C' is an error. alas
|
/deprecatedError.kt:16:5: error: using 'C' is an error. alas
|
||||||
C()
|
C()
|
||||||
^
|
^
|
||||||
|
/deprecatedError.kt:17:5: error: using 'bar: Int' is an error. alas
|
||||||
|
bar
|
||||||
|
^
|
||||||
|
|
||||||
|
|||||||
+5
-3
@@ -1,5 +1,7 @@
|
|||||||
/deprecatedError.kt:(237,238): error: '@Deprecated(...) class C : Any' is deprecated. alas.
|
/deprecatedError.kt:(319,320): error: '@Deprecated(...) class C : Any' is deprecated. alas.
|
||||||
|
|
||||||
/deprecatedError.kt:(246,249): error: '@Deprecated(...) fun foo(s: @Foo() String): Unit' is deprecated. alas.
|
/deprecatedError.kt:(328,331): error: '@Deprecated(...) fun foo(s: @Foo() String): Unit' is deprecated. alas.
|
||||||
|
|
||||||
/deprecatedError.kt:(258,259): error: 'constructor(): C' is deprecated. alas.
|
/deprecatedError.kt:(340,341): error: 'constructor(): C' is deprecated. alas.
|
||||||
|
|
||||||
|
/deprecatedError.kt:(348,351): error: '@Deprecated(...) @field:Foo() val bar: Int' is deprecated. alas.
|
||||||
|
|||||||
@@ -7,10 +7,15 @@ fun foo(s: @Foo String) {}
|
|||||||
@Deprecated("alas", level = DeprecationLevel.ERROR)
|
@Deprecated("alas", level = DeprecationLevel.ERROR)
|
||||||
class C
|
class C
|
||||||
|
|
||||||
|
@field:Foo
|
||||||
|
@Deprecated("alas", level = DeprecationLevel.ERROR)
|
||||||
|
val bar: Int = 42
|
||||||
|
|
||||||
fun test(c: <!DEPRECATION_ERROR!>C<!>) {
|
fun test(c: <!DEPRECATION_ERROR!>C<!>) {
|
||||||
<!DEPRECATION_ERROR!>foo<!>("")
|
<!DEPRECATION_ERROR!>foo<!>("")
|
||||||
<!DEPRECATION_ERROR!>C<!>()
|
<!DEPRECATION_ERROR!>C<!>()
|
||||||
|
<!DEPRECATION_ERROR!>bar<!>
|
||||||
}
|
}
|
||||||
|
|
||||||
@Target(AnnotationTarget.TYPE)
|
@Target(AnnotationTarget.TYPE, AnnotationTarget.FIELD)
|
||||||
annotation class Foo
|
annotation class Foo
|
||||||
Reference in New Issue
Block a user