@@ -2,6 +2,7 @@ package com.sourcegraph.semanticdb_kotlinc
2
2
3
3
import java.nio.file.Path
4
4
import kotlin.contracts.ExperimentalContracts
5
+ import kotlin.math.exp
5
6
import org.jetbrains.kotlin.*
6
7
import org.jetbrains.kotlin.com.intellij.lang.LighterASTNode
7
8
import org.jetbrains.kotlin.com.intellij.util.diff.FlyweightCapableTreeStructure
@@ -11,18 +12,26 @@ import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
11
12
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
12
13
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.*
13
14
import 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
14
17
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirQualifiedAccessExpressionChecker
18
+ import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirTypeOperatorCallChecker
15
19
import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol
16
20
import org.jetbrains.kotlin.fir.analysis.checkers.toClassLikeSymbol
17
21
import org.jetbrains.kotlin.fir.analysis.extensions.FirAdditionalCheckersExtension
18
22
import org.jetbrains.kotlin.fir.declarations.*
23
+ import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression
19
24
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
25
+ import org.jetbrains.kotlin.fir.expressions.FirStatement
26
+ import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall
20
27
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
21
28
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticFunctionSymbol
22
29
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
23
30
import org.jetbrains.kotlin.fir.resolve.toClassLikeSymbol
24
31
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol
25
32
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
33
+ import org.jetbrains.kotlin.fir.types.coneType
34
+ import org.jetbrains.kotlin.fir.types.resolvedType
26
35
import org.jetbrains.kotlin.lexer.KtTokens
27
36
import org.jetbrains.kotlin.name.ClassId
28
37
import org.jetbrains.kotlin.name.FqName
@@ -47,6 +56,9 @@ open class AnalyzerCheckers(session: FirSession) : FirAdditionalCheckersExtensio
47
56
override val qualifiedAccessExpressionCheckers:
48
57
Set <FirQualifiedAccessExpressionChecker > =
49
58
setOf (SemanticQualifiedAccessExpressionChecker ())
59
+
60
+ override val typeOperatorCallCheckers:
61
+ Set <SemanticClassReferenceExpressionChecker > = setOf (SemanticClassReferenceExpressionChecker ())
50
62
}
51
63
52
64
open class AnalyzerDeclarationCheckers (sourceroot : Path ) : DeclarationCheckers() {
@@ -409,4 +421,22 @@ open class AnalyzerCheckers(session: FirSession) : FirAdditionalCheckersExtensio
409
421
}
410
422
}
411
423
}
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
+ }
412
442
}
0 commit comments