[FIR] Render full declaration header in diagnostic messages
This commit is contained in:
committed by
teamcity
parent
2fa6425965
commit
23af5510a6
+3
-2
@@ -23,10 +23,11 @@ import org.jetbrains.kotlin.fir.types.render
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
|
||||
object FirDiagnosticRenderers {
|
||||
@OptIn(SymbolInternals::class)
|
||||
val SYMBOL = Renderer { symbol: FirBasedSymbol<*> ->
|
||||
when (symbol) {
|
||||
is FirClassLikeSymbol<*> -> symbol.classId.asString()
|
||||
is FirCallableSymbol<*> -> symbol.callableId.toString()
|
||||
is FirClassLikeSymbol<*>,
|
||||
is FirCallableSymbol<*> -> symbol.fir.render(FirRenderer.RenderMode.DeclarationHeader)
|
||||
is FirTypeParameterSymbol -> symbol.name.asString()
|
||||
else -> "???"
|
||||
}
|
||||
|
||||
@@ -64,6 +64,8 @@ open class FirRenderer(builder: StringBuilder, protected val mode: RenderMode =
|
||||
val renderDeclarationAttributes: Boolean = false,
|
||||
val renderDeclarationOrigin: Boolean = false,
|
||||
val renderPackageDirective: Boolean = false,
|
||||
val renderNestedDeclarations: Boolean = true,
|
||||
val renderDefaultParameterValues: Boolean = true,
|
||||
) {
|
||||
companion object {
|
||||
val Normal = RenderMode(
|
||||
@@ -109,6 +111,21 @@ open class FirRenderer(builder: StringBuilder, protected val mode: RenderMode =
|
||||
renderPropertyAccessors = false,
|
||||
)
|
||||
|
||||
val DeclarationHeader = RenderMode(
|
||||
renderLambdaBodies = false,
|
||||
renderCallArguments = false,
|
||||
renderCallableFqNames = false,
|
||||
renderDeclarationResolvePhase = false,
|
||||
renderAnnotation = true,
|
||||
renderBodies = false,
|
||||
renderPropertyAccessors = false,
|
||||
renderDeclarationAttributes = false,
|
||||
renderDeclarationOrigin = false,
|
||||
renderPackageDirective = false,
|
||||
renderNestedDeclarations = false,
|
||||
renderDefaultParameterValues = false,
|
||||
)
|
||||
|
||||
val WithDeclarationAttributes = RenderMode(
|
||||
renderLambdaBodies = true,
|
||||
renderCallArguments = true,
|
||||
@@ -477,7 +494,9 @@ open class FirRenderer(builder: StringBuilder, protected val mode: RenderMode =
|
||||
}
|
||||
|
||||
protected open fun renderClassDeclarations(regularClass: FirRegularClass) {
|
||||
regularClass.declarations.renderDeclarations()
|
||||
if (mode.renderNestedDeclarations) {
|
||||
regularClass.declarations.renderDeclarations()
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitEnumEntry(enumEntry: FirEnumEntry) {
|
||||
@@ -584,7 +603,7 @@ open class FirRenderer(builder: StringBuilder, protected val mode: RenderMode =
|
||||
constructor.returnTypeRef.accept(this)
|
||||
val body = constructor.body
|
||||
val delegatedConstructor = constructor.delegatedConstructor
|
||||
if (body == null) {
|
||||
if (body == null && mode.renderBodies) {
|
||||
if (delegatedConstructor != null) {
|
||||
renderInBraces {
|
||||
delegatedConstructor.accept(this)
|
||||
@@ -740,7 +759,11 @@ open class FirRenderer(builder: StringBuilder, protected val mode: RenderMode =
|
||||
valueParameter.returnTypeRef.accept(this)
|
||||
valueParameter.defaultValue?.let {
|
||||
print(" = ")
|
||||
it.accept(this)
|
||||
if (mode.renderDefaultParameterValues) {
|
||||
it.accept(this)
|
||||
} else {
|
||||
print("...")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,9 +11,10 @@ compiler or generated code. Use it at your own risk!
|
||||
warning: ATTENTION!
|
||||
This build uses in-dev FIR:
|
||||
-Xuse-fir
|
||||
compiler/testData/cli/jvm/firMultiplatformCompilationWithError/jvm.kt:1:18: error: actual class 'A' has no corresponding members for expected class members:
|
||||
compiler/testData/cli/jvm/firMultiplatformCompilationWithError/jvm.kt:1:18: error: actual class 'public abstract actual interface A : R|kotlin/Any|' has no corresponding members for expected class members:
|
||||
|
||||
public abstract expect fun foo(): R|kotlin/Unit|
|
||||
|
||||
/A.foo
|
||||
|
||||
actual interface A
|
||||
^
|
||||
|
||||
Reference in New Issue
Block a user