[FIR] Render full declaration header in diagnostic messages

This commit is contained in:
Dmitriy Novozhilov
2022-02-15 12:09:53 +03:00
committed by teamcity
parent 2fa6425965
commit 23af5510a6
15 changed files with 47 additions and 22 deletions
@@ -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("...")
}
}
}