FIR IDE: fix inconsistency in element collecting in DiagnosticTraversalCounterTest
This commit is contained in:
committed by
TeamCityServer
parent
9cb740bfdb
commit
e2acc507d4
+23
-7
@@ -9,6 +9,13 @@ import com.intellij.openapi.util.io.FileUtil
|
|||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirRealSourceElementKind
|
import org.jetbrains.kotlin.fir.FirRealSourceElementKind
|
||||||
import org.jetbrains.kotlin.fir.SessionConfiguration
|
import org.jetbrains.kotlin.fir.SessionConfiguration
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.PersistentCheckerContext
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollectorVisitor
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.SessionHolderImpl
|
||||||
|
import org.jetbrains.kotlin.fir.types.ConeClassErrorType
|
||||||
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||||
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
|
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
|
||||||
@@ -18,6 +25,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFir
|
|||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.createResolveStateForNoCaching
|
import org.jetbrains.kotlin.idea.fir.low.level.api.createResolveStateForNoCaching
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.diagnostics.BeforeElementDiagnosticCollectionHandler
|
import org.jetbrains.kotlin.idea.fir.low.level.api.diagnostics.BeforeElementDiagnosticCollectionHandler
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.diagnostics.SingleNonLocalDeclarationDiagnosticRetriever
|
import org.jetbrains.kotlin.idea.fir.low.level.api.diagnostics.SingleNonLocalDeclarationDiagnosticRetriever
|
||||||
|
import org.jetbrains.kotlin.idea.fir.low.level.api.diagnostics.fir.PersistentCheckerContextFactory
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.renderWithClassName
|
import org.jetbrains.kotlin.idea.fir.low.level.api.renderWithClassName
|
||||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
@@ -54,14 +62,14 @@ abstract class AbstractDiagnosticTraversalCounterTest : KotlinLightCodeInsightFi
|
|||||||
if (zeroElements.isNotEmpty()) {
|
if (zeroElements.isNotEmpty()) {
|
||||||
appendLine(
|
appendLine(
|
||||||
""" |The following elements were not visited
|
""" |The following elements were not visited
|
||||||
|${zeroElements.joinToString(separator = "\n\n") { it.first.renderWithClassName() }}
|
|${zeroElements.joinToString(separator = "\n\n") { it.first.source?.kind.toString() + " <> " + it.first.renderWithClassName() }}
|
||||||
""".trimMargin()
|
""".trimMargin()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
if (nonZeroElements.isNotEmpty()) {
|
if (nonZeroElements.isNotEmpty()) {
|
||||||
appendLine(
|
appendLine(
|
||||||
""" |The following elements were visited more than one time
|
""" |The following elements were visited more than one time
|
||||||
|${nonZeroElements.joinToString(separator = "\n\n") { it.second.toString() + " times " + it.first.renderWithClassName() }}
|
|${nonZeroElements.joinToString(separator = "\n\n") { it.second.toString() + " times " + it.first.source?.kind.toString() + " <> " + it.first.renderWithClassName() }}
|
||||||
""".trimMargin()
|
""".trimMargin()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -104,12 +112,20 @@ abstract class AbstractDiagnosticTraversalCounterTest : KotlinLightCodeInsightFi
|
|||||||
firFile: FirElement,
|
firFile: FirElement,
|
||||||
): Set<FirElement> {
|
): Set<FirElement> {
|
||||||
val elementUsageCount = mutableMapOf<FirElement, Int>()
|
val elementUsageCount = mutableMapOf<FirElement, Int>()
|
||||||
firFile.accept(object : FirVisitorVoid() {
|
val sessionHolder = SessionHolderImpl((firFile as FirDeclaration).declarationSiteSession, ScopeSession())
|
||||||
override fun visitElement(element: FirElement) {
|
val visitor = object : AbstractDiagnosticCollectorVisitor(
|
||||||
elementUsageCount.compute(element) { _, count -> (count ?: 0) + 1 }
|
PersistentCheckerContextFactory.createEmptyPersistenceCheckerContext(sessionHolder)
|
||||||
element.acceptChildren(this)
|
) {
|
||||||
|
override fun visitNestedElements(element: FirElement) {
|
||||||
|
element.acceptChildren(this, null)
|
||||||
}
|
}
|
||||||
})
|
|
||||||
|
override fun checkElement(element: FirElement) {
|
||||||
|
elementUsageCount.compute(element) { _, count -> (count ?: 0) + 1 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
firFile.accept(visitor, null)
|
||||||
return elementUsageCount.filterValues { it == 1 }.keys
|
return elementUsageCount.filterValues { it == 1 }.keys
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user