From 5aa783a96170b670f3655c6097c4f764627bccdf Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Thu, 14 Mar 2019 20:14:10 +0300 Subject: [PATCH] FIR: Fix visitors/transformers and testData --- .../testData/resolve/expresssions/access.txt | 2 +- .../resolve/expresssions/dispatchReceiver.txt | 2 +- .../expresssions/localImplicitBodies.txt | 6 ++-- .../org/jetbrains/kotlin/fir/FirRenderer.kt | 3 +- .../fir/visitors/FirTransformerGenerated.kt | 16 +++++----- .../fir/visitors/FirVisitorGenerated.kt | 16 +++++----- .../fir/visitors/FirVisitorVoidGenerated.kt | 16 +++++----- .../jetbrains/kotlin/fir/FirResolveBench.kt | 30 ++++++++++++------- 8 files changed, 50 insertions(+), 41 deletions(-) diff --git a/compiler/fir/resolve/testData/resolve/expresssions/access.txt b/compiler/fir/resolve/testData/resolve/expresssions/access.txt index b8a2865d41a..49b3c5b74c8 100644 --- a/compiler/fir/resolve/testData/resolve/expresssions/access.txt +++ b/compiler/fir/resolve/testData/resolve/expresssions/access.txt @@ -49,7 +49,7 @@ FILE: access.kt lval a: R|kotlin/Int| = Int(10) lval b: R|kotlin/Int| = R|/a| lval d: R|kotlin/String| = String() - lval c: = # + lval c: = # #() public final fun bcd(): R|kotlin/Unit| { } diff --git a/compiler/fir/resolve/testData/resolve/expresssions/dispatchReceiver.txt b/compiler/fir/resolve/testData/resolve/expresssions/dispatchReceiver.txt index 5ac11e25fb7..9142951cbc3 100644 --- a/compiler/fir/resolve/testData/resolve/expresssions/dispatchReceiver.txt +++ b/compiler/fir/resolve/testData/resolve/expresssions/dispatchReceiver.txt @@ -10,7 +10,7 @@ FILE: dispatchReceiver.kt public get(): R|Base| public set(value: R|Base|): R|kotlin/Unit| - public final fun check(): { + public final fun check(): { ^check R|/My.delegate|.R|/My.check|() } diff --git a/compiler/fir/resolve/testData/resolve/expresssions/localImplicitBodies.txt b/compiler/fir/resolve/testData/resolve/expresssions/localImplicitBodies.txt index 679974c39d9..9106c511694 100644 --- a/compiler/fir/resolve/testData/resolve/expresssions/localImplicitBodies.txt +++ b/compiler/fir/resolve/testData/resolve/expresssions/localImplicitBodies.txt @@ -1,9 +1,9 @@ FILE: localImplicitBodies.kt public final fun foo(): R|kotlin/Unit| { - lval x: = object : { + lval x: = object : { public constructor(): super() - public final fun sss(): { + public final fun sss(): { ^sss #() } @@ -13,5 +13,5 @@ FILE: localImplicitBodies.kt } - lval g: = R|/x|.R|/sss|() + lval g: = R|/x|.R|/sss|() } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt index c1eb6928368..32fed1e5e7b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -661,7 +661,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef) { visitTypeRef(errorTypeRef) - print("") + print("") } override fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef) { @@ -702,7 +702,6 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { } - override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) { resolvedTypeRef.annotations.renderAnnotations() print("R|") diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt index 053fc1cb6a9..b7b316cdaf3 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt @@ -28,6 +28,10 @@ abstract class FirTransformer : FirVisitor { + return transformDeclaration(callableMemberDeclaration, data) + } + open fun transformDeclarationWithBody(declarationWithBody: FirDeclarationWithBody, data: D): CompositeTransformResult { return transformDeclaration(declarationWithBody, data) } @@ -76,10 +80,6 @@ abstract class FirTransformer : FirVisitor { - return transformMemberDeclaration(callableMemberDeclaration, data) - } - open fun transformClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): CompositeTransformResult { return transformMemberDeclaration(classLikeDeclaration, data) } @@ -340,10 +340,6 @@ abstract class FirTransformer : FirVisitor { - return transformTypeRef(errorTypeRef, data) - } - open fun transformImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: D): CompositeTransformResult { return transformTypeRef(implicitTypeRef, data) } @@ -364,6 +360,10 @@ abstract class FirTransformer : FirVisitor { + return transformResolvedTypeRef(errorTypeRef, data) + } + open fun transformResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: D): CompositeTransformResult { return transformResolvedTypeRef(resolvedFunctionTypeRef, data) } diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt index 5e5f60244e1..34c13b873c9 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt @@ -28,6 +28,10 @@ abstract class FirVisitor { return visitDeclaration(callableDeclaration, data) } + open fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): R { + return visitDeclaration(callableMemberDeclaration, data) + } + open fun visitDeclarationWithBody(declarationWithBody: FirDeclarationWithBody, data: D): R { return visitDeclaration(declarationWithBody, data) } @@ -76,10 +80,6 @@ abstract class FirVisitor { return visitNamedDeclaration(memberDeclaration, data) } - open fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): R { - return visitMemberDeclaration(callableMemberDeclaration, data) - } - open fun visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): R { return visitMemberDeclaration(classLikeDeclaration, data) } @@ -340,10 +340,6 @@ abstract class FirVisitor { return visitTypeRef(delegatedTypeRef, data) } - open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): R { - return visitTypeRef(errorTypeRef, data) - } - open fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: D): R { return visitTypeRef(implicitTypeRef, data) } @@ -364,6 +360,10 @@ abstract class FirVisitor { return visitTypeRefWithNullability(resolvedTypeRef, data) } + open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): R { + return visitResolvedTypeRef(errorTypeRef, data) + } + open fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: D): R { return visitResolvedTypeRef(resolvedFunctionTypeRef, data) } diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt index 3784bdcd8ac..025da6fb78c 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt @@ -28,6 +28,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitDeclaration(callableDeclaration, null) } + open fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration) { + visitDeclaration(callableMemberDeclaration, null) + } + open fun visitDeclarationWithBody(declarationWithBody: FirDeclarationWithBody) { visitDeclaration(declarationWithBody, null) } @@ -76,10 +80,6 @@ abstract class FirVisitorVoid : FirVisitor() { visitNamedDeclaration(memberDeclaration, null) } - open fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration) { - visitMemberDeclaration(callableMemberDeclaration, null) - } - open fun visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration) { visitMemberDeclaration(classLikeDeclaration, null) } @@ -340,10 +340,6 @@ abstract class FirVisitorVoid : FirVisitor() { visitTypeRef(delegatedTypeRef, null) } - open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef) { - visitTypeRef(errorTypeRef, null) - } - open fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef) { visitTypeRef(implicitTypeRef, null) } @@ -364,6 +360,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitTypeRefWithNullability(resolvedTypeRef, null) } + open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef) { + visitResolvedTypeRef(errorTypeRef, null) + } + open fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef) { visitResolvedTypeRef(resolvedFunctionTypeRef, null) } diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt index 31e8da1e10e..c77430f617c 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir import com.intellij.openapi.fileEditor.FileDocumentManager +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.types.ConeClassErrorType import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType @@ -71,12 +72,30 @@ fun doFirResolveTestBench( firFiles.forEach { it.accept(object : FirVisitorVoid() { + + fun reportProblem(problem: String, psi: PsiElement) { + val document = try { + fileDocumentManager.getDocument(psi.containingFile.virtualFile) + } catch (t: Throwable) { + throw Exception("for file ${psi.containingFile}", t) + } + val line = (document?.getLineNumber(psi.startOffset) ?: 0) + val char = psi.startOffset - (document?.getLineStartOffset(line) ?: 0) + val report = "u: ${psi.containingFile?.virtualFile?.path}: (${line + 1}:$char): $problem" + errorTypesReports[problem] = report + } override fun visitElement(element: FirElement) { element.acceptChildren(this) } override fun visitTypeRef(typeRef: FirTypeRef) { unresolvedTypes++ + + if (typeRef.psi != null) { + val psi = typeRef.psi!! + val problem = typeRef.renderWithType() + reportProblem(problem, psi) + } } override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) { @@ -88,16 +107,7 @@ fun doFirResolveTestBench( } else { val psi = resolvedTypeRef.psi!! val problem = "$type with psi `${psi.text}`" - val document = try { - fileDocumentManager.getDocument(psi.containingFile.virtualFile) - } catch (t: Throwable) { - throw Exception("for file ${psi.containingFile}", t) - } - val line = document?.getLineNumber(psi.startOffset) ?: 0 - val char = psi.startOffset - (document?.getLineStartOffset(line) ?: 0) - val report = "e: ${psi.containingFile?.virtualFile?.path}: ($line:$char): $problem" - errorTypesReports[problem] = report - errorTypes++ + reportProblem(problem, psi) } } }