From 59416f447e8d863319f8425f4514f06a3123caa4 Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Sat, 20 Feb 2021 16:34:43 +0300 Subject: [PATCH] [VISUALIZER] Change rendering of equals call --- .../kotlin/compiler/visualizer/FirVisualizer.kt | 4 ++-- .../kotlin/compiler/visualizer/PsiVisualizer.kt | 6 +++++- ...nctionWithBothOldAndNewSyntaxContractDescription.kt | 2 +- .../testData/rawBuilder/declarations/enums2.kt | 2 +- .../testData/rawBuilder/expressions/annotated.kt | 4 ++-- .../visualizer/testData/rawBuilder/expressions/for.kt | 2 +- .../testData/rawBuilder/expressions/lambda.kt | 4 ++-- .../testData/rawBuilder/expressions/unary.kt | 2 +- .../testData/rawBuilder/expressions/while.kt | 2 +- .../testData/uncommonCases/resultFiles/dataClass.kt | 2 +- .../uncommonCases/resultFiles/overrideEquals.kt | 10 +++++----- 11 files changed, 22 insertions(+), 18 deletions(-) diff --git a/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt b/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt index 7bf4ed3bf65..0bb39ce6c31 100644 --- a/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt +++ b/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt @@ -118,7 +118,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() { override fun visitKtElement(element: KtElement) { when (element) { - is KtClassInitializer, is KtSecondaryConstructor, is KtPrimaryConstructor, is KtSuperTypeCallEntry -> { + is KtClassInitializer, is KtSecondaryConstructor, is KtPrimaryConstructor, is KtSuperTypeCallEntry, is KtDelegatedSuperTypeEntry -> { val valueParameters = element.getChildrenOfType() valueParameters.flatMap { it.parameters }.forEach { stack.addName(it.nameAsSafeName) } @@ -593,7 +593,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() { } override fun visitEqualityOperatorCall(equalityOperatorCall: FirEqualityOperatorCall, data: StringBuilder) { - data.append("fun (Any).equals(Any?): Boolean") + data.append("EQ operator call") } override fun visitSafeCallExpression(safeCallExpression: FirSafeCallExpression, data: StringBuilder) { diff --git a/compiler/visualizer/render-psi/src/org/jetbrains/kotlin/compiler/visualizer/PsiVisualizer.kt b/compiler/visualizer/render-psi/src/org/jetbrains/kotlin/compiler/visualizer/PsiVisualizer.kt index 6a9a92ebe66..39a5f8205ab 100644 --- a/compiler/visualizer/render-psi/src/org/jetbrains/kotlin/compiler/visualizer/PsiVisualizer.kt +++ b/compiler/visualizer/render-psi/src/org/jetbrains/kotlin/compiler/visualizer/PsiVisualizer.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.compiler.visualizer.Annotator.annotate +import org.jetbrains.kotlin.contracts.parsing.isEqualsDescriptor import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor import org.jetbrains.kotlin.name.FqName @@ -166,7 +167,10 @@ class PsiVisualizer(private val file: KtFile, analysisResult: AnalysisResult) : val typeArguments = resolvedCall.typeArguments .takeIf { it.isNotEmpty() } ?.values?.joinToString(", ", "<", ">") { renderType(it) } ?: "" - val annotation = descriptorRenderer.render(descriptor).replace(argumentsLabel, typeArguments) + val annotation = when { + descriptor.isEqualsDescriptor() -> "EQ operator call" + else -> descriptorRenderer.render(descriptor).replace(argumentsLabel, typeArguments) + } addAnnotation(annotation, renderOn, deleteDuplicate = false) return resolvedCall diff --git a/compiler/visualizer/testData/rawBuilder/declarations/contracts/newSyntax/functionWithBothOldAndNewSyntaxContractDescription.kt b/compiler/visualizer/testData/rawBuilder/declarations/contracts/newSyntax/functionWithBothOldAndNewSyntaxContractDescription.kt index 35ba6f5f551..fc637b2bdd4 100644 --- a/compiler/visualizer/testData/rawBuilder/declarations/contracts/newSyntax/functionWithBothOldAndNewSyntaxContractDescription.kt +++ b/compiler/visualizer/testData/rawBuilder/declarations/contracts/newSyntax/functionWithBothOldAndNewSyntaxContractDescription.kt @@ -6,7 +6,7 @@ fun test1(s: String?) contract [returnsNotNull()] { // [ERROR: not resolved] // │ [ERROR: not resolved] // │ │ test1.s: String? -// │ │ │ fun (Any).equals(Any?): Boolean +// │ │ │ EQ operator call // │ │ │ │ Nothing? // │ │ │ │ │ returns() implies (s != null) diff --git a/compiler/visualizer/testData/rawBuilder/declarations/enums2.kt b/compiler/visualizer/testData/rawBuilder/declarations/enums2.kt index 19d3b8ec0a8..a9718037dce 100644 --- a/compiler/visualizer/testData/rawBuilder/declarations/enums2.kt +++ b/compiler/visualizer/testData/rawBuilder/declarations/enums2.kt @@ -21,7 +21,7 @@ enum class SomeEnum(val x: Some) { SECOND(O2) { // Boolean // │ SomeEnum.SECOND.check.y: Some -// │ │ fun (Any).equals(Any?): Boolean +// │ │ EQ operator call // │ │ │ object O2: Some // │ │ │ │ override fun check(y: Some): Boolean = y == O2 diff --git a/compiler/visualizer/testData/rawBuilder/expressions/annotated.kt b/compiler/visualizer/testData/rawBuilder/expressions/annotated.kt index f55378e6240..6a186055090 100644 --- a/compiler/visualizer/testData/rawBuilder/expressions/annotated.kt +++ b/compiler/visualizer/testData/rawBuilder/expressions/annotated.kt @@ -16,7 +16,7 @@ annotation class Ann fun foo(arg: Int): Int { // constructor Ann() // │ foo.arg: Int -// │ │ fun (Any).equals(Any?): Boolean +// │ │ EQ operator call // Unit │ │ │ Int // │ │ │ │ │ if (@Ann arg == 0) { @@ -28,7 +28,7 @@ fun foo(arg: Int): Int { // constructor Ann() // │ Unit // │ │ foo.arg: Int -// │ │ │ fun (Any).equals(Any?): Boolean +// │ │ │ EQ operator call // │ │ │ │ Int // │ │ │ │ │ @Ann if (arg == 1) { diff --git a/compiler/visualizer/testData/rawBuilder/expressions/for.kt b/compiler/visualizer/testData/rawBuilder/expressions/for.kt index 863942ca407..da6e9f54ccd 100644 --- a/compiler/visualizer/testData/rawBuilder/expressions/for.kt +++ b/compiler/visualizer/testData/rawBuilder/expressions/for.kt @@ -23,7 +23,7 @@ fun fooLabeled() { label@ for (i in 1..10) { // Unit // │ val fooLabeled.i: Int -// │ │ fun (Any).equals(Any?): Boolean +// │ │ EQ operator call // │ │ │ Int // │ │ │ │ if (i == 5) continue@label diff --git a/compiler/visualizer/testData/rawBuilder/expressions/lambda.kt b/compiler/visualizer/testData/rawBuilder/expressions/lambda.kt index fca7aafecf8..dcfa0d4504d 100644 --- a/compiler/visualizer/testData/rawBuilder/expressions/lambda.kt +++ b/compiler/visualizer/testData/rawBuilder/expressions/lambda.kt @@ -41,7 +41,7 @@ fun foo(): Int { // Unit // │ foo..it: Tuple // │ │ val (Tuple).x: Int -// │ │ │ fun (Any).equals(Any?): Boolean +// │ │ │ EQ operator call // │ │ │ │ Int Int // │ │ │ │ │ │ if (it.x == 0) return@foo 0 @@ -59,7 +59,7 @@ fun bar(): Int { // Unit // │ bar..it: Tuple // │ │ val (Tuple).x: Int -// │ │ │ fun (Any).equals(Any?): Boolean +// │ │ │ EQ operator call // │ │ │ │ Int Int // │ │ │ │ │ │ if (it.x == 0) return@bar 0 diff --git a/compiler/visualizer/testData/rawBuilder/expressions/unary.kt b/compiler/visualizer/testData/rawBuilder/expressions/unary.kt index a5ac40f12d3..bf3720d331e 100644 --- a/compiler/visualizer/testData/rawBuilder/expressions/unary.kt +++ b/compiler/visualizer/testData/rawBuilder/expressions/unary.kt @@ -23,7 +23,7 @@ fun test() { // Unit // │ fun (Boolean).not(): Boolean // │ │ var test.x: Int -// │ │ │ fun (Any).equals(Any?): Boolean +// │ │ │ EQ operator call // │ │ │ │ Int // │ │ │ │ │ if (!(x == 0)) { diff --git a/compiler/visualizer/testData/rawBuilder/expressions/while.kt b/compiler/visualizer/testData/rawBuilder/expressions/while.kt index ef3837e7f59..08fdd9d19d6 100644 --- a/compiler/visualizer/testData/rawBuilder/expressions/while.kt +++ b/compiler/visualizer/testData/rawBuilder/expressions/while.kt @@ -18,7 +18,7 @@ fun foo(limit: Int) { // │ │ println(k) // var foo.k: Int -// │ fun (Any).equals(Any?): Boolean +// │ EQ operator call // │ │ Int // │ │ │ while (k == 13) { diff --git a/compiler/visualizer/testData/uncommonCases/resultFiles/dataClass.kt b/compiler/visualizer/testData/uncommonCases/resultFiles/dataClass.kt index e6803708c0f..6a6c23c5612 100644 --- a/compiler/visualizer/testData/uncommonCases/resultFiles/dataClass.kt +++ b/compiler/visualizer/testData/uncommonCases/resultFiles/dataClass.kt @@ -48,7 +48,7 @@ fun main() { println("a hash - ${a.hashCode()}") // val main.a: Vector -// │ fun (Vector).equals(Any?): Boolean +// │ EQ operator call // fun io/println(Any?): Unit │ │ val main.b: Vector // │ │ │ │ println("a is equal to b ${a.equals(b)}") diff --git a/compiler/visualizer/testData/uncommonCases/resultFiles/overrideEquals.kt b/compiler/visualizer/testData/uncommonCases/resultFiles/overrideEquals.kt index 64797ddc8f8..4ccf1d8b2e0 100644 --- a/compiler/visualizer/testData/uncommonCases/resultFiles/overrideEquals.kt +++ b/compiler/visualizer/testData/uncommonCases/resultFiles/overrideEquals.kt @@ -6,7 +6,7 @@ class A(val a: Int) { // │ │ │ if (other !is A) return false // val (A).a: Int -// │ fun (Any).equals(Any?): Boolean +// │ EQ operator call // │ │ A.equals.other: Any? // │ │ │ val (A).a: Int // │ │ │ │ @@ -22,7 +22,7 @@ open class B(val b: Int) { // │ │ │ if (other !is B) return false // val (B).b: Int -// │ fun (Any).equals(Any?): Boolean +// │ EQ operator call // │ │ B.equals.other: Any? // │ │ │ val (B).b: Int // │ │ │ │ @@ -36,19 +36,19 @@ open class B(val b: Int) { class C(c: Int): B(c) {} // constructor A(Int) -// │ fun (A).equals(Any?): Boolean +// │ EQ operator call // │ │ constructor A(Int) // Boolean │ Int │ │ Int // │ │ │ │ │ │ val areEqual = A(10) == A(11) // constructor C(Int) -// │ fun (B).equals(Any?): Boolean +// │ EQ operator call // │ │ constructor C(Int) // Boolean │ Int │ │ Int // │ │ │ │ │ │ val areEqual2 = C(10) == C(11) // constructor A(Int) -// │ fun (A).equals(Any?): Boolean +// │ EQ operator call // │ │ constructor C(Int) // Boolean │ Int │ │ Int // │ │ │ │ │ │