[AA FIR] implement FirCallableSignature to simplify search by signature

^KT-54826 Fixed
This commit is contained in:
Dmitrii Gridin
2022-11-22 11:14:46 +01:00
committed by Space Team
parent 48e2e5cc87
commit 2155a23e4e
22 changed files with 546 additions and 73 deletions
@@ -18,7 +18,6 @@ interface Fir2IrSignatureComposer {
declaration: FirDeclaration,
containingClass: ConeClassLikeLookupTag? = null,
forceTopLevelPrivate: Boolean = false,
allowLocalClasses: Boolean = false,
): IdSignature?
fun composeAccessorSignature(
@@ -85,13 +85,12 @@ class FirBasedSignatureComposer(override val mangler: FirMangler) : Fir2IrSignat
declaration: FirDeclaration,
containingClass: ConeClassLikeLookupTag?,
forceTopLevelPrivate: Boolean,
allowLocalClasses: Boolean,
): IdSignature? {
if (declaration is FirAnonymousObject || declaration is FirAnonymousFunction) return null
if (declaration is FirRegularClass && declaration.classId.isLocal) return null
if (declaration is FirCallableDeclaration) {
if (declaration.visibility == Visibilities.Local) return null
if (!allowLocalClasses && (declaration.dispatchReceiverClassLookupTagOrNull()?.classId?.isLocal == true || containingClass?.classId?.isLocal == true)) return null
if (declaration.dispatchReceiverClassLookupTagOrNull()?.classId?.isLocal == true || containingClass?.classId?.isLocal == true) return null
}
val declarationWithParentId = FirDeclarationWithParentId(declaration, containingClass?.classId)
@@ -39,11 +39,12 @@ open class FirAnnotationRenderer {
annotation.annotationTypeRef.accept(visitor)
when (annotation) {
is FirAnnotationCall -> if (annotation.calleeReference.let { it is FirResolvedNamedReference || it is FirErrorNamedReference }) {
callArgumentsRenderer.renderArgumentMapping(annotation.argumentMapping)
callArgumentsRenderer?.renderArgumentMapping(annotation.argumentMapping)
} else {
visitor.visitCall(annotation)
}
else -> callArgumentsRenderer.renderArgumentMapping(annotation.argumentMapping)
else -> callArgumentsRenderer?.renderArgumentMapping(annotation.argumentMapping)
}
if (annotation.useSiteTarget == AnnotationUseSiteTarget.FILE) {
@@ -31,18 +31,18 @@ class FirRenderer(
builder: StringBuilder = StringBuilder(),
override val annotationRenderer: FirAnnotationRenderer? = FirAnnotationRenderer(),
override val bodyRenderer: FirBodyRenderer? = FirBodyRenderer(),
override val callArgumentsRenderer: FirCallArgumentsRenderer = FirCallArgumentsRenderer(),
override val classMemberRenderer: FirClassMemberRenderer = FirClassMemberRenderer(),
override val callArgumentsRenderer: FirCallArgumentsRenderer? = FirCallArgumentsRenderer(),
override val classMemberRenderer: FirClassMemberRenderer? = FirClassMemberRenderer(),
override val contractRenderer: ConeContractRenderer? = ConeContractRenderer(),
override val declarationRenderer: FirDeclarationRenderer = FirDeclarationRenderer(),
override val declarationRenderer: FirDeclarationRenderer? = FirDeclarationRenderer(),
override val idRenderer: ConeIdRenderer = ConeIdRendererForDebugging(),
override val modifierRenderer: FirModifierRenderer = FirAllModifierRenderer(),
override val modifierRenderer: FirModifierRenderer? = FirAllModifierRenderer(),
override val packageDirectiveRenderer: FirPackageDirectiveRenderer? = null,
override val propertyAccessorRenderer: FirPropertyAccessorRenderer? = FirPropertyAccessorRenderer(),
override val resolvePhaseRenderer: FirResolvePhaseRenderer? = null,
override val typeRenderer: ConeTypeRenderer = ConeTypeRendererForDebugging(),
override val valueParameterRenderer: FirValueParameterRenderer = FirValueParameterRenderer(),
override val errorExpressionRenderer: FirErrorExpressionRenderer = FirErrorExpressionOnlyErrorRenderer(),
override val valueParameterRenderer: FirValueParameterRenderer? = FirValueParameterRenderer(),
override val errorExpressionRenderer: FirErrorExpressionRenderer? = FirErrorExpressionOnlyErrorRenderer(),
) : FirRendererComponents {
override val visitor = Visitor()
@@ -65,19 +65,19 @@ class FirRenderer(
init {
annotationRenderer?.components = this
bodyRenderer?.components = this
callArgumentsRenderer.components = this
classMemberRenderer.components = this
callArgumentsRenderer?.components = this
classMemberRenderer?.components = this
contractRenderer?.components = this
declarationRenderer.components = this
declarationRenderer?.components = this
idRenderer.builder = builder
modifierRenderer.components = this
modifierRenderer?.components = this
packageDirectiveRenderer?.components = this
propertyAccessorRenderer?.components = this
resolvePhaseRenderer?.components = this
typeRenderer.builder = builder
typeRenderer.idRenderer = idRenderer
valueParameterRenderer.components = this
errorExpressionRenderer.components = this
valueParameterRenderer?.components = this
errorExpressionRenderer?.components = this
}
fun renderElementAsString(element: FirElement): String {
@@ -200,7 +200,7 @@ class FirRenderer(
}
if (callableDeclaration is FirFunction) {
valueParameterRenderer.renderParameters(callableDeclaration.valueParameters)
valueParameterRenderer?.renderParameters(callableDeclaration.valueParameters)
}
print(": ")
callableDeclaration.returnTypeRef.accept(this)
@@ -220,8 +220,8 @@ class FirRenderer(
}
override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration) {
modifierRenderer.renderModifiers(memberDeclaration)
declarationRenderer.render(memberDeclaration)
modifierRenderer?.renderModifiers(memberDeclaration)
declarationRenderer?.render(memberDeclaration)
when (memberDeclaration) {
is FirClassLikeDeclaration -> {
if (memberDeclaration is FirRegularClass) {
@@ -247,7 +247,7 @@ class FirRenderer(
annotationRenderer?.render(regularClass)
visitMemberDeclaration(regularClass)
renderSupertypes(regularClass)
classMemberRenderer.render(regularClass)
classMemberRenderer?.render(regularClass)
}
override fun visitEnumEntry(enumEntry: FirEnumEntry) {
@@ -266,7 +266,7 @@ class FirRenderer(
annotationRenderer?.render(anonymousObject)
print("object : ")
renderSeparated(anonymousObject.superTypeRefs, visitor)
classMemberRenderer.render(anonymousObject.declarations)
classMemberRenderer?.render(anonymousObject.declarations)
}
override fun visitVariable(variable: FirVariable) {
@@ -293,7 +293,7 @@ class FirRenderer(
}
override fun visitBackingField(backingField: FirBackingField) {
modifierRenderer.renderModifiers(backingField)
modifierRenderer?.renderModifiers(backingField)
print("<explicit backing field>: ")
backingField.returnTypeRef.accept(this)
@@ -319,11 +319,11 @@ class FirRenderer(
override fun visitConstructor(constructor: FirConstructor) {
annotationRenderer?.render(constructor)
modifierRenderer.renderModifiers(constructor)
declarationRenderer.render(constructor)
modifierRenderer?.renderModifiers(constructor)
declarationRenderer?.render(constructor)
constructor.typeParameters.renderTypeParameters()
valueParameterRenderer.renderParameters(constructor.valueParameters)
valueParameterRenderer?.renderParameters(constructor.valueParameters)
print(": ")
constructor.returnTypeRef.accept(this)
val body = constructor.body
@@ -336,9 +336,9 @@ class FirRenderer(
override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor) {
annotationRenderer?.render(propertyAccessor)
modifierRenderer.renderModifiers(propertyAccessor)
declarationRenderer.render(propertyAccessor)
valueParameterRenderer.renderParameters(propertyAccessor.valueParameters)
modifierRenderer?.renderModifiers(propertyAccessor)
declarationRenderer?.render(propertyAccessor)
valueParameterRenderer?.renderParameters(propertyAccessor.valueParameters)
print(": ")
propertyAccessor.returnTypeRef.accept(this)
contractRenderer?.render(propertyAccessor)
@@ -351,7 +351,7 @@ class FirRenderer(
override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction) {
annotationRenderer?.render(anonymousFunction)
declarationRenderer.render(anonymousFunction)
declarationRenderer?.render(anonymousFunction)
print(" ")
val receiverParameter = anonymousFunction.receiverParameter
if (receiverParameter != null) {
@@ -365,7 +365,7 @@ class FirRenderer(
) {
print("(<no-parameters>)")
}
valueParameterRenderer.renderParameters(anonymousFunction.valueParameters)
valueParameterRenderer?.renderParameters(anonymousFunction.valueParameters)
print(": ")
anonymousFunction.returnTypeRef.accept(this)
print(" <inline=${anonymousFunction.inlineStatus}")
@@ -377,8 +377,8 @@ class FirRenderer(
}
override fun visitFunction(function: FirFunction) {
valueParameterRenderer.renderParameters(function.valueParameters)
declarationRenderer.render(function)
valueParameterRenderer?.renderParameters(function.valueParameters)
declarationRenderer?.render(function)
bodyRenderer?.render(function)
}
@@ -401,7 +401,7 @@ class FirRenderer(
override fun visitTypeParameter(typeParameter: FirTypeParameter) {
annotationRenderer?.render(typeParameter)
modifierRenderer.renderModifiers(typeParameter)
modifierRenderer?.renderModifiers(typeParameter)
resolvePhaseRenderer?.render(typeParameter)
typeParameter.variance.renderVariance()
print(typeParameter.name)
@@ -431,7 +431,7 @@ class FirRenderer(
}
override fun visitValueParameter(valueParameter: FirValueParameter) {
valueParameterRenderer.renderParameter(valueParameter)
valueParameterRenderer?.renderParameter(valueParameter)
}
override fun visitImport(import: FirImport) {
@@ -635,7 +635,7 @@ class FirRenderer(
}
override fun visitCall(call: FirCall) {
callArgumentsRenderer.renderArguments(call.arguments)
callArgumentsRenderer?.renderArguments(call.arguments)
}
override fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall) {
@@ -704,7 +704,7 @@ class FirRenderer(
annotationRenderer?.renderAnnotations(functionTypeRef.annotations.dropExtensionFunctionAnnotation())
print("( ")
modifierRenderer.renderModifiers(functionTypeRef)
modifierRenderer?.renderModifiers(functionTypeRef)
functionTypeRef.receiverTypeRef?.let {
it.accept(this)
print(".")
@@ -1025,7 +1025,7 @@ class FirRenderer(
}
override fun visitErrorExpression(errorExpression: FirErrorExpression) {
errorExpressionRenderer.renderErrorExpression(errorExpression)
errorExpressionRenderer?.renderErrorExpression(errorExpression)
}
override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier) {
@@ -10,18 +10,18 @@ import org.jetbrains.kotlin.fir.contracts.description.ConeContractRenderer
internal interface FirRendererComponents {
val visitor: FirRenderer.Visitor
val printer: FirPrinter
val declarationRenderer: FirDeclarationRenderer
val declarationRenderer: FirDeclarationRenderer?
val annotationRenderer: FirAnnotationRenderer?
val bodyRenderer: FirBodyRenderer?
val callArgumentsRenderer: FirCallArgumentsRenderer
val classMemberRenderer: FirClassMemberRenderer
val callArgumentsRenderer: FirCallArgumentsRenderer?
val classMemberRenderer: FirClassMemberRenderer?
val contractRenderer: ConeContractRenderer?
val idRenderer: ConeIdRenderer
val modifierRenderer: FirModifierRenderer
val modifierRenderer: FirModifierRenderer?
val packageDirectiveRenderer: FirPackageDirectiveRenderer?
val propertyAccessorRenderer: FirPropertyAccessorRenderer?
val resolvePhaseRenderer: FirResolvePhaseRenderer?
val typeRenderer: ConeTypeRenderer
val valueParameterRenderer: FirValueParameterRenderer
val errorExpressionRenderer: FirErrorExpressionRenderer
val valueParameterRenderer: FirValueParameterRenderer?
val errorExpressionRenderer: FirErrorExpressionRenderer?
}
@@ -28,9 +28,9 @@ open class FirValueParameterRenderer {
}
fun renderParameter(valueParameter: FirValueParameter) {
declarationRenderer.renderPhaseAndAttributes(valueParameter)
declarationRenderer?.renderPhaseAndAttributes(valueParameter)
annotationRenderer?.render(valueParameter)
modifierRenderer.renderModifiers(valueParameter)
modifierRenderer?.renderModifiers(valueParameter)
if (valueParameter.name != SpecialNames.NO_NAME_PROVIDED) {
printer.print(valueParameter.name.toString() + ": ")
}