@@ -2,6 +2,7 @@ package com.sourcegraph.semanticdb_kotlinc
22
33import java.nio.file.Path
44import kotlin.contracts.ExperimentalContracts
5+ import kotlin.math.exp
56import org.jetbrains.kotlin.*
67import org.jetbrains.kotlin.com.intellij.lang.LighterASTNode
78import org.jetbrains.kotlin.com.intellij.util.diff.FlyweightCapableTreeStructure
@@ -11,18 +12,26 @@ import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
1112import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
1213import org.jetbrains.kotlin.fir.analysis.checkers.declaration.*
1314import org.jetbrains.kotlin.fir.analysis.checkers.expression.ExpressionCheckers
15+ import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirBasicExpressionChecker
16+ import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirClassReferenceExpressionChecker
1417import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirQualifiedAccessExpressionChecker
18+ import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirTypeOperatorCallChecker
1519import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol
1620import org.jetbrains.kotlin.fir.analysis.checkers.toClassLikeSymbol
1721import org.jetbrains.kotlin.fir.analysis.extensions.FirAdditionalCheckersExtension
1822import org.jetbrains.kotlin.fir.declarations.*
23+ import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression
1924import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
25+ import org.jetbrains.kotlin.fir.expressions.FirStatement
26+ import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall
2027import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
2128import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticFunctionSymbol
2229import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
2330import org.jetbrains.kotlin.fir.resolve.toClassLikeSymbol
2431import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol
2532import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
33+ import org.jetbrains.kotlin.fir.types.coneType
34+ import org.jetbrains.kotlin.fir.types.resolvedType
2635import org.jetbrains.kotlin.lexer.KtTokens
2736import org.jetbrains.kotlin.name.ClassId
2837import org.jetbrains.kotlin.name.FqName
@@ -47,6 +56,9 @@ open class AnalyzerCheckers(session: FirSession) : FirAdditionalCheckersExtensio
4756 override val qualifiedAccessExpressionCheckers:
4857 Set <FirQualifiedAccessExpressionChecker > =
4958 setOf (SemanticQualifiedAccessExpressionChecker ())
59+
60+ override val typeOperatorCallCheckers:
61+ Set <SemanticClassReferenceExpressionChecker > = setOf (SemanticClassReferenceExpressionChecker ())
5062 }
5163
5264 open class AnalyzerDeclarationCheckers (sourceroot : Path ) : DeclarationCheckers() {
@@ -409,4 +421,22 @@ open class AnalyzerCheckers(session: FirSession) : FirAdditionalCheckersExtensio
409421 }
410422 }
411423 }
424+
425+ private class SemanticClassReferenceExpressionChecker :
426+ FirTypeOperatorCallChecker (MppCheckerKind .Common ) {
427+ @OptIn(ExperimentalContracts ::class )
428+ override fun check (
429+ expression : FirTypeOperatorCall ,
430+ context : CheckerContext ,
431+ reporter : DiagnosticReporter
432+ ) {
433+ val typeRef = expression.conversionTypeRef
434+ val source = typeRef.source ? : return
435+ val classSymbol = expression.conversionTypeRef.toClassLikeSymbol(context.session) ? : return
436+ val ktFile = context.containingFile?.sourceFile ? : return
437+ val visitor = visitors[ktFile]
438+
439+ visitor?.visitClassReference(classSymbol, getIdentifier(expression.conversionTypeRef.source ? : source), context)
440+ }
441+ }
412442}
0 commit comments