[FIR] Add symbol to all declarations. Get rid of FirSymbolOwner
This commit is contained in:
+1
-1
@@ -26,7 +26,7 @@ fun renderJavaClass(renderer: FirRenderer, javaClass: FirJavaClass, session: Fir
|
|||||||
renderer.visitMemberDeclaration(javaClass)
|
renderer.visitMemberDeclaration(javaClass)
|
||||||
renderer.renderSupertypes(javaClass)
|
renderer.renderSupertypes(javaClass)
|
||||||
renderer.renderInBraces {
|
renderer.renderInBraces {
|
||||||
val renderedDeclarations = mutableListOf<FirDeclaration>()
|
val renderedDeclarations = mutableListOf<FirDeclaration<*>>()
|
||||||
|
|
||||||
fun renderAndCache(symbol: FirCallableSymbol<*>) {
|
fun renderAndCache(symbol: FirCallableSymbol<*>) {
|
||||||
val enhanced = symbol.fir
|
val enhanced = symbol.fir
|
||||||
|
|||||||
+3
-3
@@ -51,8 +51,8 @@ fun main(args: Array<String>) {
|
|||||||
|
|
||||||
val declarationPackage = "$basePackage.checkers.declaration"
|
val declarationPackage = "$basePackage.checkers.declaration"
|
||||||
generateCheckersComponents(generationPath, declarationPackage, "FirDeclarationChecker") {
|
generateCheckersComponents(generationPath, declarationPackage, "FirDeclarationChecker") {
|
||||||
alias<FirDeclaration>("BasicDeclarationChecker")
|
alias<FirDeclaration<*>>("BasicDeclarationChecker")
|
||||||
alias<FirMemberDeclaration>("MemberDeclarationChecker")
|
alias<FirMemberDeclaration<*>>("MemberDeclarationChecker")
|
||||||
alias<FirFunction<*>>("FunctionChecker")
|
alias<FirFunction<*>>("FunctionChecker")
|
||||||
alias<FirSimpleFunction>("SimpleFunctionChecker")
|
alias<FirSimpleFunction>("SimpleFunctionChecker")
|
||||||
alias<FirProperty>("PropertyChecker")
|
alias<FirProperty>("PropertyChecker")
|
||||||
@@ -61,7 +61,7 @@ fun main(args: Array<String>) {
|
|||||||
alias<FirConstructor>("ConstructorChecker")
|
alias<FirConstructor>("ConstructorChecker")
|
||||||
alias<FirFile>("FileChecker")
|
alias<FirFile>("FileChecker")
|
||||||
alias<FirTypeParameter>("FirTypeParameterChecker")
|
alias<FirTypeParameter>("FirTypeParameterChecker")
|
||||||
alias<FirAnnotatedDeclaration>("FirAnnotatedDeclarationChecker")
|
alias<FirAnnotatedDeclaration<*>>("FirAnnotatedDeclarationChecker")
|
||||||
|
|
||||||
additional(
|
additional(
|
||||||
fieldName = "controlFlowAnalyserCheckers",
|
fieldName = "controlFlowAnalyserCheckers",
|
||||||
|
|||||||
+18
-18
@@ -482,7 +482,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
|||||||
|
|
||||||
val NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER by error<KtSimpleNameExpression> {
|
val NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER by error<KtSimpleNameExpression> {
|
||||||
parameter<Name>("typeParameterName")
|
parameter<Name>("typeParameterName")
|
||||||
parameter<FirDeclaration>("typeParametersOwner")
|
parameter<FirDeclaration<*>>("typeParametersOwner")
|
||||||
}
|
}
|
||||||
|
|
||||||
val BOUND_ON_TYPE_ALIAS_PARAMETER_NOT_ALLOWED by error<KtTypeReference>()
|
val BOUND_ON_TYPE_ALIAS_PARAMETER_NOT_ALLOWED by error<KtTypeReference>()
|
||||||
@@ -554,7 +554,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
|||||||
|
|
||||||
val OVERRIDES by object : DiagnosticGroup("overrides") {
|
val OVERRIDES by object : DiagnosticGroup("overrides") {
|
||||||
val NOTHING_TO_OVERRIDE by error<KtModifierListOwner>(PositioningStrategy.OVERRIDE_MODIFIER) {
|
val NOTHING_TO_OVERRIDE by error<KtModifierListOwner>(PositioningStrategy.OVERRIDE_MODIFIER) {
|
||||||
parameter<FirMemberDeclaration>("declaration")
|
parameter<FirMemberDeclaration<*>>("declaration")
|
||||||
}
|
}
|
||||||
|
|
||||||
val CANNOT_WEAKEN_ACCESS_PRIVILEGE by error<KtModifierListOwner>(PositioningStrategy.VISIBILITY_MODIFIER) {
|
val CANNOT_WEAKEN_ACCESS_PRIVILEGE by error<KtModifierListOwner>(PositioningStrategy.VISIBILITY_MODIFIER) {
|
||||||
@@ -607,25 +607,25 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val RETURN_TYPE_MISMATCH_ON_OVERRIDE by error<KtNamedDeclaration>(PositioningStrategy.DECLARATION_RETURN_TYPE) {
|
val RETURN_TYPE_MISMATCH_ON_OVERRIDE by error<KtNamedDeclaration>(PositioningStrategy.DECLARATION_RETURN_TYPE) {
|
||||||
parameter<FirMemberDeclaration>("function")
|
parameter<FirMemberDeclaration<*>>("function")
|
||||||
parameter<FirMemberDeclaration>("superFunction")
|
parameter<FirMemberDeclaration<*>>("superFunction")
|
||||||
}
|
}
|
||||||
val PROPERTY_TYPE_MISMATCH_ON_OVERRIDE by error<KtNamedDeclaration>(PositioningStrategy.DECLARATION_RETURN_TYPE) {
|
val PROPERTY_TYPE_MISMATCH_ON_OVERRIDE by error<KtNamedDeclaration>(PositioningStrategy.DECLARATION_RETURN_TYPE) {
|
||||||
parameter<FirMemberDeclaration>("property")
|
parameter<FirMemberDeclaration<*>>("property")
|
||||||
parameter<FirMemberDeclaration>("superProperty")
|
parameter<FirMemberDeclaration<*>>("superProperty")
|
||||||
}
|
}
|
||||||
val VAR_TYPE_MISMATCH_ON_OVERRIDE by error<KtNamedDeclaration>(PositioningStrategy.DECLARATION_RETURN_TYPE) {
|
val VAR_TYPE_MISMATCH_ON_OVERRIDE by error<KtNamedDeclaration>(PositioningStrategy.DECLARATION_RETURN_TYPE) {
|
||||||
parameter<FirMemberDeclaration>("variable")
|
parameter<FirMemberDeclaration<*>>("variable")
|
||||||
parameter<FirMemberDeclaration>("superVariable")
|
parameter<FirMemberDeclaration<*>>("superVariable")
|
||||||
}
|
}
|
||||||
val VAR_OVERRIDDEN_BY_VAL by error<KtNamedDeclaration>(PositioningStrategy.VAL_OR_VAR_NODE) {
|
val VAR_OVERRIDDEN_BY_VAL by error<KtNamedDeclaration>(PositioningStrategy.VAL_OR_VAR_NODE) {
|
||||||
parameter<FirMemberDeclaration>("overridingDeclaration")
|
parameter<FirMemberDeclaration<*>>("overridingDeclaration")
|
||||||
parameter<FirMemberDeclaration>("overriddenDeclaration")
|
parameter<FirMemberDeclaration<*>>("overriddenDeclaration")
|
||||||
}
|
}
|
||||||
val NON_FINAL_MEMBER_IN_FINAL_CLASS by warning<KtNamedDeclaration>(PositioningStrategy.OPEN_MODIFIER)
|
val NON_FINAL_MEMBER_IN_FINAL_CLASS by warning<KtNamedDeclaration>(PositioningStrategy.OPEN_MODIFIER)
|
||||||
val NON_FINAL_MEMBER_IN_OBJECT by warning<KtNamedDeclaration>(PositioningStrategy.OPEN_MODIFIER)
|
val NON_FINAL_MEMBER_IN_OBJECT by warning<KtNamedDeclaration>(PositioningStrategy.OPEN_MODIFIER)
|
||||||
val VIRTUAL_MEMBER_HIDDEN by error<KtNamedDeclaration>(PositioningStrategy.DECLARATION_NAME) {
|
val VIRTUAL_MEMBER_HIDDEN by error<KtNamedDeclaration>(PositioningStrategy.DECLARATION_NAME) {
|
||||||
parameter<FirMemberDeclaration>("declared")
|
parameter<FirMemberDeclaration<*>>("declared")
|
||||||
parameter<FirRegularClass>("overriddenContainer")
|
parameter<FirRegularClass>("overriddenContainer")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -652,21 +652,21 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
|||||||
|
|
||||||
val FUNCTIONS by object : DiagnosticGroup("Functions") {
|
val FUNCTIONS by object : DiagnosticGroup("Functions") {
|
||||||
val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error<KtFunction>(PositioningStrategy.MODALITY_MODIFIER) {
|
val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error<KtFunction>(PositioningStrategy.MODALITY_MODIFIER) {
|
||||||
parameter<FirMemberDeclaration>("function")
|
parameter<FirMemberDeclaration<*>>("function")
|
||||||
parameter<FirClass<*>>("containingClass")
|
parameter<FirClass<*>>("containingClass")
|
||||||
}
|
}
|
||||||
val ABSTRACT_FUNCTION_WITH_BODY by error<KtFunction>(PositioningStrategy.MODALITY_MODIFIER) {
|
val ABSTRACT_FUNCTION_WITH_BODY by error<KtFunction>(PositioningStrategy.MODALITY_MODIFIER) {
|
||||||
parameter<FirMemberDeclaration>("function")
|
parameter<FirMemberDeclaration<*>>("function")
|
||||||
}
|
}
|
||||||
val NON_ABSTRACT_FUNCTION_WITH_NO_BODY by error<KtFunction>(PositioningStrategy.DECLARATION_SIGNATURE) {
|
val NON_ABSTRACT_FUNCTION_WITH_NO_BODY by error<KtFunction>(PositioningStrategy.DECLARATION_SIGNATURE) {
|
||||||
parameter<FirMemberDeclaration>("function")
|
parameter<FirMemberDeclaration<*>>("function")
|
||||||
}
|
}
|
||||||
val PRIVATE_FUNCTION_WITH_NO_BODY by error<KtFunction>(PositioningStrategy.VISIBILITY_MODIFIER) {
|
val PRIVATE_FUNCTION_WITH_NO_BODY by error<KtFunction>(PositioningStrategy.VISIBILITY_MODIFIER) {
|
||||||
parameter<FirMemberDeclaration>("function")
|
parameter<FirMemberDeclaration<*>>("function")
|
||||||
}
|
}
|
||||||
|
|
||||||
val NON_MEMBER_FUNCTION_NO_BODY by error<KtFunction>(PositioningStrategy.DECLARATION_SIGNATURE) {
|
val NON_MEMBER_FUNCTION_NO_BODY by error<KtFunction>(PositioningStrategy.DECLARATION_SIGNATURE) {
|
||||||
parameter<FirMemberDeclaration>("function")
|
parameter<FirMemberDeclaration<*>>("function")
|
||||||
}
|
}
|
||||||
|
|
||||||
val FUNCTION_DECLARATION_WITH_NO_NAME by error<KtFunction>(PositioningStrategy.DECLARATION_SIGNATURE)
|
val FUNCTION_DECLARATION_WITH_NO_NAME by error<KtFunction>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||||
@@ -696,7 +696,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
|||||||
|
|
||||||
val PROPERTIES_AND_ACCESSORS by object : DiagnosticGroup("Properties & accessors") {
|
val PROPERTIES_AND_ACCESSORS by object : DiagnosticGroup("Properties & accessors") {
|
||||||
val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error<KtModifierListOwner>(PositioningStrategy.MODALITY_MODIFIER) {
|
val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error<KtModifierListOwner>(PositioningStrategy.MODALITY_MODIFIER) {
|
||||||
parameter<FirMemberDeclaration>("property")
|
parameter<FirMemberDeclaration<*>>("property")
|
||||||
parameter<FirClass<*>>("containingClass")
|
parameter<FirClass<*>>("containingClass")
|
||||||
}
|
}
|
||||||
val PRIVATE_PROPERTY_IN_INTERFACE by error<KtProperty>(PositioningStrategy.VISIBILITY_MODIFIER)
|
val PRIVATE_PROPERTY_IN_INTERFACE by error<KtProperty>(PositioningStrategy.VISIBILITY_MODIFIER)
|
||||||
@@ -1032,7 +1032,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
|||||||
|
|
||||||
private val exposedVisibilityDiagnosticInit: DiagnosticBuilder.() -> Unit = {
|
private val exposedVisibilityDiagnosticInit: DiagnosticBuilder.() -> Unit = {
|
||||||
parameter<EffectiveVisibility>("elementVisibility")
|
parameter<EffectiveVisibility>("elementVisibility")
|
||||||
parameter<FirMemberDeclaration>("restrictingDeclaration")
|
parameter<FirMemberDeclaration<*>>("restrictingDeclaration")
|
||||||
parameter<EffectiveVisibility>("restrictingVisibility")
|
parameter<EffectiveVisibility>("restrictingVisibility")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -5,7 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.analysis.jvm.checkers
|
package org.jetbrains.kotlin.fir.analysis.jvm.checkers
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.*
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirMemberDeclarationChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.jvm.checkers.declaration.FirJvmExternalDeclarationChecker
|
import org.jetbrains.kotlin.fir.analysis.jvm.checkers.declaration.FirJvmExternalDeclarationChecker
|
||||||
|
|
||||||
object JvmDeclarationCheckers : DeclarationCheckers() {
|
object JvmDeclarationCheckers : DeclarationCheckers() {
|
||||||
|
|||||||
+1
-1
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
|
|
||||||
object FirJvmExternalDeclarationChecker : FirMemberDeclarationChecker() {
|
object FirJvmExternalDeclarationChecker : FirMemberDeclarationChecker() {
|
||||||
override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (!declaration.isExternal) return
|
if (!declaration.isExternal) return
|
||||||
val source = declaration.source ?: return
|
val source = declaration.source ?: return
|
||||||
if (source.kind is FirFakeSourceElementKind) return
|
if (source.kind is FirFakeSourceElementKind) return
|
||||||
|
|||||||
+3
-3
@@ -22,8 +22,8 @@ import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||||
|
|
||||||
typealias FirBasicDeclarationChecker = FirDeclarationChecker<FirDeclaration>
|
typealias FirBasicDeclarationChecker = FirDeclarationChecker<FirDeclaration<*>>
|
||||||
typealias FirMemberDeclarationChecker = FirDeclarationChecker<FirMemberDeclaration>
|
typealias FirMemberDeclarationChecker = FirDeclarationChecker<FirMemberDeclaration<*>>
|
||||||
typealias FirFunctionChecker = FirDeclarationChecker<FirFunction<*>>
|
typealias FirFunctionChecker = FirDeclarationChecker<FirFunction<*>>
|
||||||
typealias FirSimpleFunctionChecker = FirDeclarationChecker<FirSimpleFunction>
|
typealias FirSimpleFunctionChecker = FirDeclarationChecker<FirSimpleFunction>
|
||||||
typealias FirPropertyChecker = FirDeclarationChecker<FirProperty>
|
typealias FirPropertyChecker = FirDeclarationChecker<FirProperty>
|
||||||
@@ -32,4 +32,4 @@ typealias FirRegularClassChecker = FirDeclarationChecker<FirRegularClass>
|
|||||||
typealias FirConstructorChecker = FirDeclarationChecker<FirConstructor>
|
typealias FirConstructorChecker = FirDeclarationChecker<FirConstructor>
|
||||||
typealias FirFileChecker = FirDeclarationChecker<FirFile>
|
typealias FirFileChecker = FirDeclarationChecker<FirFile>
|
||||||
typealias FirTypeParameterChecker = FirDeclarationChecker<FirTypeParameter>
|
typealias FirTypeParameterChecker = FirDeclarationChecker<FirTypeParameter>
|
||||||
typealias FirAnnotatedDeclarationChecker = FirDeclarationChecker<FirAnnotatedDeclaration>
|
typealias FirAnnotatedDeclarationChecker = FirDeclarationChecker<FirAnnotatedDeclaration<*>>
|
||||||
|
|||||||
+22
-22
@@ -218,15 +218,15 @@ object FirErrors {
|
|||||||
val EXPERIMENTAL_ANNOTATION_WITH_WRONG_RETENTION by error0<KtAnnotationEntry>()
|
val EXPERIMENTAL_ANNOTATION_WITH_WRONG_RETENTION by error0<KtAnnotationEntry>()
|
||||||
|
|
||||||
// Exposed visibility
|
// Exposed visibility
|
||||||
val EXPOSED_TYPEALIAS_EXPANDED_TYPE by error3<KtNamedDeclaration, EffectiveVisibility, FirMemberDeclaration, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
val EXPOSED_TYPEALIAS_EXPANDED_TYPE by error3<KtNamedDeclaration, EffectiveVisibility, FirMemberDeclaration<*>, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
val EXPOSED_FUNCTION_RETURN_TYPE by error3<KtNamedDeclaration, EffectiveVisibility, FirMemberDeclaration, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
val EXPOSED_FUNCTION_RETURN_TYPE by error3<KtNamedDeclaration, EffectiveVisibility, FirMemberDeclaration<*>, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
val EXPOSED_RECEIVER_TYPE by error3<KtTypeReference, EffectiveVisibility, FirMemberDeclaration, EffectiveVisibility>()
|
val EXPOSED_RECEIVER_TYPE by error3<KtTypeReference, EffectiveVisibility, FirMemberDeclaration<*>, EffectiveVisibility>()
|
||||||
val EXPOSED_PROPERTY_TYPE by error3<KtNamedDeclaration, EffectiveVisibility, FirMemberDeclaration, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
val EXPOSED_PROPERTY_TYPE by error3<KtNamedDeclaration, EffectiveVisibility, FirMemberDeclaration<*>, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
val EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR by warning3<KtNamedDeclaration, EffectiveVisibility, FirMemberDeclaration, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
val EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR by warning3<KtNamedDeclaration, EffectiveVisibility, FirMemberDeclaration<*>, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
val EXPOSED_PARAMETER_TYPE by error3<KtParameter, EffectiveVisibility, FirMemberDeclaration, EffectiveVisibility>()
|
val EXPOSED_PARAMETER_TYPE by error3<KtParameter, EffectiveVisibility, FirMemberDeclaration<*>, EffectiveVisibility>()
|
||||||
val EXPOSED_SUPER_INTERFACE by error3<KtTypeReference, EffectiveVisibility, FirMemberDeclaration, EffectiveVisibility>()
|
val EXPOSED_SUPER_INTERFACE by error3<KtTypeReference, EffectiveVisibility, FirMemberDeclaration<*>, EffectiveVisibility>()
|
||||||
val EXPOSED_SUPER_CLASS by error3<KtTypeReference, EffectiveVisibility, FirMemberDeclaration, EffectiveVisibility>()
|
val EXPOSED_SUPER_CLASS by error3<KtTypeReference, EffectiveVisibility, FirMemberDeclaration<*>, EffectiveVisibility>()
|
||||||
val EXPOSED_TYPE_PARAMETER_BOUND by error3<KtTypeReference, EffectiveVisibility, FirMemberDeclaration, EffectiveVisibility>()
|
val EXPOSED_TYPE_PARAMETER_BOUND by error3<KtTypeReference, EffectiveVisibility, FirMemberDeclaration<*>, EffectiveVisibility>()
|
||||||
|
|
||||||
// Modifiers
|
// Modifiers
|
||||||
val INAPPLICABLE_INFIX_MODIFIER by error0<PsiElement>()
|
val INAPPLICABLE_INFIX_MODIFIER by error0<PsiElement>()
|
||||||
@@ -313,7 +313,7 @@ object FirErrors {
|
|||||||
val ONLY_ONE_CLASS_BOUND_ALLOWED by error0<KtTypeReference>()
|
val ONLY_ONE_CLASS_BOUND_ALLOWED by error0<KtTypeReference>()
|
||||||
val REPEATED_BOUND by error0<KtTypeReference>()
|
val REPEATED_BOUND by error0<KtTypeReference>()
|
||||||
val CONFLICTING_UPPER_BOUNDS by error1<KtNamedDeclaration, FirTypeParameterSymbol>()
|
val CONFLICTING_UPPER_BOUNDS by error1<KtNamedDeclaration, FirTypeParameterSymbol>()
|
||||||
val NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER by error2<KtSimpleNameExpression, Name, FirDeclaration>()
|
val NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER by error2<KtSimpleNameExpression, Name, FirDeclaration<*>>()
|
||||||
val BOUND_ON_TYPE_ALIAS_PARAMETER_NOT_ALLOWED by error0<KtTypeReference>()
|
val BOUND_ON_TYPE_ALIAS_PARAMETER_NOT_ALLOWED by error0<KtTypeReference>()
|
||||||
val REIFIED_TYPE_PARAMETER_NO_INLINE by error0<KtTypeParameter>(SourceElementPositioningStrategies.REIFIED_MODIFIER)
|
val REIFIED_TYPE_PARAMETER_NO_INLINE by error0<KtTypeParameter>(SourceElementPositioningStrategies.REIFIED_MODIFIER)
|
||||||
val TYPE_PARAMETERS_NOT_ALLOWED by error0<KtDeclaration>(SourceElementPositioningStrategies.TYPE_PARAMETERS_LIST)
|
val TYPE_PARAMETERS_NOT_ALLOWED by error0<KtDeclaration>(SourceElementPositioningStrategies.TYPE_PARAMETERS_LIST)
|
||||||
@@ -338,7 +338,7 @@ object FirErrors {
|
|||||||
val EXPRESSION_OF_NULLABLE_TYPE_IN_CLASS_LITERAL_LHS by error1<PsiElement, ConeKotlinType>()
|
val EXPRESSION_OF_NULLABLE_TYPE_IN_CLASS_LITERAL_LHS by error1<PsiElement, ConeKotlinType>()
|
||||||
|
|
||||||
// overrides
|
// overrides
|
||||||
val NOTHING_TO_OVERRIDE by error1<KtModifierListOwner, FirMemberDeclaration>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER)
|
val NOTHING_TO_OVERRIDE by error1<KtModifierListOwner, FirMemberDeclaration<*>>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER)
|
||||||
val CANNOT_WEAKEN_ACCESS_PRIVILEGE by error3<KtModifierListOwner, Visibility, FirCallableDeclaration<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
val CANNOT_WEAKEN_ACCESS_PRIVILEGE by error3<KtModifierListOwner, Visibility, FirCallableDeclaration<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||||
val CANNOT_CHANGE_ACCESS_PRIVILEGE by error3<KtModifierListOwner, Visibility, FirCallableDeclaration<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
val CANNOT_CHANGE_ACCESS_PRIVILEGE by error3<KtModifierListOwner, Visibility, FirCallableDeclaration<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||||
val OVERRIDING_FINAL_MEMBER by error2<KtNamedDeclaration, FirCallableDeclaration<*>, Name>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER)
|
val OVERRIDING_FINAL_MEMBER by error2<KtNamedDeclaration, FirCallableDeclaration<*>, Name>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER)
|
||||||
@@ -350,13 +350,13 @@ object FirErrors {
|
|||||||
val MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED by error2<KtClassOrObject, FirClass<*>, FirCallableDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
val MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED by error2<KtClassOrObject, FirClass<*>, FirCallableDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
val OVERRIDING_FINAL_MEMBER_BY_DELEGATION by error2<KtClassOrObject, FirCallableDeclaration<*>, FirCallableDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
val OVERRIDING_FINAL_MEMBER_BY_DELEGATION by error2<KtClassOrObject, FirCallableDeclaration<*>, FirCallableDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
val DELEGATED_MEMBER_HIDES_SUPERTYPE_OVERRIDE by warning2<KtClassOrObject, FirCallableDeclaration<*>, FirCallableDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
val DELEGATED_MEMBER_HIDES_SUPERTYPE_OVERRIDE by warning2<KtClassOrObject, FirCallableDeclaration<*>, FirCallableDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
val RETURN_TYPE_MISMATCH_ON_OVERRIDE by error2<KtNamedDeclaration, FirMemberDeclaration, FirMemberDeclaration>(SourceElementPositioningStrategies.DECLARATION_RETURN_TYPE)
|
val RETURN_TYPE_MISMATCH_ON_OVERRIDE by error2<KtNamedDeclaration, FirMemberDeclaration<*>, FirMemberDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_RETURN_TYPE)
|
||||||
val PROPERTY_TYPE_MISMATCH_ON_OVERRIDE by error2<KtNamedDeclaration, FirMemberDeclaration, FirMemberDeclaration>(SourceElementPositioningStrategies.DECLARATION_RETURN_TYPE)
|
val PROPERTY_TYPE_MISMATCH_ON_OVERRIDE by error2<KtNamedDeclaration, FirMemberDeclaration<*>, FirMemberDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_RETURN_TYPE)
|
||||||
val VAR_TYPE_MISMATCH_ON_OVERRIDE by error2<KtNamedDeclaration, FirMemberDeclaration, FirMemberDeclaration>(SourceElementPositioningStrategies.DECLARATION_RETURN_TYPE)
|
val VAR_TYPE_MISMATCH_ON_OVERRIDE by error2<KtNamedDeclaration, FirMemberDeclaration<*>, FirMemberDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_RETURN_TYPE)
|
||||||
val VAR_OVERRIDDEN_BY_VAL by error2<KtNamedDeclaration, FirMemberDeclaration, FirMemberDeclaration>(SourceElementPositioningStrategies.VAL_OR_VAR_NODE)
|
val VAR_OVERRIDDEN_BY_VAL by error2<KtNamedDeclaration, FirMemberDeclaration<*>, FirMemberDeclaration<*>>(SourceElementPositioningStrategies.VAL_OR_VAR_NODE)
|
||||||
val NON_FINAL_MEMBER_IN_FINAL_CLASS by warning0<KtNamedDeclaration>(SourceElementPositioningStrategies.OPEN_MODIFIER)
|
val NON_FINAL_MEMBER_IN_FINAL_CLASS by warning0<KtNamedDeclaration>(SourceElementPositioningStrategies.OPEN_MODIFIER)
|
||||||
val NON_FINAL_MEMBER_IN_OBJECT by warning0<KtNamedDeclaration>(SourceElementPositioningStrategies.OPEN_MODIFIER)
|
val NON_FINAL_MEMBER_IN_OBJECT by warning0<KtNamedDeclaration>(SourceElementPositioningStrategies.OPEN_MODIFIER)
|
||||||
val VIRTUAL_MEMBER_HIDDEN by error2<KtNamedDeclaration, FirMemberDeclaration, FirRegularClass>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
val VIRTUAL_MEMBER_HIDDEN by error2<KtNamedDeclaration, FirMemberDeclaration<*>, FirRegularClass>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
|
|
||||||
// Redeclarations
|
// Redeclarations
|
||||||
val MANY_COMPANION_OBJECTS by error0<KtObjectDeclaration>(SourceElementPositioningStrategies.COMPANION_OBJECT)
|
val MANY_COMPANION_OBJECTS by error0<KtObjectDeclaration>(SourceElementPositioningStrategies.COMPANION_OBJECT)
|
||||||
@@ -369,11 +369,11 @@ object FirErrors {
|
|||||||
val LOCAL_INTERFACE_NOT_ALLOWED by error1<KtNamedDeclaration, Name>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
val LOCAL_INTERFACE_NOT_ALLOWED by error1<KtNamedDeclaration, Name>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
|
|
||||||
// Functions
|
// Functions
|
||||||
val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error2<KtFunction, FirMemberDeclaration, FirClass<*>>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
|
val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error2<KtFunction, FirMemberDeclaration<*>, FirClass<*>>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
|
||||||
val ABSTRACT_FUNCTION_WITH_BODY by error1<KtFunction, FirMemberDeclaration>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
|
val ABSTRACT_FUNCTION_WITH_BODY by error1<KtFunction, FirMemberDeclaration<*>>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
|
||||||
val NON_ABSTRACT_FUNCTION_WITH_NO_BODY by error1<KtFunction, FirMemberDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
val NON_ABSTRACT_FUNCTION_WITH_NO_BODY by error1<KtFunction, FirMemberDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||||
val PRIVATE_FUNCTION_WITH_NO_BODY by error1<KtFunction, FirMemberDeclaration>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
val PRIVATE_FUNCTION_WITH_NO_BODY by error1<KtFunction, FirMemberDeclaration<*>>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||||
val NON_MEMBER_FUNCTION_NO_BODY by error1<KtFunction, FirMemberDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
val NON_MEMBER_FUNCTION_NO_BODY by error1<KtFunction, FirMemberDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||||
val FUNCTION_DECLARATION_WITH_NO_NAME by error0<KtFunction>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
val FUNCTION_DECLARATION_WITH_NO_NAME by error0<KtFunction>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||||
val ANONYMOUS_FUNCTION_WITH_NAME by error0<KtFunction>()
|
val ANONYMOUS_FUNCTION_WITH_NAME by error0<KtFunction>()
|
||||||
val ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE by error0<KtParameter>(SourceElementPositioningStrategies.PARAMETER_DEFAULT_VALUE)
|
val ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE by error0<KtParameter>(SourceElementPositioningStrategies.PARAMETER_DEFAULT_VALUE)
|
||||||
@@ -392,7 +392,7 @@ object FirErrors {
|
|||||||
val FUN_INTERFACE_WITH_SUSPEND_FUNCTION by error0<KtDeclaration>(SourceElementPositioningStrategies.FUN_INTERFACE)
|
val FUN_INTERFACE_WITH_SUSPEND_FUNCTION by error0<KtDeclaration>(SourceElementPositioningStrategies.FUN_INTERFACE)
|
||||||
|
|
||||||
// Properties & accessors
|
// Properties & accessors
|
||||||
val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error2<KtModifierListOwner, FirMemberDeclaration, FirClass<*>>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
|
val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error2<KtModifierListOwner, FirMemberDeclaration<*>, FirClass<*>>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
|
||||||
val PRIVATE_PROPERTY_IN_INTERFACE by error0<KtProperty>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
val PRIVATE_PROPERTY_IN_INTERFACE by error0<KtProperty>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||||
val ABSTRACT_PROPERTY_WITH_INITIALIZER by error0<KtExpression>()
|
val ABSTRACT_PROPERTY_WITH_INITIALIZER by error0<KtExpression>()
|
||||||
val PROPERTY_INITIALIZER_IN_INTERFACE by error0<KtExpression>()
|
val PROPERTY_INITIALIZER_IN_INTERFACE by error0<KtExpression>()
|
||||||
|
|||||||
+2
-3
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector
|
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector
|
||||||
import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector
|
import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporterFactory
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporterFactory
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveProcessor
|
import org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveProcessor
|
||||||
@@ -30,9 +29,9 @@ class FirCheckersRunnerTransformer(private val diagnosticCollector: AbstractDiag
|
|||||||
return element
|
return element
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformFile(file: FirFile, data: Nothing?): FirDeclaration {
|
override fun transformFile(file: FirFile, data: Nothing?): FirFile {
|
||||||
val reporter = DiagnosticReporterFactory.createReporter()
|
val reporter = DiagnosticReporterFactory.createReporter()
|
||||||
diagnosticCollector.collectDiagnostics(file, reporter)
|
diagnosticCollector.collectDiagnostics(file, reporter)
|
||||||
return file
|
return file
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -11,10 +11,10 @@ import org.jetbrains.kotlin.fir.analysis.cfa.FirPropertyInitializationAnalyzer
|
|||||||
import org.jetbrains.kotlin.fir.analysis.cfa.FirReturnsImpliesAnalyzer
|
import org.jetbrains.kotlin.fir.analysis.cfa.FirReturnsImpliesAnalyzer
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.*
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.*
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirReservedUnderscoreDeclarationChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.syntax.FirDelegationInInterfaceSyntaxChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.syntax.FirDelegationInInterfaceSyntaxChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.syntax.FirFunctionTypeParametersSyntaxChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.syntax.FirFunctionTypeParametersSyntaxChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.syntax.FirTypeParameterSyntaxChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.syntax.FirTypeParameterSyntaxChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirReservedUnderscoreDeclarationChecker
|
|
||||||
|
|
||||||
object CommonDeclarationCheckers : DeclarationCheckers() {
|
object CommonDeclarationCheckers : DeclarationCheckers() {
|
||||||
override val basicDeclarationCheckers: Set<FirBasicDeclarationChecker>
|
override val basicDeclarationCheckers: Set<FirBasicDeclarationChecker>
|
||||||
|
|||||||
+4
-1
@@ -7,7 +7,10 @@ package org.jetbrains.kotlin.fir.analysis.checkers
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.cfa.AbstractFirPropertyInitializationChecker
|
import org.jetbrains.kotlin.fir.analysis.cfa.AbstractFirPropertyInitializationChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.*
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirBasicDeclarationChecker
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirMemberDeclarationChecker
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirSimpleFunctionChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.extended.*
|
import org.jetbrains.kotlin.fir.analysis.checkers.extended.*
|
||||||
|
|
||||||
object ExtendedDeclarationCheckers : DeclarationCheckers() {
|
object ExtendedDeclarationCheckers : DeclarationCheckers() {
|
||||||
|
|||||||
+2
-2
@@ -60,11 +60,11 @@ fun FirRegularClass.getAllowedAnnotationTargets(): Set<KotlinTarget> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirAnnotatedDeclaration.getRetentionAnnotation(): FirAnnotationCall? {
|
fun FirAnnotatedDeclaration<*>.getRetentionAnnotation(): FirAnnotationCall? {
|
||||||
return getAnnotationByFqName(StandardNames.FqNames.retention)
|
return getAnnotationByFqName(StandardNames.FqNames.retention)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirAnnotatedDeclaration.getTargetAnnotation(): FirAnnotationCall? {
|
fun FirAnnotatedDeclaration<*>.getTargetAnnotation(): FirAnnotationCall? {
|
||||||
return getAnnotationByFqName(StandardNames.FqNames.target)
|
return getAnnotationByFqName(StandardNames.FqNames.target)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-5
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.analysis.checkers
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||||
@@ -39,7 +38,7 @@ internal fun checkConstantArguments(
|
|||||||
}
|
}
|
||||||
expression is FirConstExpression<*>
|
expression is FirConstExpression<*>
|
||||||
|| expressionSymbol is FirEnumEntry
|
|| expressionSymbol is FirEnumEntry
|
||||||
|| (expressionSymbol as? FirMemberDeclaration)?.isConst == true
|
|| (expressionSymbol as? FirMemberDeclaration<*>)?.isConst == true
|
||||||
|| expressionSymbol is FirConstructor && classKindOfParent == ClassKind.ANNOTATION_CLASS -> {
|
|| expressionSymbol is FirConstructor && classKindOfParent == ClassKind.ANNOTATION_CLASS -> {
|
||||||
//DO NOTHING
|
//DO NOTHING
|
||||||
}
|
}
|
||||||
@@ -84,8 +83,8 @@ internal fun checkConstantArguments(
|
|||||||
expressionSymbol is FirField -> {
|
expressionSymbol is FirField -> {
|
||||||
//TODO: fix checking of Java fields initializer
|
//TODO: fix checking of Java fields initializer
|
||||||
if (
|
if (
|
||||||
!(expressionSymbol as FirMemberDeclaration).status.isStatic
|
!(expressionSymbol as FirMemberDeclaration<*>).status.isStatic
|
||||||
|| (expressionSymbol as FirMemberDeclaration).status.modality != Modality.FINAL
|
|| (expressionSymbol as FirMemberDeclaration<*>).status.modality != Modality.FINAL
|
||||||
)
|
)
|
||||||
return ConstantArgumentKind.NOT_CONST
|
return ConstantArgumentKind.NOT_CONST
|
||||||
}
|
}
|
||||||
@@ -189,7 +188,7 @@ internal fun checkConstantArguments(
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirTypedDeclaration?.getReferencedClass(session: FirSession): FirSymbolOwner<*>? =
|
private fun FirTypedDeclaration<*>?.getReferencedClass(session: FirSession): FirDeclaration<*>? =
|
||||||
this?.returnTypeRef
|
this?.returnTypeRef
|
||||||
?.coneTypeSafe<ConeLookupTagBasedType>()
|
?.coneTypeSafe<ConeLookupTagBasedType>()
|
||||||
?.lookupTag
|
?.lookupTag
|
||||||
|
|||||||
+7
-7
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.fir.analysis.checkers
|
|||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.name.CallableId
|
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
import org.jetbrains.kotlin.name.CallableId
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@@ -218,7 +218,7 @@ private val NO_NAME_PROVIDED = Name.special("<no name provided>")
|
|||||||
// explicitly.
|
// explicitly.
|
||||||
// - see tests with `fun () {}`.
|
// - see tests with `fun () {}`.
|
||||||
// you can't redeclare something that has no name.
|
// you can't redeclare something that has no name.
|
||||||
private fun FirDeclaration.isCollectable() = when (this) {
|
private fun FirDeclaration<*>.isCollectable() = when (this) {
|
||||||
is FirSimpleFunction -> source?.kind !is FirFakeSourceElementKind && name != NO_NAME_PROVIDED
|
is FirSimpleFunction -> source?.kind !is FirFakeSourceElementKind && name != NO_NAME_PROVIDED
|
||||||
is FirRegularClass -> name != NO_NAME_PROVIDED
|
is FirRegularClass -> name != NO_NAME_PROVIDED
|
||||||
else -> true
|
else -> true
|
||||||
@@ -230,10 +230,10 @@ private fun FirDeclaration.isCollectable() = when (this) {
|
|||||||
open class FirDeclarationInspector(
|
open class FirDeclarationInspector(
|
||||||
protected val presenter: FirDeclarationPresenter = FirDefaultDeclarationPresenter()
|
protected val presenter: FirDeclarationPresenter = FirDefaultDeclarationPresenter()
|
||||||
) {
|
) {
|
||||||
val otherDeclarations = mutableMapOf<String, MutableList<FirDeclaration>>()
|
val otherDeclarations = mutableMapOf<String, MutableList<FirDeclaration<*>>>()
|
||||||
val functionDeclarations = mutableMapOf<String, MutableList<FirSimpleFunction>>()
|
val functionDeclarations = mutableMapOf<String, MutableList<FirSimpleFunction>>()
|
||||||
|
|
||||||
fun collect(declaration: FirDeclaration) {
|
fun collect(declaration: FirDeclaration<*>) {
|
||||||
when {
|
when {
|
||||||
!declaration.isCollectable() -> {}
|
!declaration.isCollectable() -> {}
|
||||||
declaration is FirSimpleFunction -> collectFunction(presenter.represent(declaration), declaration)
|
declaration is FirSimpleFunction -> collectFunction(presenter.represent(declaration), declaration)
|
||||||
@@ -243,7 +243,7 @@ open class FirDeclarationInspector(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun collectNonFunctionDeclaration(key: String, declaration: FirDeclaration): MutableList<FirDeclaration> =
|
protected open fun collectNonFunctionDeclaration(key: String, declaration: FirDeclaration<*>): MutableList<FirDeclaration<*>> =
|
||||||
otherDeclarations.getOrPut(key) {
|
otherDeclarations.getOrPut(key) {
|
||||||
mutableListOf()
|
mutableListOf()
|
||||||
}.also {
|
}.also {
|
||||||
@@ -257,11 +257,11 @@ open class FirDeclarationInspector(
|
|||||||
it.add(declaration)
|
it.add(declaration)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun contains(declaration: FirDeclaration) = when (declaration) {
|
fun contains(declaration: FirDeclaration<*>) = when (declaration) {
|
||||||
is FirSimpleFunction -> presenter.represent(declaration) in functionDeclarations
|
is FirSimpleFunction -> presenter.represent(declaration) in functionDeclarations
|
||||||
is FirRegularClass -> presenter.represent(declaration) in otherDeclarations
|
is FirRegularClass -> presenter.represent(declaration) in otherDeclarations
|
||||||
is FirTypeAlias -> presenter.represent(declaration) in otherDeclarations
|
is FirTypeAlias -> presenter.represent(declaration) in otherDeclarations
|
||||||
is FirProperty -> presenter.represent(declaration) in otherDeclarations
|
is FirProperty -> presenter.represent(declaration) in otherDeclarations
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-10
@@ -12,9 +12,6 @@ import org.jetbrains.kotlin.descriptors.Visibility
|
|||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.*
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.*
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.modalityModifier
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.overrideModifier
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.visibilityModifier
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.getChild
|
import org.jetbrains.kotlin.fir.analysis.getChild
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
@@ -35,7 +32,10 @@ import org.jetbrains.kotlin.fir.symbols.impl.*
|
|||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.name.*
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.psi.KtModifierList
|
import org.jetbrains.kotlin.psi.KtModifierList
|
||||||
import org.jetbrains.kotlin.psi.KtParameter.VAL_VAR_TOKEN_SET
|
import org.jetbrains.kotlin.psi.KtParameter.VAL_VAR_TOKEN_SET
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierType
|
import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierType
|
||||||
@@ -134,7 +134,7 @@ inline fun <reified T : Any> FirQualifiedAccessExpression.getDeclaration(): T? {
|
|||||||
* Returns the ClassLikeDeclaration where the Fir object has been defined
|
* Returns the ClassLikeDeclaration where the Fir object has been defined
|
||||||
* or null if no proper declaration has been found.
|
* or null if no proper declaration has been found.
|
||||||
*/
|
*/
|
||||||
fun FirSymbolOwner<*>.getContainingClass(context: CheckerContext): FirClassLikeDeclaration<*>? =
|
fun FirDeclaration<*>.getContainingClass(context: CheckerContext): FirClassLikeDeclaration<*>? =
|
||||||
this.safeAs<FirCallableMemberDeclaration<*>>()?.containingClass()?.toSymbol(context.session)?.fir
|
this.safeAs<FirCallableMemberDeclaration<*>>()?.containingClass()?.toSymbol(context.session)?.fir
|
||||||
|
|
||||||
fun FirClassLikeSymbol<*>.outerClass(context: CheckerContext): FirClassLikeSymbol<*>? {
|
fun FirClassLikeSymbol<*>.outerClass(context: CheckerContext): FirClassLikeSymbol<*>? {
|
||||||
@@ -232,9 +232,9 @@ fun FirClass<*>.modality(): Modality? {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns implicit modality by FirMemberDeclaration
|
* returns implicit modality by FirMemberDeclaration<*>
|
||||||
*/
|
*/
|
||||||
fun FirMemberDeclaration.implicitModality(context: CheckerContext): Modality {
|
fun FirMemberDeclaration<*>.implicitModality(context: CheckerContext): Modality {
|
||||||
if (this is FirRegularClass && (this.classKind == ClassKind.CLASS || this.classKind == ClassKind.OBJECT)) {
|
if (this is FirRegularClass && (this.classKind == ClassKind.CLASS || this.classKind == ClassKind.OBJECT)) {
|
||||||
if (this.classKind == ClassKind.INTERFACE) return Modality.ABSTRACT
|
if (this.classKind == ClassKind.INTERFACE) return Modality.ABSTRACT
|
||||||
return Modality.FINAL
|
return Modality.FINAL
|
||||||
@@ -263,7 +263,7 @@ fun FirMemberDeclaration.implicitModality(context: CheckerContext): Modality {
|
|||||||
return Modality.FINAL
|
return Modality.FINAL
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirDeclaration.hasBody(): Boolean = when (this) {
|
private fun FirDeclaration<*>.hasBody(): Boolean = when (this) {
|
||||||
is FirSimpleFunction -> this.body != null && this.body !is FirEmptyExpressionBlock
|
is FirSimpleFunction -> this.body != null && this.body !is FirEmptyExpressionBlock
|
||||||
is FirProperty -> this.setter?.body !is FirEmptyExpressionBlock? || this.getter?.body !is FirEmptyExpressionBlock?
|
is FirProperty -> this.setter?.body !is FirEmptyExpressionBlock? || this.getter?.body !is FirEmptyExpressionBlock?
|
||||||
else -> false
|
else -> false
|
||||||
@@ -379,7 +379,7 @@ private fun lowerThanBound(context: ConeInferenceContext, argument: ConeKotlinTy
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirMemberDeclaration.isInlineOnly(): Boolean = isInline && hasAnnotation(INLINE_ONLY_ANNOTATION_CLASS_ID)
|
fun FirMemberDeclaration<*>.isInlineOnly(): Boolean = isInline && hasAnnotation(INLINE_ONLY_ANNOTATION_CLASS_ID)
|
||||||
|
|
||||||
fun isSubtypeForTypeMismatch(context: ConeInferenceContext, subtype: ConeKotlinType, supertype: ConeKotlinType): Boolean {
|
fun isSubtypeForTypeMismatch(context: ConeInferenceContext, subtype: ConeKotlinType, supertype: ConeKotlinType): Boolean {
|
||||||
val subtypeFullyExpanded = subtype.fullyExpandedType(context.session)
|
val subtypeFullyExpanded = subtype.fullyExpandedType(context.session)
|
||||||
@@ -508,7 +508,7 @@ private val FirSimpleFunction.matchesDataClassSyntheticMemberSignatures: Boolean
|
|||||||
(this.name == HASHCODE_NAME && matchesHashCodeSignature) ||
|
(this.name == HASHCODE_NAME && matchesHashCodeSignature) ||
|
||||||
(this.name == OperatorNameConventions.TO_STRING && matchesToStringSignature)
|
(this.name == OperatorNameConventions.TO_STRING && matchesToStringSignature)
|
||||||
|
|
||||||
private fun FirSymbolOwner<*>.getContainingClass(sessionHolder: SessionHolder): FirClassLikeDeclaration<*>? =
|
private fun FirDeclaration<*>.getContainingClass(sessionHolder: SessionHolder): FirClassLikeDeclaration<*>? =
|
||||||
this.safeAs<FirCallableMemberDeclaration<*>>()?.containingClass()?.toSymbol(sessionHolder.session)?.fir
|
this.safeAs<FirCallableMemberDeclaration<*>>()?.containingClass()?.toSymbol(sessionHolder.session)?.fir
|
||||||
|
|
||||||
// NB: we intentionally do not check return types
|
// NB: we intentionally do not check return types
|
||||||
|
|||||||
+4
-4
@@ -40,7 +40,7 @@ private data class FirSinceKotlinValue(
|
|||||||
val wasExperimentalMarkerClasses: List<FirRegularClassSymbol>
|
val wasExperimentalMarkerClasses: List<FirRegularClassSymbol>
|
||||||
)
|
)
|
||||||
|
|
||||||
fun FirAnnotatedDeclaration.checkSinceKotlinVersionAccessibility(context: CheckerContext): FirSinceKotlinAccessibility {
|
fun FirAnnotatedDeclaration<*>.checkSinceKotlinVersionAccessibility(context: CheckerContext): FirSinceKotlinAccessibility {
|
||||||
val value = getOwnSinceKotlinVersion(context.session)
|
val value = getOwnSinceKotlinVersion(context.session)
|
||||||
val version = value?.apiVersion
|
val version = value?.apiVersion
|
||||||
val languageVersionSettings = context.session.languageVersionSettings
|
val languageVersionSettings = context.session.languageVersionSettings
|
||||||
@@ -59,11 +59,11 @@ fun FirAnnotatedDeclaration.checkSinceKotlinVersionAccessibility(context: Checke
|
|||||||
return FirSinceKotlinAccessibility.NotAccessible(version)
|
return FirSinceKotlinAccessibility.NotAccessible(version)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirAnnotatedDeclaration.getOwnSinceKotlinVersion(session: FirSession): FirSinceKotlinValue? {
|
private fun FirAnnotatedDeclaration<*>.getOwnSinceKotlinVersion(session: FirSession): FirSinceKotlinValue? {
|
||||||
var result: FirSinceKotlinValue? = null
|
var result: FirSinceKotlinValue? = null
|
||||||
|
|
||||||
// TODO: use-site targeted annotations
|
// TODO: use-site targeted annotations
|
||||||
fun FirAnnotatedDeclaration.consider() {
|
fun FirAnnotatedDeclaration<*>.consider() {
|
||||||
val sinceKotlinSingleArgument = getAnnotationByFqName(SINCE_KOTLIN_FQ_NAME)?.arguments?.singleOrNull()
|
val sinceKotlinSingleArgument = getAnnotationByFqName(SINCE_KOTLIN_FQ_NAME)?.arguments?.singleOrNull()
|
||||||
val apiVersion = ((sinceKotlinSingleArgument as? FirConstExpression<*>)?.value as? String)?.let(ApiVersion.Companion::parse)
|
val apiVersion = ((sinceKotlinSingleArgument as? FirConstExpression<*>)?.value as? String)?.let(ApiVersion.Companion::parse)
|
||||||
if (apiVersion != null) {
|
if (apiVersion != null) {
|
||||||
@@ -90,7 +90,7 @@ private fun FirAnnotatedDeclaration.getOwnSinceKotlinVersion(session: FirSession
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirAnnotatedDeclaration.loadWasExperimentalMarkerClasses(): List<FirRegularClassSymbol> {
|
private fun FirAnnotatedDeclaration<*>.loadWasExperimentalMarkerClasses(): List<FirRegularClassSymbol> {
|
||||||
val wasExperimental = getAnnotationByFqName(OptInNames.WAS_EXPERIMENTAL_FQ_NAME) ?: return emptyList()
|
val wasExperimental = getAnnotationByFqName(OptInNames.WAS_EXPERIMENTAL_FQ_NAME) ?: return emptyList()
|
||||||
val annotationClasses = wasExperimental.findArgumentByName(OptInNames.WAS_EXPERIMENTAL_ANNOTATION_CLASS) ?: return emptyList()
|
val annotationClasses = wasExperimental.findArgumentByName(OptInNames.WAS_EXPERIMENTAL_ANNOTATION_CLASS) ?: return emptyList()
|
||||||
return annotationClasses.extractClassesFromArgument()
|
return annotationClasses.extractClassesFromArgument()
|
||||||
|
|||||||
+2
-2
@@ -22,7 +22,7 @@ abstract class CheckerContext {
|
|||||||
|
|
||||||
// Context
|
// Context
|
||||||
abstract val implicitReceiverStack: ImplicitReceiverStack
|
abstract val implicitReceiverStack: ImplicitReceiverStack
|
||||||
abstract val containingDeclarations: List<FirDeclaration>
|
abstract val containingDeclarations: List<FirDeclaration<*>>
|
||||||
abstract val qualifiedAccessOrAnnotationCalls: List<FirStatement>
|
abstract val qualifiedAccessOrAnnotationCalls: List<FirStatement>
|
||||||
abstract val getClassCalls: List<FirGetClassCall>
|
abstract val getClassCalls: List<FirGetClassCall>
|
||||||
|
|
||||||
@@ -62,7 +62,7 @@ abstract class CheckerContext {
|
|||||||
* the closest setter, while we want to keep searching for a getter.
|
* the closest setter, while we want to keep searching for a getter.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
inline fun <reified T : FirDeclaration> CheckerContext.findClosest(check: (T) -> Boolean = { true }): T? {
|
inline fun <reified T : FirDeclaration<*>> CheckerContext.findClosest(check: (T) -> Boolean = { true }): T? {
|
||||||
for (it in containingDeclarations.asReversed()) {
|
for (it in containingDeclarations.asReversed()) {
|
||||||
return (it as? T)?.takeIf(check) ?: continue
|
return (it as? T)?.takeIf(check) ?: continue
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
class PersistentCheckerContext private constructor(
|
class PersistentCheckerContext private constructor(
|
||||||
override val implicitReceiverStack: PersistentImplicitReceiverStack,
|
override val implicitReceiverStack: PersistentImplicitReceiverStack,
|
||||||
override val containingDeclarations: PersistentList<FirDeclaration>,
|
override val containingDeclarations: PersistentList<FirDeclaration<*>>,
|
||||||
override val qualifiedAccessOrAnnotationCalls: PersistentList<FirStatement>,
|
override val qualifiedAccessOrAnnotationCalls: PersistentList<FirStatement>,
|
||||||
override val getClassCalls: PersistentList<FirGetClassCall>,
|
override val getClassCalls: PersistentList<FirGetClassCall>,
|
||||||
override val sessionHolder: SessionHolder,
|
override val sessionHolder: SessionHolder,
|
||||||
@@ -58,7 +58,7 @@ class PersistentCheckerContext private constructor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addDeclaration(declaration: FirDeclaration): PersistentCheckerContext {
|
fun addDeclaration(declaration: FirDeclaration<*>): PersistentCheckerContext {
|
||||||
return PersistentCheckerContext(
|
return PersistentCheckerContext(
|
||||||
implicitReceiverStack,
|
implicitReceiverStack,
|
||||||
containingDeclarations.add(declaration),
|
containingDeclarations.add(declaration),
|
||||||
|
|||||||
+7
-5
@@ -19,7 +19,9 @@ import org.jetbrains.kotlin.fir.expressions.argumentMapping
|
|||||||
import org.jetbrains.kotlin.fir.resolve.fqName
|
import org.jetbrains.kotlin.fir.resolve.fqName
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.KtDestructuringDeclaration
|
||||||
|
import org.jetbrains.kotlin.psi.KtDestructuringDeclarationEntry
|
||||||
|
import org.jetbrains.kotlin.psi.KtLambdaExpression
|
||||||
import org.jetbrains.kotlin.resolve.AnnotationTargetList
|
import org.jetbrains.kotlin.resolve.AnnotationTargetList
|
||||||
import org.jetbrains.kotlin.resolve.AnnotationTargetLists
|
import org.jetbrains.kotlin.resolve.AnnotationTargetLists
|
||||||
|
|
||||||
@@ -28,7 +30,7 @@ object FirAnnotationChecker : FirAnnotatedDeclarationChecker() {
|
|||||||
private val deprecatedSinceKotlinClassId = FqName("kotlin.DeprecatedSinceKotlin")
|
private val deprecatedSinceKotlinClassId = FqName("kotlin.DeprecatedSinceKotlin")
|
||||||
|
|
||||||
override fun check(
|
override fun check(
|
||||||
declaration: FirAnnotatedDeclaration,
|
declaration: FirAnnotatedDeclaration<*>,
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
reporter: DiagnosticReporter
|
reporter: DiagnosticReporter
|
||||||
) {
|
) {
|
||||||
@@ -54,7 +56,7 @@ object FirAnnotationChecker : FirAnnotatedDeclarationChecker() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun checkAnnotationTarget(
|
private fun checkAnnotationTarget(
|
||||||
declaration: FirAnnotatedDeclaration,
|
declaration: FirAnnotatedDeclaration<*>,
|
||||||
annotation: FirAnnotationCall,
|
annotation: FirAnnotationCall,
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
reporter: DiagnosticReporter
|
reporter: DiagnosticReporter
|
||||||
@@ -106,7 +108,7 @@ object FirAnnotationChecker : FirAnnotatedDeclarationChecker() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun checkAnnotationUseSiteTarget(
|
private fun checkAnnotationUseSiteTarget(
|
||||||
annotated: FirAnnotatedDeclaration,
|
annotated: FirAnnotatedDeclaration<*>,
|
||||||
annotation: FirAnnotationCall,
|
annotation: FirAnnotationCall,
|
||||||
target: AnnotationUseSiteTarget,
|
target: AnnotationUseSiteTarget,
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
@@ -195,7 +197,7 @@ object FirAnnotationChecker : FirAnnotatedDeclarationChecker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getActualTargetList(annotated: FirDeclaration): AnnotationTargetList {
|
private fun getActualTargetList(annotated: FirDeclaration<*>): AnnotationTargetList {
|
||||||
return when (annotated) {
|
return when (annotated) {
|
||||||
is FirRegularClass -> {
|
is FirRegularClass -> {
|
||||||
AnnotationTargetList(
|
AnnotationTargetList(
|
||||||
|
|||||||
+3
-4
@@ -12,15 +12,14 @@ import org.jetbrains.kotlin.descriptors.ClassKind.ENUM_CLASS
|
|||||||
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
|
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.*
|
import org.jetbrains.kotlin.fir.analysis.checkers.*
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.checkConstantArguments
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.*
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds
|
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds.primitiveArrayTypeByElementType
|
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
|
import org.jetbrains.kotlin.name.StandardClassIds.primitiveArrayTypeByElementType
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds.unsignedArrayTypeByElementType
|
import org.jetbrains.kotlin.name.StandardClassIds.unsignedArrayTypeByElementType
|
||||||
|
|
||||||
object FirAnnotationClassDeclarationChecker : FirRegularClassChecker() {
|
object FirAnnotationClassDeclarationChecker : FirRegularClassChecker() {
|
||||||
@@ -44,7 +43,7 @@ object FirAnnotationClassDeclarationChecker : FirRegularClassChecker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkAnnotationClassMember(member: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
private fun checkAnnotationClassMember(member: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
when {
|
when {
|
||||||
member is FirConstructor && member.isPrimary -> {
|
member is FirConstructor && member.isPrimary -> {
|
||||||
for (parameter in member.valueParameters) {
|
for (parameter in member.valueParameters) {
|
||||||
|
|||||||
+3
-2
@@ -6,7 +6,8 @@
|
|||||||
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
|
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
||||||
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.extractArgumentTypeRefAndSource
|
import org.jetbrains.kotlin.fir.analysis.checkers.extractArgumentTypeRefAndSource
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||||
@@ -28,7 +29,7 @@ object FirClassVarianceChecker : FirClassChecker() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (member in declaration.declarations) {
|
for (member in declaration.declarations) {
|
||||||
if (member is FirMemberDeclaration) {
|
if (member is FirMemberDeclaration<*>) {
|
||||||
if (Visibilities.isPrivate(member.status.visibility)) {
|
if (Visibilities.isPrivate(member.status.visibility)) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|||||||
+19
-24
@@ -28,9 +28,9 @@ object FirConflictsChecker : FirBasicDeclarationChecker() {
|
|||||||
|
|
||||||
private class DeclarationInspector : FirDeclarationInspector() {
|
private class DeclarationInspector : FirDeclarationInspector() {
|
||||||
|
|
||||||
val declarationConflictingSymbols: HashMap<FirDeclaration, SmartSet<FirBasedSymbol<*>>> = hashMapOf()
|
val declarationConflictingSymbols: HashMap<FirDeclaration<*>, SmartSet<FirBasedSymbol<*>>> = hashMapOf()
|
||||||
|
|
||||||
override fun collectNonFunctionDeclaration(key: String, declaration: FirDeclaration): MutableList<FirDeclaration> =
|
override fun collectNonFunctionDeclaration(key: String, declaration: FirDeclaration<*>): MutableList<FirDeclaration<*>> =
|
||||||
super.collectNonFunctionDeclaration(key, declaration).also {
|
super.collectNonFunctionDeclaration(key, declaration).also {
|
||||||
collectLocalConflicts(declaration, it)
|
collectLocalConflicts(declaration, it)
|
||||||
}
|
}
|
||||||
@@ -40,30 +40,26 @@ object FirConflictsChecker : FirBasicDeclarationChecker() {
|
|||||||
collectLocalConflicts(declaration, it)
|
collectLocalConflicts(declaration, it)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun collectLocalConflicts(declaration: FirDeclaration, conflicting: List<FirDeclaration>) {
|
private fun collectLocalConflicts(declaration: FirDeclaration<*>, conflicting: List<FirDeclaration<*>>) {
|
||||||
val localConflicts = SmartSet.create<FirBasedSymbol<*>>()
|
val localConflicts = SmartSet.create<FirBasedSymbol<*>>()
|
||||||
for (otherDeclaration in conflicting) {
|
for (otherDeclaration in conflicting) {
|
||||||
if (otherDeclaration is FirSymbolOwner<*>) {
|
if (otherDeclaration != declaration && !isExpectAndActual(declaration, otherDeclaration)) {
|
||||||
if (otherDeclaration != declaration && declaration is FirSymbolOwner<*> &&
|
localConflicts.add(otherDeclaration.symbol)
|
||||||
!isExpectAndActual(declaration, otherDeclaration)
|
declarationConflictingSymbols.getOrPut(otherDeclaration) { SmartSet.create() }.add(declaration.symbol)
|
||||||
) {
|
|
||||||
localConflicts.add(otherDeclaration.symbol)
|
|
||||||
declarationConflictingSymbols.getOrPut(otherDeclaration) { SmartSet.create() }.add(declaration.symbol)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
declarationConflictingSymbols[declaration] = localConflicts
|
declarationConflictingSymbols[declaration] = localConflicts
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isExpectAndActual(declaration1: FirDeclaration, declaration2: FirDeclaration): Boolean {
|
private fun isExpectAndActual(declaration1: FirDeclaration<*>, declaration2: FirDeclaration<*>): Boolean {
|
||||||
if (declaration1 !is FirMemberDeclaration) return false
|
if (declaration1 !is FirMemberDeclaration<*>) return false
|
||||||
if (declaration2 !is FirMemberDeclaration) return false
|
if (declaration2 !is FirMemberDeclaration<*>) return false
|
||||||
return (declaration1.status.isExpect && declaration2.status.isActual) ||
|
return (declaration1.status.isExpect && declaration2.status.isActual) ||
|
||||||
(declaration1.status.isActual && declaration2.status.isExpect)
|
(declaration1.status.isActual && declaration2.status.isExpect)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun areCompatibleMainFunctions(
|
private fun areCompatibleMainFunctions(
|
||||||
declaration1: FirDeclaration, file1: FirFile, declaration2: FirDeclaration, file2: FirFile?
|
declaration1: FirDeclaration<*>, file1: FirFile, declaration2: FirDeclaration<*>, file2: FirFile?
|
||||||
): Boolean {
|
): Boolean {
|
||||||
// TODO: proper main function detector
|
// TODO: proper main function detector
|
||||||
if (declaration1 !is FirSimpleFunction || declaration2 !is FirSimpleFunction) return false
|
if (declaration1 !is FirSimpleFunction || declaration2 !is FirSimpleFunction) return false
|
||||||
@@ -72,7 +68,7 @@ object FirConflictsChecker : FirBasicDeclarationChecker() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun collectExternalConflict(
|
private fun collectExternalConflict(
|
||||||
declaration: FirDeclaration,
|
declaration: FirDeclaration<*>,
|
||||||
declarationPresentation: String,
|
declarationPresentation: String,
|
||||||
containingFile: FirFile,
|
containingFile: FirFile,
|
||||||
conflictingSymbol: FirBasedSymbol<*>,
|
conflictingSymbol: FirBasedSymbol<*>,
|
||||||
@@ -93,16 +89,15 @@ object FirConflictsChecker : FirBasicDeclarationChecker() {
|
|||||||
if (containingFile == actualConflictingFile) return // TODO: rewrite local decls checker to the same logic and then remove the check
|
if (containingFile == actualConflictingFile) return // TODO: rewrite local decls checker to the same logic and then remove the check
|
||||||
if (areCompatibleMainFunctions(declaration, containingFile, conflicting, actualConflictingFile)) return
|
if (areCompatibleMainFunctions(declaration, containingFile, conflicting, actualConflictingFile)) return
|
||||||
if (isExpectAndActual(declaration, conflicting)) return
|
if (isExpectAndActual(declaration, conflicting)) return
|
||||||
if (conflicting is FirMemberDeclaration && !(conflicting is FirSymbolOwner<*> &&
|
if (
|
||||||
session.visibilityChecker.isVisible(conflicting, session, containingFile, emptyList(), null))
|
conflicting is FirMemberDeclaration<*> &&
|
||||||
) {
|
!session.visibilityChecker.isVisible(conflicting, session, containingFile, emptyList(), null)
|
||||||
return
|
) return
|
||||||
}
|
|
||||||
declarationConflictingSymbols.getOrPut(declaration) { SmartSet.create() }.add(conflictingSymbol)
|
declarationConflictingSymbols.getOrPut(declaration) { SmartSet.create() }.add(conflictingSymbol)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun collectWithExternalConflicts(
|
fun collectWithExternalConflicts(
|
||||||
declaration: FirDeclaration,
|
declaration: FirDeclaration<*>,
|
||||||
containingFile: FirFile,
|
containingFile: FirFile,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
packageMemberScope: FirPackageMemberScope
|
packageMemberScope: FirPackageMemberScope
|
||||||
@@ -205,7 +200,7 @@ object FirConflictsChecker : FirBasicDeclarationChecker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
val inspector = DeclarationInspector()
|
val inspector = DeclarationInspector()
|
||||||
|
|
||||||
when (declaration) {
|
when (declaration) {
|
||||||
@@ -243,7 +238,7 @@ object FirConflictsChecker : FirBasicDeclarationChecker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirDeclarationPresenter.represent(declaration: FirDeclaration): String? =
|
private fun FirDeclarationPresenter.represent(declaration: FirDeclaration<*>): String? =
|
||||||
when (declaration) {
|
when (declaration) {
|
||||||
is FirSimpleFunction -> represent(declaration)
|
is FirSimpleFunction -> represent(declaration)
|
||||||
is FirRegularClass -> represent(declaration)
|
is FirRegularClass -> represent(declaration)
|
||||||
@@ -272,7 +267,7 @@ class FirNameConflictsTracker : FirNameConflictsTrackerComponent() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirDeclaration.onConstructors(action: (ctor: FirConstructor) -> Unit) {
|
private fun FirDeclaration<*>.onConstructors(action: (ctor: FirConstructor) -> Unit) {
|
||||||
|
|
||||||
class ClassConstructorVisitor : FirVisitorVoid() {
|
class ClassConstructorVisitor : FirVisitorVoid() {
|
||||||
override fun visitElement(element: FirElement) {}
|
override fun visitElement(element: FirElement) {}
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|||||||
|
|
||||||
object FirCyclicTypeBoundsChecker : FirMemberDeclarationChecker() {
|
object FirCyclicTypeBoundsChecker : FirMemberDeclarationChecker() {
|
||||||
|
|
||||||
override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (declaration is FirConstructor || declaration is FirTypeAlias) return
|
if (declaration is FirConstructor || declaration is FirTypeAlias) return
|
||||||
|
|
||||||
val processed = mutableSetOf<Name>()
|
val processed = mutableSetOf<Name>()
|
||||||
|
|||||||
+2
-2
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.fir.analysis.checkers.declaration
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
|
|
||||||
abstract class FirDeclarationChecker<in D : FirDeclaration> {
|
abstract class FirDeclarationChecker<in D : FirDeclaration<*>> {
|
||||||
abstract fun check(declaration: D, context: CheckerContext, reporter: DiagnosticReporter)
|
abstract fun check(declaration: D, context: CheckerContext, reporter: DiagnosticReporter)
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-6
@@ -42,7 +42,7 @@ private inline fun isInsideSpecificClass(
|
|||||||
context.containingDeclarations.asReversed().any { it is FirRegularClass && predicate.invoke(it) }
|
context.containingDeclarations.asReversed().any { it is FirRegularClass && predicate.invoke(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun FirMemberDeclaration.isEffectivelyExpect(
|
internal fun FirMemberDeclaration<*>.isEffectivelyExpect(
|
||||||
containingClass: FirRegularClass?,
|
containingClass: FirRegularClass?,
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
@@ -51,7 +51,7 @@ internal fun FirMemberDeclaration.isEffectivelyExpect(
|
|||||||
return containingClass != null && isInsideExpectClass(containingClass, context)
|
return containingClass != null && isInsideExpectClass(containingClass, context)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun FirMemberDeclaration.isEffectivelyExternal(
|
internal fun FirMemberDeclaration<*>.isEffectivelyExternal(
|
||||||
containingClass: FirRegularClass?,
|
containingClass: FirRegularClass?,
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
@@ -75,7 +75,7 @@ internal fun FirMemberDeclaration.isEffectivelyExternal(
|
|||||||
|
|
||||||
// TODO: check class too
|
// TODO: check class too
|
||||||
internal fun checkExpectDeclarationVisibilityAndBody(
|
internal fun checkExpectDeclarationVisibilityAndBody(
|
||||||
declaration: FirMemberDeclaration,
|
declaration: FirMemberDeclaration<*>,
|
||||||
source: FirSourceElement,
|
source: FirSourceElement,
|
||||||
reporter: DiagnosticReporter,
|
reporter: DiagnosticReporter,
|
||||||
context: CheckerContext
|
context: CheckerContext
|
||||||
@@ -191,14 +191,14 @@ internal fun FirRegularClass.isInlineOrValueClass(): Boolean {
|
|||||||
return isInline || hasModifier(KtTokens.VALUE_KEYWORD)
|
return isInline || hasModifier(KtTokens.VALUE_KEYWORD)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal val FirDeclaration.isEnumEntryInitializer: Boolean
|
internal val FirDeclaration<*>.isEnumEntryInitializer: Boolean
|
||||||
get() {
|
get() {
|
||||||
if (this !is FirConstructor || !this.isPrimary) return false
|
if (this !is FirConstructor || !this.isPrimary) return false
|
||||||
return (containingClassAttr as? ConeClassLookupTagWithFixedSymbol)?.symbol?.fir?.classKind == ClassKind.ENUM_ENTRY
|
return (containingClassAttr as? ConeClassLookupTagWithFixedSymbol)?.symbol?.fir?.classKind == ClassKind.ENUM_ENTRY
|
||||||
}
|
}
|
||||||
|
|
||||||
// contract: returns(true) implies (this is FirMemberDeclaration)
|
// contract: returns(true) implies (this is FirMemberDeclaration<*>)
|
||||||
internal val FirDeclaration.isLocalMember: Boolean
|
internal val FirDeclaration<*>.isLocalMember: Boolean
|
||||||
get() = when (this) {
|
get() = when (this) {
|
||||||
is FirProperty -> this.isLocal
|
is FirProperty -> this.isLocal
|
||||||
is FirRegularClass -> this.isLocal
|
is FirRegularClass -> this.isLocal
|
||||||
|
|||||||
+4
-4
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|||||||
|
|
||||||
// TODO: check why coneTypeSafe is necessary at some points inside
|
// TODO: check why coneTypeSafe is necessary at some points inside
|
||||||
object FirExposedVisibilityDeclarationChecker : FirMemberDeclarationChecker() {
|
object FirExposedVisibilityDeclarationChecker : FirMemberDeclarationChecker() {
|
||||||
override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
when (declaration) {
|
when (declaration) {
|
||||||
is FirTypeAlias -> checkTypeAlias(declaration, reporter, context)
|
is FirTypeAlias -> checkTypeAlias(declaration, reporter, context)
|
||||||
is FirProperty -> checkProperty(declaration, reporter, context)
|
is FirProperty -> checkProperty(declaration, reporter, context)
|
||||||
@@ -103,7 +103,7 @@ object FirExposedVisibilityDeclarationChecker : FirMemberDeclarationChecker() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun checkFunction(declaration: FirFunction<*>, reporter: DiagnosticReporter, context: CheckerContext) {
|
private fun checkFunction(declaration: FirFunction<*>, reporter: DiagnosticReporter, context: CheckerContext) {
|
||||||
val functionVisibility = (declaration as FirMemberDeclaration).effectiveVisibility
|
val functionVisibility = (declaration as FirMemberDeclaration<*>).effectiveVisibility
|
||||||
|
|
||||||
if (functionVisibility == EffectiveVisibility.Local) return
|
if (functionVisibility == EffectiveVisibility.Local) return
|
||||||
if (declaration !is FirConstructor) {
|
if (declaration !is FirConstructor) {
|
||||||
@@ -193,14 +193,14 @@ object FirExposedVisibilityDeclarationChecker : FirMemberDeclarationChecker() {
|
|||||||
private fun ConeKotlinType.findVisibilityExposure(
|
private fun ConeKotlinType.findVisibilityExposure(
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
base: EffectiveVisibility
|
base: EffectiveVisibility
|
||||||
): FirMemberDeclaration? {
|
): FirMemberDeclaration<*>? {
|
||||||
val type = this as? ConeClassLikeType ?: return null
|
val type = this as? ConeClassLikeType ?: return null
|
||||||
val fir = type.fullyExpandedType(context.session).lookupTag.toSymbol(context.session)?.let { firSymbol ->
|
val fir = type.fullyExpandedType(context.session).lookupTag.toSymbol(context.session)?.let { firSymbol ->
|
||||||
firSymbol.ensureResolved(FirResolvePhase.DECLARATIONS, context.session)
|
firSymbol.ensureResolved(FirResolvePhase.DECLARATIONS, context.session)
|
||||||
firSymbol.fir
|
firSymbol.fir
|
||||||
} ?: return null
|
} ?: return null
|
||||||
|
|
||||||
if (fir is FirMemberDeclaration) {
|
if (fir is FirMemberDeclaration<*>) {
|
||||||
val effectiveVisibility = fir.effectiveVisibility
|
val effectiveVisibility = fir.effectiveVisibility
|
||||||
when (effectiveVisibility.relation(base, context.session.typeContext)) {
|
when (effectiveVisibility.relation(base, context.session.typeContext)) {
|
||||||
EffectiveVisibility.Permissiveness.LESS,
|
EffectiveVisibility.Permissiveness.LESS,
|
||||||
|
|||||||
+2
-2
@@ -57,7 +57,7 @@ object FirImportsChecker : FirFileChecker() {
|
|||||||
if (classId != null) {
|
if (classId != null) {
|
||||||
val classFir = classId.resolveToClass(context) ?: return
|
val classFir = classId.resolveToClass(context) ?: return
|
||||||
if (classFir.classKind.isSingleton) return
|
if (classFir.classKind.isSingleton) return
|
||||||
|
|
||||||
if (!classFir.canBeImported(context, importedName)) {
|
if (!classFir.canBeImported(context, importedName)) {
|
||||||
reporter.reportOn(import.source, FirErrors.CANNOT_BE_IMPORTED, importedName, context)
|
reporter.reportOn(import.source, FirErrors.CANNOT_BE_IMPORTED, importedName, context)
|
||||||
}
|
}
|
||||||
@@ -167,4 +167,4 @@ object FirImportsChecker : FirFileChecker() {
|
|||||||
|
|
||||||
return hasStatic || !hasIllegal
|
return hasStatic || !hasIllegal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
|||||||
import org.jetbrains.kotlin.fir.declarations.isInfix
|
import org.jetbrains.kotlin.fir.declarations.isInfix
|
||||||
|
|
||||||
object FirInfixFunctionDeclarationChecker : FirMemberDeclarationChecker() {
|
object FirInfixFunctionDeclarationChecker : FirMemberDeclarationChecker() {
|
||||||
override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (declaration is FirSimpleFunction && declaration.isInfix) {
|
if (declaration is FirSimpleFunction && declaration.isInfix) {
|
||||||
if (declaration.valueParameters.size != 1 || !hasExtensionOrDispatchReceiver(declaration, context)) {
|
if (declaration.valueParameters.size != 1 || !hasExtensionOrDispatchReceiver(declaration, context)) {
|
||||||
reporter.reportOn(declaration.source, FirErrors.INAPPLICABLE_INFIX_MODIFIER, context)
|
reporter.reportOn(declaration.source, FirErrors.INAPPLICABLE_INFIX_MODIFIER, context)
|
||||||
|
|||||||
+2
-2
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
|
|||||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||||
|
|
||||||
object FirInlineDeclarationChecker : FirMemberDeclarationChecker() {
|
object FirInlineDeclarationChecker : FirMemberDeclarationChecker() {
|
||||||
override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (!declaration.isInline) return
|
if (!declaration.isInline) return
|
||||||
// local inline functions are prohibited
|
// local inline functions are prohibited
|
||||||
if (declaration.isLocalMember) return
|
if (declaration.isLocalMember) return
|
||||||
@@ -283,7 +283,7 @@ object FirInlineDeclarationChecker : FirMemberDeclarationChecker() {
|
|||||||
private fun FirBasedSymbol<*>.isDefinedInInlineFunction(): Boolean {
|
private fun FirBasedSymbol<*>.isDefinedInInlineFunction(): Boolean {
|
||||||
return when (val fir = this.fir) {
|
return when (val fir = this.fir) {
|
||||||
is FirAnonymousFunction -> true
|
is FirAnonymousFunction -> true
|
||||||
is FirMemberDeclaration -> fir.isLocalMember
|
is FirMemberDeclaration<*> -> fir.isLocalMember
|
||||||
is FirAnonymousObject -> true
|
is FirAnonymousObject -> true
|
||||||
is FirRegularClass -> fir.classId.isLocal
|
is FirRegularClass -> fir.classId.isLocal
|
||||||
else -> error("Unknown callable declaration type: ${fir.render()}")
|
else -> error("Unknown callable declaration type: ${fir.render()}")
|
||||||
|
|||||||
+4
-4
@@ -107,7 +107,7 @@ object FirModifierChecker : FirBasicDeclarationChecker() {
|
|||||||
secondModifier: FirModifier<*>,
|
secondModifier: FirModifier<*>,
|
||||||
reporter: DiagnosticReporter,
|
reporter: DiagnosticReporter,
|
||||||
reportedNodes: MutableSet<FirModifier<*>>,
|
reportedNodes: MutableSet<FirModifier<*>>,
|
||||||
owner: FirDeclaration?,
|
owner: FirDeclaration<*>?,
|
||||||
context: CheckerContext
|
context: CheckerContext
|
||||||
) {
|
) {
|
||||||
val firstToken = firstModifier.token
|
val firstToken = firstModifier.token
|
||||||
@@ -137,7 +137,7 @@ object FirModifierChecker : FirBasicDeclarationChecker() {
|
|||||||
|
|
||||||
private fun checkModifiers(
|
private fun checkModifiers(
|
||||||
list: FirModifierList,
|
list: FirModifierList,
|
||||||
owner: FirDeclaration,
|
owner: FirDeclaration<*>,
|
||||||
reporter: DiagnosticReporter,
|
reporter: DiagnosticReporter,
|
||||||
context: CheckerContext
|
context: CheckerContext
|
||||||
) {
|
) {
|
||||||
@@ -156,7 +156,7 @@ object FirModifierChecker : FirBasicDeclarationChecker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isDeclarationMappedToSourceCorrectly(declaration: FirDeclaration, source: FirSourceElement): Boolean =
|
private fun isDeclarationMappedToSourceCorrectly(declaration: FirDeclaration<*>, source: FirSourceElement): Boolean =
|
||||||
when (source.elementType) {
|
when (source.elementType) {
|
||||||
KtNodeTypes.CLASS -> declaration is FirClass<*>
|
KtNodeTypes.CLASS -> declaration is FirClass<*>
|
||||||
KtNodeTypes.OBJECT_DECLARATION -> declaration is FirClass<*>
|
KtNodeTypes.OBJECT_DECLARATION -> declaration is FirClass<*>
|
||||||
@@ -166,7 +166,7 @@ object FirModifierChecker : FirBasicDeclarationChecker() {
|
|||||||
else -> true
|
else -> true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (declaration is FirFile) return
|
if (declaration is FirFile) return
|
||||||
|
|
||||||
val source = declaration.source ?: return
|
val source = declaration.source ?: return
|
||||||
|
|||||||
+18
-18
@@ -90,8 +90,8 @@ object FirOverrideChecker : FirClassChecker() {
|
|||||||
overriddenSymbols: List<FirCallableSymbol<*>>,
|
overriddenSymbols: List<FirCallableSymbol<*>>,
|
||||||
): FirCallableDeclaration<*>? {
|
): FirCallableDeclaration<*>? {
|
||||||
for (overridden in overriddenSymbols) {
|
for (overridden in overriddenSymbols) {
|
||||||
if (overridden.fir !is FirMemberDeclaration) continue
|
if (overridden.fir !is FirMemberDeclaration<*>) continue
|
||||||
val modality = (overridden.fir as FirMemberDeclaration).status.modality
|
val modality = (overridden.fir as FirMemberDeclaration<*>).status.modality
|
||||||
val isEffectivelyFinal = modality == null || modality == Modality.FINAL
|
val isEffectivelyFinal = modality == null || modality == Modality.FINAL
|
||||||
if (isEffectivelyFinal) {
|
if (isEffectivelyFinal) {
|
||||||
return overridden.fir
|
return overridden.fir
|
||||||
@@ -102,7 +102,7 @@ object FirOverrideChecker : FirClassChecker() {
|
|||||||
|
|
||||||
private fun FirProperty.checkMutability(
|
private fun FirProperty.checkMutability(
|
||||||
overriddenSymbols: List<FirCallableSymbol<*>>,
|
overriddenSymbols: List<FirCallableSymbol<*>>,
|
||||||
): FirMemberDeclaration? {
|
): FirMemberDeclaration<*>? {
|
||||||
if (isVar) return null
|
if (isVar) return null
|
||||||
return overriddenSymbols.find { (it.fir as? FirProperty)?.isVar == true }?.fir?.safeAs()
|
return overriddenSymbols.find { (it.fir as? FirProperty)?.isVar == true }?.fir?.safeAs()
|
||||||
}
|
}
|
||||||
@@ -113,8 +113,8 @@ object FirOverrideChecker : FirClassChecker() {
|
|||||||
context: CheckerContext
|
context: CheckerContext
|
||||||
) {
|
) {
|
||||||
val visibilities = overriddenSymbols.mapNotNull {
|
val visibilities = overriddenSymbols.mapNotNull {
|
||||||
if (it.fir !is FirMemberDeclaration) return@mapNotNull null
|
if (it.fir !is FirMemberDeclaration<*>) return@mapNotNull null
|
||||||
it to (it.fir as FirMemberDeclaration).visibility
|
it to (it.fir as FirMemberDeclaration<*>).visibility
|
||||||
}.sortedBy { pair ->
|
}.sortedBy { pair ->
|
||||||
// Regard `null` compare as Int.MIN so that we can report CANNOT_CHANGE_... first deterministically
|
// Regard `null` compare as Int.MIN so that we can report CANNOT_CHANGE_... first deterministically
|
||||||
Visibilities.compare(visibility, pair.second) ?: Int.MIN_VALUE
|
Visibilities.compare(visibility, pair.second) ?: Int.MIN_VALUE
|
||||||
@@ -137,7 +137,7 @@ object FirOverrideChecker : FirClassChecker() {
|
|||||||
overriddenSymbols: List<FirCallableSymbol<*>>,
|
overriddenSymbols: List<FirCallableSymbol<*>>,
|
||||||
typeCheckerContext: AbstractTypeCheckerContext,
|
typeCheckerContext: AbstractTypeCheckerContext,
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
): FirMemberDeclaration? {
|
): FirMemberDeclaration<*>? {
|
||||||
val overridingReturnType = returnTypeRef.coneType
|
val overridingReturnType = returnTypeRef.coneType
|
||||||
|
|
||||||
// Don't report *_ON_OVERRIDE diagnostics according to an error return type. That should be reported separately.
|
// Don't report *_ON_OVERRIDE diagnostics according to an error return type. That should be reported separately.
|
||||||
@@ -232,13 +232,13 @@ object FirOverrideChecker : FirClassChecker() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("UNUSED_PARAMETER") // TODO: delete me after implementing body
|
@Suppress("UNUSED_PARAMETER") // TODO: delete me after implementing body
|
||||||
private fun DiagnosticReporter.reportNothingToOverride(declaration: FirMemberDeclaration, context: CheckerContext) {
|
private fun DiagnosticReporter.reportNothingToOverride(declaration: FirMemberDeclaration<*>, context: CheckerContext) {
|
||||||
// TODO: not ready yet, e.g., Collections
|
// TODO: not ready yet, e.g., Collections
|
||||||
// reportOn(declaration.source, FirErrors.NOTHING_TO_OVERRIDE, declaration, context)
|
// reportOn(declaration.source, FirErrors.NOTHING_TO_OVERRIDE, declaration, context)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun DiagnosticReporter.reportOverridingFinalMember(
|
private fun DiagnosticReporter.reportOverridingFinalMember(
|
||||||
overriding: FirMemberDeclaration,
|
overriding: FirMemberDeclaration<*>,
|
||||||
overridden: FirCallableDeclaration<*>,
|
overridden: FirCallableDeclaration<*>,
|
||||||
context: CheckerContext
|
context: CheckerContext
|
||||||
) {
|
) {
|
||||||
@@ -248,15 +248,15 @@ object FirOverrideChecker : FirClassChecker() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun DiagnosticReporter.reportVarOverriddenByVal(
|
private fun DiagnosticReporter.reportVarOverriddenByVal(
|
||||||
overriding: FirMemberDeclaration,
|
overriding: FirMemberDeclaration<*>,
|
||||||
overridden: FirMemberDeclaration,
|
overridden: FirMemberDeclaration<*>,
|
||||||
context: CheckerContext
|
context: CheckerContext
|
||||||
) {
|
) {
|
||||||
reportOn(overriding.source, FirErrors.VAR_OVERRIDDEN_BY_VAL, overriding, overridden, context)
|
reportOn(overriding.source, FirErrors.VAR_OVERRIDDEN_BY_VAL, overriding, overridden, context)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun DiagnosticReporter.reportCannotWeakenAccessPrivilege(
|
private fun DiagnosticReporter.reportCannotWeakenAccessPrivilege(
|
||||||
overriding: FirMemberDeclaration,
|
overriding: FirMemberDeclaration<*>,
|
||||||
overridden: FirCallableDeclaration<*>,
|
overridden: FirCallableDeclaration<*>,
|
||||||
context: CheckerContext
|
context: CheckerContext
|
||||||
) {
|
) {
|
||||||
@@ -272,7 +272,7 @@ object FirOverrideChecker : FirClassChecker() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun DiagnosticReporter.reportCannotChangeAccessPrivilege(
|
private fun DiagnosticReporter.reportCannotChangeAccessPrivilege(
|
||||||
overriding: FirMemberDeclaration,
|
overriding: FirMemberDeclaration<*>,
|
||||||
overridden: FirCallableDeclaration<*>,
|
overridden: FirCallableDeclaration<*>,
|
||||||
context: CheckerContext
|
context: CheckerContext
|
||||||
) {
|
) {
|
||||||
@@ -288,24 +288,24 @@ object FirOverrideChecker : FirClassChecker() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun DiagnosticReporter.reportReturnTypeMismatchOnFunction(
|
private fun DiagnosticReporter.reportReturnTypeMismatchOnFunction(
|
||||||
overriding: FirMemberDeclaration,
|
overriding: FirMemberDeclaration<*>,
|
||||||
overridden: FirMemberDeclaration,
|
overridden: FirMemberDeclaration<*>,
|
||||||
context: CheckerContext
|
context: CheckerContext
|
||||||
) {
|
) {
|
||||||
reportOn(overriding.source, FirErrors.RETURN_TYPE_MISMATCH_ON_OVERRIDE, overriding, overridden, context)
|
reportOn(overriding.source, FirErrors.RETURN_TYPE_MISMATCH_ON_OVERRIDE, overriding, overridden, context)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun DiagnosticReporter.reportTypeMismatchOnProperty(
|
private fun DiagnosticReporter.reportTypeMismatchOnProperty(
|
||||||
overriding: FirMemberDeclaration,
|
overriding: FirMemberDeclaration<*>,
|
||||||
overridden: FirMemberDeclaration,
|
overridden: FirMemberDeclaration<*>,
|
||||||
context: CheckerContext
|
context: CheckerContext
|
||||||
) {
|
) {
|
||||||
reportOn(overriding.source, FirErrors.PROPERTY_TYPE_MISMATCH_ON_OVERRIDE, overriding, overridden, context)
|
reportOn(overriding.source, FirErrors.PROPERTY_TYPE_MISMATCH_ON_OVERRIDE, overriding, overridden, context)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun DiagnosticReporter.reportTypeMismatchOnVariable(
|
private fun DiagnosticReporter.reportTypeMismatchOnVariable(
|
||||||
overriding: FirMemberDeclaration,
|
overriding: FirMemberDeclaration<*>,
|
||||||
overridden: FirMemberDeclaration,
|
overridden: FirMemberDeclaration<*>,
|
||||||
context: CheckerContext
|
context: CheckerContext
|
||||||
) {
|
) {
|
||||||
reportOn(overriding.source, FirErrors.VAR_TYPE_MISMATCH_ON_OVERRIDE, overriding, overridden, context)
|
reportOn(overriding.source, FirErrors.VAR_TYPE_MISMATCH_ON_OVERRIDE, overriding, overridden, context)
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.types.Variance
|
|||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
object FirProjectionRelationChecker : FirBasicDeclarationChecker() {
|
object FirProjectionRelationChecker : FirBasicDeclarationChecker() {
|
||||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (declaration is FirPropertyAccessor) {
|
if (declaration is FirPropertyAccessor) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.types.coneType
|
|||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
object FirSealedSupertypeChecker : FirMemberDeclarationChecker() {
|
object FirSealedSupertypeChecker : FirMemberDeclarationChecker() {
|
||||||
override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (declaration is FirClass<*>) {
|
if (declaration is FirClass<*>) {
|
||||||
// only the file declaration is present
|
// only the file declaration is present
|
||||||
if (declaration.classId.isLocal) {
|
if (declaration.classId.isLocal) {
|
||||||
|
|||||||
+2
-2
@@ -38,6 +38,6 @@ object FirThrowableSubclassChecker : FirClassChecker() {
|
|||||||
private fun FirClass<*>.hasGenericOuterDeclaration(context: CheckerContext) =
|
private fun FirClass<*>.hasGenericOuterDeclaration(context: CheckerContext) =
|
||||||
classId.isLocal && context.containingDeclarations.anyIsGeneric()
|
classId.isLocal && context.containingDeclarations.anyIsGeneric()
|
||||||
|
|
||||||
private fun Collection<FirDeclaration>.anyIsGeneric() =
|
private fun Collection<FirDeclaration<*>>.anyIsGeneric() =
|
||||||
any { it is FirTypeParameterRefsOwner && it.typeParameters.isNotEmpty() }
|
any { it is FirTypeParameterRefsOwner && it.typeParameters.isNotEmpty() }
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
|||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
|
||||||
object FirTypeAliasChecker : FirMemberDeclarationChecker() {
|
object FirTypeAliasChecker : FirMemberDeclarationChecker() {
|
||||||
override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (declaration !is FirTypeAlias) return
|
if (declaration !is FirTypeAlias) return
|
||||||
|
|
||||||
if (context.containingDeclarations.lastOrNull() !is FirFile) {
|
if (context.containingDeclarations.lastOrNull() !is FirFile) {
|
||||||
@@ -57,4 +57,4 @@ object FirTypeAliasChecker : FirMemberDeclarationChecker() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.getDanglingTypeConstraintsOrEmpty
|
|||||||
|
|
||||||
object FirTypeConstraintsChecker : FirBasicDeclarationChecker() {
|
object FirTypeConstraintsChecker : FirBasicDeclarationChecker() {
|
||||||
|
|
||||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (declaration !is FirTypeParameterRefsOwner) return
|
if (declaration !is FirTypeParameterRefsOwner) return
|
||||||
|
|
||||||
//basically we transfer errors, which were discovered in ast parsers
|
//basically we transfer errors, which were discovered in ast parsers
|
||||||
|
|||||||
+3
-3
@@ -34,7 +34,7 @@ object FirTypeParameterBoundsChecker : FirTypeParameterChecker() {
|
|||||||
checkFinalUpperBounds(declaration, containingDeclaration, context, reporter)
|
checkFinalUpperBounds(declaration, containingDeclaration, context, reporter)
|
||||||
checkExtensionFunctionTypeBound(declaration, context, reporter)
|
checkExtensionFunctionTypeBound(declaration, context, reporter)
|
||||||
|
|
||||||
if (containingDeclaration.safeAs<FirMemberDeclaration>()?.isInlineOnly() != true) {
|
if (containingDeclaration.safeAs<FirMemberDeclaration<*>>()?.isInlineOnly() != true) {
|
||||||
checkOnlyOneTypeParameterBound(declaration, context, reporter)
|
checkOnlyOneTypeParameterBound(declaration, context, reporter)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ object FirTypeParameterBoundsChecker : FirTypeParameterChecker() {
|
|||||||
|
|
||||||
private fun checkFinalUpperBounds(
|
private fun checkFinalUpperBounds(
|
||||||
declaration: FirTypeParameter,
|
declaration: FirTypeParameter,
|
||||||
containingDeclaration: FirDeclaration,
|
containingDeclaration: FirDeclaration<*>,
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
reporter: DiagnosticReporter
|
reporter: DiagnosticReporter
|
||||||
) {
|
) {
|
||||||
@@ -71,7 +71,7 @@ object FirTypeParameterBoundsChecker : FirTypeParameterChecker() {
|
|||||||
|
|
||||||
private fun checkTypeAliasBound(
|
private fun checkTypeAliasBound(
|
||||||
declaration: FirTypeParameter,
|
declaration: FirTypeParameter,
|
||||||
containingDeclaration: FirDeclaration,
|
containingDeclaration: FirDeclaration<*>,
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
reporter: DiagnosticReporter
|
reporter: DiagnosticReporter
|
||||||
) {
|
) {
|
||||||
|
|||||||
+2
-2
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
|||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
|
|
||||||
object FirUpperBoundViolatedDeclarationChecker : FirBasicDeclarationChecker() {
|
object FirUpperBoundViolatedDeclarationChecker : FirBasicDeclarationChecker() {
|
||||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (declaration is FirClass<*>) {
|
if (declaration is FirClass<*>) {
|
||||||
for (typeParameter in declaration.typeParameters) {
|
for (typeParameter in declaration.typeParameters) {
|
||||||
if (typeParameter is FirTypeParameter) {
|
if (typeParameter is FirTypeParameter) {
|
||||||
@@ -36,4 +36,4 @@ object FirUpperBoundViolatedDeclarationChecker : FirBasicDeclarationChecker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -47,7 +47,7 @@ object FirCallableReferenceChecker : FirQualifiedAccessExpressionChecker() {
|
|||||||
reporter.reportOn(source, FirErrors.CALLABLE_REFERENCE_TO_ANNOTATION_CONSTRUCTOR, context)
|
reporter.reportOn(source, FirErrors.CALLABLE_REFERENCE_TO_ANNOTATION_CONSTRUCTOR, context)
|
||||||
}
|
}
|
||||||
if ((referredDeclaration as? FirCallableMemberDeclaration<*>)?.isExtensionMember == true &&
|
if ((referredDeclaration as? FirCallableMemberDeclaration<*>)?.isExtensionMember == true &&
|
||||||
(referredDeclaration as? FirMemberDeclaration)?.isLocalMember == false
|
(referredDeclaration as? FirMemberDeclaration<*>)?.isLocalMember == false
|
||||||
) {
|
) {
|
||||||
reporter.reportOn(source, FirErrors.EXTENSION_IN_CLASS_REFERENCE_NOT_ALLOWED, referredDeclaration, context)
|
reporter.reportOn(source, FirErrors.EXTENSION_IN_CLASS_REFERENCE_NOT_ALLOWED, referredDeclaration, context)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -22,7 +22,7 @@ object FirExpressionAnnotationChecker : FirBasicExpressionChecker() {
|
|||||||
override fun check(expression: FirStatement, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(expression: FirStatement, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
// Declarations are checked separately
|
// Declarations are checked separately
|
||||||
// See KT-33658 about annotations on non-expression statements
|
// See KT-33658 about annotations on non-expression statements
|
||||||
if (expression is FirDeclaration ||
|
if (expression is FirDeclaration<*> ||
|
||||||
expression !is FirExpression ||
|
expression !is FirExpression ||
|
||||||
expression is FirBlock && expression.source?.kind == FirFakeSourceElementKind.DesugaredForLoop
|
expression is FirBlock && expression.source?.kind == FirFakeSourceElementKind.DesugaredForLoop
|
||||||
) return
|
) return
|
||||||
@@ -34,4 +34,4 @@ object FirExpressionAnnotationChecker : FirBasicExpressionChecker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -112,7 +112,7 @@ object FirReservedUnderscoreExpressionChecker : FirBasicExpressionChecker() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
object FirReservedUnderscoreDeclarationChecker : FirBasicDeclarationChecker() {
|
object FirReservedUnderscoreDeclarationChecker : FirBasicDeclarationChecker() {
|
||||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (
|
if (
|
||||||
declaration is FirClass<*> ||
|
declaration is FirClass<*> ||
|
||||||
declaration is FirFunction<*> ||
|
declaration is FirFunction<*> ||
|
||||||
@@ -141,7 +141,7 @@ object FirReservedUnderscoreDeclarationChecker : FirBasicDeclarationChecker() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun reportIfUnderscore(
|
private fun reportIfUnderscore(
|
||||||
declaration: FirDeclaration,
|
declaration: FirDeclaration<*>,
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
reporter: DiagnosticReporter,
|
reporter: DiagnosticReporter,
|
||||||
isSingleUnderscoreAllowed: Boolean = false
|
isSingleUnderscoreAllowed: Boolean = false
|
||||||
|
|||||||
+1
-2
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.fir.analysis.checkers.expression
|
package org.jetbrains.kotlin.fir.analysis.checkers.expression
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
||||||
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.isEnumEntryInitializer
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.isEnumEntryInitializer
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClass
|
import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClass
|
||||||
@@ -98,7 +97,7 @@ object FirUninitializedEnumChecker : FirQualifiedAccessExpressionChecker() {
|
|||||||
// INSTANCE(EnumCompanion2.foo())
|
// INSTANCE(EnumCompanion2.foo())
|
||||||
// }
|
// }
|
||||||
// find an accessed context within the same enum class.
|
// find an accessed context within the same enum class.
|
||||||
(it as? FirSymbolOwner<*>)?.getContainingClass(context) == enumClass
|
it.getContainingClass(context) == enumClass
|
||||||
} ?: return
|
} ?: return
|
||||||
|
|
||||||
val enumMemberProperties = enumClass.declarations.filterIsInstance<FirProperty>()
|
val enumMemberProperties = enumClass.declarations.filterIsInstance<FirProperty>()
|
||||||
|
|||||||
+2
-2
@@ -17,14 +17,14 @@ import org.jetbrains.kotlin.fir.declarations.FirProperty
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds
|
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.types.ConstantValueKind
|
import org.jetbrains.kotlin.types.ConstantValueKind
|
||||||
|
|
||||||
object RedundantExplicitTypeChecker : FirMemberDeclarationChecker() {
|
object RedundantExplicitTypeChecker : FirMemberDeclarationChecker() {
|
||||||
override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (declaration !is FirProperty) return
|
if (declaration !is FirProperty) return
|
||||||
if (!declaration.isLocal) return
|
if (!declaration.isLocal) return
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -21,13 +21,13 @@ import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
|||||||
import org.jetbrains.kotlin.fir.declarations.modality
|
import org.jetbrains.kotlin.fir.declarations.modality
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
|
|
||||||
object RedundantModalityModifierSyntaxChecker : FirDeclarationSyntaxChecker<FirMemberDeclaration, KtDeclaration>() {
|
object RedundantModalityModifierSyntaxChecker : FirDeclarationSyntaxChecker<FirMemberDeclaration<*>, KtDeclaration>() {
|
||||||
|
|
||||||
override fun isApplicable(element: FirMemberDeclaration, source: FirSourceElement): Boolean =
|
override fun isApplicable(element: FirMemberDeclaration<*>, source: FirSourceElement): Boolean =
|
||||||
source.kind !is FirFakeSourceElementKind
|
source.kind !is FirFakeSourceElementKind
|
||||||
|
|
||||||
override fun checkLightTree(
|
override fun checkLightTree(
|
||||||
element: FirMemberDeclaration,
|
element: FirMemberDeclaration<*>,
|
||||||
source: FirSourceElement,
|
source: FirSourceElement,
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
reporter: DiagnosticReporter
|
reporter: DiagnosticReporter
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.FirProperty
|
|||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||||
|
|
||||||
object RedundantSetterParameterTypeChecker : FirMemberDeclarationChecker() {
|
object RedundantSetterParameterTypeChecker : FirMemberDeclarationChecker() {
|
||||||
override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (declaration !is FirProperty) return
|
if (declaration !is FirProperty) return
|
||||||
val setter = declaration.setter ?: return
|
val setter = declaration.setter ?: return
|
||||||
if (setter is FirDefaultPropertyAccessor) return
|
if (setter is FirDefaultPropertyAccessor) return
|
||||||
|
|||||||
+6
-6
@@ -22,10 +22,10 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
|
|
||||||
object RedundantVisibilityModifierSyntaxChecker : FirDeclarationSyntaxChecker<FirDeclaration, KtDeclaration>() {
|
object RedundantVisibilityModifierSyntaxChecker : FirDeclarationSyntaxChecker<FirDeclaration<*>, KtDeclaration>() {
|
||||||
|
|
||||||
override fun checkLightTree(
|
override fun checkLightTree(
|
||||||
element: FirDeclaration,
|
element: FirDeclaration<*>,
|
||||||
source: FirSourceElement,
|
source: FirSourceElement,
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
reporter: DiagnosticReporter
|
reporter: DiagnosticReporter
|
||||||
@@ -33,14 +33,14 @@ object RedundantVisibilityModifierSyntaxChecker : FirDeclarationSyntaxChecker<Fi
|
|||||||
if (element is FirConstructor && source.kind is FirFakeSourceElementKind) return
|
if (element is FirConstructor && source.kind is FirFakeSourceElementKind) return
|
||||||
if (source is FirFakeSourceElement) return
|
if (source is FirFakeSourceElement) return
|
||||||
if (
|
if (
|
||||||
element !is FirMemberDeclaration
|
element !is FirMemberDeclaration<*>
|
||||||
&& !(element is FirPropertyAccessor && element.visibility == context.containingPropertyVisibility)
|
&& !(element is FirPropertyAccessor && element.visibility == context.containingPropertyVisibility)
|
||||||
) return
|
) return
|
||||||
|
|
||||||
val visibilityModifier = source.treeStructure.visibilityModifier(source.lighterASTNode)
|
val visibilityModifier = source.treeStructure.visibilityModifier(source.lighterASTNode)
|
||||||
val explicitVisibility = (visibilityModifier?.tokenType as? KtModifierKeywordToken)?.toVisibilityOrNull()
|
val explicitVisibility = (visibilityModifier?.tokenType as? KtModifierKeywordToken)?.toVisibilityOrNull()
|
||||||
val implicitVisibility = element.implicitVisibility(context)
|
val implicitVisibility = element.implicitVisibility(context)
|
||||||
val containingMemberDeclaration = context.findClosest<FirMemberDeclaration>()
|
val containingMemberDeclaration = context.findClosest<FirMemberDeclaration<*>>()
|
||||||
|
|
||||||
val redundantVisibility = when {
|
val redundantVisibility = when {
|
||||||
explicitVisibility == implicitVisibility -> implicitVisibility
|
explicitVisibility == implicitVisibility -> implicitVisibility
|
||||||
@@ -59,7 +59,7 @@ object RedundantVisibilityModifierSyntaxChecker : FirDeclarationSyntaxChecker<Fi
|
|||||||
reporter.reportOn(source, FirErrors.REDUNDANT_VISIBILITY_MODIFIER, context)
|
reporter.reportOn(source, FirErrors.REDUNDANT_VISIBILITY_MODIFIER, context)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirDeclaration.implicitVisibility(context: CheckerContext): Visibility {
|
private fun FirDeclaration<*>.implicitVisibility(context: CheckerContext): Visibility {
|
||||||
return when {
|
return when {
|
||||||
this is FirPropertyAccessor && isSetter && status.isOverride -> this.visibility
|
this is FirPropertyAccessor && isSetter && status.isOverride -> this.visibility
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ object RedundantVisibilityModifierSyntaxChecker : FirDeclarationSyntaxChecker<Fi
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun FirFunction<*>.visibility(): Visibility? {
|
private fun FirFunction<*>.visibility(): Visibility? {
|
||||||
(symbol.fir as? FirMemberDeclaration)?.visibility?.let {
|
(symbol.fir as? FirMemberDeclaration<*>)?.visibility?.let {
|
||||||
return it
|
return it
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-2
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.KtNodeTypes
|
|||||||
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
||||||
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.cfa.*
|
import org.jetbrains.kotlin.fir.analysis.cfa.*
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||||
@@ -32,7 +31,7 @@ import org.jetbrains.kotlin.fir.types.coneType
|
|||||||
|
|
||||||
object UnusedChecker : FirControlFlowChecker() {
|
object UnusedChecker : FirControlFlowChecker() {
|
||||||
override fun analyze(graph: ControlFlowGraph, reporter: DiagnosticReporter, context: CheckerContext) {
|
override fun analyze(graph: ControlFlowGraph, reporter: DiagnosticReporter, context: CheckerContext) {
|
||||||
if ((graph.declaration as? FirSymbolOwner<*>)?.getContainingClass(context)?.takeIf {
|
if (graph.declaration?.getContainingClass(context)?.takeIf {
|
||||||
!it.symbol.classId.isLocal
|
!it.symbol.classId.isLocal
|
||||||
} != null
|
} != null
|
||||||
) return
|
) return
|
||||||
|
|||||||
+1
-1
@@ -48,7 +48,7 @@ interface FirSyntaxChecker<in D : FirElement, P : PsiElement> {
|
|||||||
fun checkLightTree(element: D, source: FirSourceElement, context: CheckerContext, reporter: DiagnosticReporter)
|
fun checkLightTree(element: D, source: FirSourceElement, context: CheckerContext, reporter: DiagnosticReporter)
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class FirDeclarationSyntaxChecker<in D : FirDeclaration, P : PsiElement> :
|
abstract class FirDeclarationSyntaxChecker<in D : FirDeclaration<*>, P : PsiElement> :
|
||||||
FirDeclarationChecker<D>(),
|
FirDeclarationChecker<D>(),
|
||||||
FirSyntaxChecker<D, P> {
|
FirSyntaxChecker<D, P> {
|
||||||
final override fun check(declaration: D, context: CheckerContext, reporter: DiagnosticReporter) {
|
final override fun check(declaration: D, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
|
|||||||
+10
-6
@@ -5,22 +5,26 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.analysis.collectors
|
package org.jetbrains.kotlin.fir.analysis.collectors
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
||||||
import org.jetbrains.kotlin.fir.analysis.collectors.components.*
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.collectors.components.AbstractDiagnosticCollectorComponent
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirVarargArgumentsExpression
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.arguments
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.SessionHolder
|
import org.jetbrains.kotlin.fir.resolve.SessionHolder
|
||||||
|
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||||
|
import org.jetbrains.kotlin.fir.types.coneType
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
|
||||||
|
|
||||||
abstract class AbstractDiagnosticCollector(
|
abstract class AbstractDiagnosticCollector(
|
||||||
override val session: FirSession,
|
override val session: FirSession,
|
||||||
override val scopeSession: ScopeSession = ScopeSession(),
|
override val scopeSession: ScopeSession = ScopeSession(),
|
||||||
protected val createComponents: (DiagnosticReporter) -> List<AbstractDiagnosticCollectorComponent>,
|
protected val createComponents: (DiagnosticReporter) -> List<AbstractDiagnosticCollectorComponent>,
|
||||||
) : SessionHolder {
|
) : SessionHolder {
|
||||||
fun collectDiagnostics(firDeclaration: FirDeclaration, reporter: DiagnosticReporter) {
|
fun collectDiagnostics(firDeclaration: FirDeclaration<*>, reporter: DiagnosticReporter) {
|
||||||
val components = createComponents(reporter)
|
val components = createComponents(reporter)
|
||||||
val visitor = createVisitor(components)
|
val visitor = createVisitor(components)
|
||||||
firDeclaration.accept(visitor, null)
|
firDeclaration.accept(visitor, null)
|
||||||
|
|||||||
+6
-6
@@ -24,8 +24,8 @@ abstract class AbstractDiagnosticCollectorVisitor(
|
|||||||
@set:PrivateForInline var context: PersistentCheckerContext,
|
@set:PrivateForInline var context: PersistentCheckerContext,
|
||||||
) : FirDefaultVisitor<Unit, Nothing?>() {
|
) : FirDefaultVisitor<Unit, Nothing?>() {
|
||||||
|
|
||||||
protected open fun shouldVisitDeclaration(declaration: FirDeclaration) = true
|
protected open fun shouldVisitDeclaration(declaration: FirDeclaration<*>) = true
|
||||||
protected open fun onDeclarationExit(declaration: FirDeclaration) {}
|
protected open fun onDeclarationExit(declaration: FirDeclaration<*>) {}
|
||||||
|
|
||||||
protected open fun visitNestedElements(element: FirElement) {
|
protected open fun visitNestedElements(element: FirElement) {
|
||||||
element.acceptChildren(this, null)
|
element.acceptChildren(this, null)
|
||||||
@@ -204,7 +204,7 @@ abstract class AbstractDiagnosticCollectorVisitor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected inline fun visitWithDeclaration(
|
protected inline fun visitWithDeclaration(
|
||||||
declaration: FirDeclaration,
|
declaration: FirDeclaration<*>,
|
||||||
block: () -> Unit = { visitNestedElements(declaration) }
|
block: () -> Unit = { visitNestedElements(declaration) }
|
||||||
) {
|
) {
|
||||||
if (shouldVisitDeclaration(declaration)) {
|
if (shouldVisitDeclaration(declaration)) {
|
||||||
@@ -216,7 +216,7 @@ abstract class AbstractDiagnosticCollectorVisitor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun visitWithDeclarationAndReceiver(declaration: FirDeclaration, labelName: Name?, receiverTypeRef: FirTypeRef?) {
|
private fun visitWithDeclarationAndReceiver(declaration: FirDeclaration<*>, labelName: Name?, receiverTypeRef: FirTypeRef?) {
|
||||||
visitWithDeclaration(declaration) {
|
visitWithDeclaration(declaration) {
|
||||||
withLabelAndReceiverType(
|
withLabelAndReceiverType(
|
||||||
labelName,
|
labelName,
|
||||||
@@ -265,7 +265,7 @@ abstract class AbstractDiagnosticCollectorVisitor(
|
|||||||
|
|
||||||
|
|
||||||
@OptIn(PrivateForInline::class)
|
@OptIn(PrivateForInline::class)
|
||||||
inline fun <R> withDeclaration(declaration: FirDeclaration, block: () -> R): R {
|
inline fun <R> withDeclaration(declaration: FirDeclaration<*>, block: () -> R): R {
|
||||||
val existingContext = context
|
val existingContext = context
|
||||||
context = context.addDeclaration(declaration)
|
context = context.addDeclaration(declaration)
|
||||||
try {
|
try {
|
||||||
@@ -279,7 +279,7 @@ abstract class AbstractDiagnosticCollectorVisitor(
|
|||||||
@OptIn(PrivateForInline::class)
|
@OptIn(PrivateForInline::class)
|
||||||
inline fun <R> withLabelAndReceiverType(
|
inline fun <R> withLabelAndReceiverType(
|
||||||
labelName: Name?,
|
labelName: Name?,
|
||||||
owner: FirDeclaration,
|
owner: FirDeclaration<*>,
|
||||||
type: ConeKotlinType?,
|
type: ConeKotlinType?,
|
||||||
block: () -> R
|
block: () -> R
|
||||||
): R {
|
): R {
|
||||||
|
|||||||
+1
-2
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
|||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirDeclarationChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirDeclarationChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkersComponent
|
import org.jetbrains.kotlin.fir.analysis.checkersComponent
|
||||||
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
|
|
||||||
@@ -78,7 +77,7 @@ class DeclarationCheckersDiagnosticComponent(
|
|||||||
checkers.allBasicDeclarationCheckers.check(anonymousInitializer, data, reporter)
|
checkers.allBasicDeclarationCheckers.check(anonymousInitializer, data, reporter)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun <D : FirDeclaration> Collection<FirDeclarationChecker<D>>.check(
|
private fun <D : FirDeclaration<*>> Collection<FirDeclarationChecker<D>>.check(
|
||||||
declaration: D,
|
declaration: D,
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
reporter: DiagnosticReporter
|
reporter: DiagnosticReporter
|
||||||
|
|||||||
+2
-2
@@ -58,7 +58,7 @@ object FirDiagnosticRenderers {
|
|||||||
|
|
||||||
val NAME = Renderer { element: FirElement ->
|
val NAME = Renderer { element: FirElement ->
|
||||||
when (element) {
|
when (element) {
|
||||||
is FirMemberDeclaration -> DECLARATION_NAME.render(element)
|
is FirMemberDeclaration<*> -> DECLARATION_NAME.render(element)
|
||||||
is FirCallableDeclaration<*> -> element.symbol.callableId.callableName.asString()
|
is FirCallableDeclaration<*> -> element.symbol.callableId.callableName.asString()
|
||||||
else -> "???"
|
else -> "???"
|
||||||
}
|
}
|
||||||
@@ -68,7 +68,7 @@ object FirDiagnosticRenderers {
|
|||||||
visibility.externalDisplayName
|
visibility.externalDisplayName
|
||||||
}
|
}
|
||||||
|
|
||||||
val DECLARATION_NAME = Renderer { declaration: FirMemberDeclaration ->
|
val DECLARATION_NAME = Renderer { declaration: FirMemberDeclaration<*> ->
|
||||||
val name = when (declaration) {
|
val name = when (declaration) {
|
||||||
is FirProperty -> declaration.name
|
is FirProperty -> declaration.name
|
||||||
is FirSimpleFunction -> declaration.name
|
is FirSimpleFunction -> declaration.name
|
||||||
|
|||||||
@@ -376,9 +376,9 @@ class MultiModuleHtmlFirDump(private val outputRoot: File) {
|
|||||||
visitElement(regularClass)
|
visitElement(regularClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun indexDeclaration(symbolOwner: FirSymbolOwner<*>) {
|
fun indexDeclaration(declaration: FirDeclaration<*>) {
|
||||||
symbols[symbolOwner.symbol] = location
|
symbols[declaration.symbol] = location
|
||||||
symbolIds[symbolOwner.symbol] = symbolCounter++
|
symbolIds[declaration.symbol] = symbolCounter++
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun <F : FirVariable<F>> visitVariable(variable: FirVariable<F>) {
|
override fun <F : FirVariable<F>> visitVariable(variable: FirVariable<F>) {
|
||||||
@@ -912,7 +912,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FlowContent.generate(memberDeclaration: FirMemberDeclaration) {
|
private fun FlowContent.generate(memberDeclaration: FirMemberDeclaration<*>) {
|
||||||
when (memberDeclaration) {
|
when (memberDeclaration) {
|
||||||
is FirEnumEntry -> generate(memberDeclaration)
|
is FirEnumEntry -> generate(memberDeclaration)
|
||||||
is FirRegularClass -> generate(memberDeclaration)
|
is FirRegularClass -> generate(memberDeclaration)
|
||||||
@@ -1524,7 +1524,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
|
|||||||
is FirConstExpression<*> -> generate(expression)
|
is FirConstExpression<*> -> generate(expression)
|
||||||
is FirReturnExpression -> {
|
is FirReturnExpression -> {
|
||||||
span("return-label") {
|
span("return-label") {
|
||||||
symbolRef((expression.target.labeledElement as? FirSymbolOwner<*>)?.symbol) {
|
symbolRef(expression.target.labeledElement.symbol) {
|
||||||
+"^"
|
+"^"
|
||||||
+(expression.target.labelName ?: "")
|
+(expression.target.labelName ?: "")
|
||||||
}
|
}
|
||||||
@@ -1682,7 +1682,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FlowContent.generateDeclarations(declarations: List<FirDeclaration>) {
|
private fun FlowContent.generateDeclarations(declarations: List<FirDeclaration<*>>) {
|
||||||
if (declarations.isNotEmpty()) {
|
if (declarations.isNotEmpty()) {
|
||||||
+" {"
|
+" {"
|
||||||
br
|
br
|
||||||
@@ -1767,10 +1767,10 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FlowContent.generate(declaration: FirDeclaration) {
|
private fun FlowContent.generate(declaration: FirDeclaration<*>) {
|
||||||
when (declaration) {
|
when (declaration) {
|
||||||
is FirAnonymousInitializer -> generate(declaration)
|
is FirAnonymousInitializer -> generate(declaration)
|
||||||
is FirMemberDeclaration -> generate(declaration)
|
is FirMemberDeclaration<*> -> generate(declaration)
|
||||||
else -> unsupported(declaration)
|
else -> unsupported(declaration)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
|||||||
import org.jetbrains.kotlin.fir.moduleData
|
import org.jetbrains.kotlin.fir.moduleData
|
||||||
|
|
||||||
class FirJvmModuleVisibilityChecker(private val session: FirSession) : FirModuleVisibilityChecker {
|
class FirJvmModuleVisibilityChecker(private val session: FirSession) : FirModuleVisibilityChecker {
|
||||||
override fun isInFriendModule(declaration: FirMemberDeclaration): Boolean {
|
override fun isInFriendModule(declaration: FirMemberDeclaration<*>): Boolean {
|
||||||
val useSiteModuleData = session.moduleData
|
val useSiteModuleData = session.moduleData
|
||||||
val declarationModuleData = declaration.moduleData
|
val declarationModuleData = declaration.moduleData
|
||||||
return useSiteModuleData == declarationModuleData || declarationModuleData in useSiteModuleData.friendDependencies
|
return useSiteModuleData == declarationModuleData || declarationModuleData in useSiteModuleData.friendDependencies
|
||||||
|
|||||||
+3
-3
@@ -191,11 +191,11 @@ fun deserializeClassToSymbol(
|
|||||||
addCloneForArrayIfNeeded(classId, context.dispatchReceiver)
|
addCloneForArrayIfNeeded(classId, context.dispatchReceiver)
|
||||||
addSerializableIfNeeded(classId)
|
addSerializableIfNeeded(classId)
|
||||||
|
|
||||||
declarations.sortWith(object : Comparator<FirDeclaration> {
|
declarations.sortWith(object : Comparator<FirDeclaration<*>> {
|
||||||
override fun compare(a: FirDeclaration, b: FirDeclaration): Int {
|
override fun compare(a: FirDeclaration<*>, b: FirDeclaration<*>): Int {
|
||||||
// Reorder members based on their type and name only.
|
// Reorder members based on their type and name only.
|
||||||
// See FE 1.0's [DeserializedMemberScope#addMembers].
|
// See FE 1.0's [DeserializedMemberScope#addMembers].
|
||||||
if (a is FirMemberDeclaration && b is FirMemberDeclaration) {
|
if (a is FirMemberDeclaration<*> && b is FirMemberDeclaration<*>) {
|
||||||
return FirMemberDeclarationComparator.TypeAndNameComparator.compare(a, b)
|
return FirMemberDeclarationComparator.TypeAndNameComparator.compare(a, b)
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
+5
-5
@@ -58,7 +58,7 @@ import org.jetbrains.kotlin.types.TypeApproximatorConfiguration
|
|||||||
class FirElementSerializer private constructor(
|
class FirElementSerializer private constructor(
|
||||||
private val session: FirSession,
|
private val session: FirSession,
|
||||||
private val scopeSession: ScopeSession,
|
private val scopeSession: ScopeSession,
|
||||||
private val containingDeclaration: FirDeclaration?,
|
private val containingDeclaration: FirDeclaration<*>?,
|
||||||
private val typeParameters: Interner<FirTypeParameter>,
|
private val typeParameters: Interner<FirTypeParameter>,
|
||||||
private val extension: FirSerializerExtension,
|
private val extension: FirSerializerExtension,
|
||||||
private val typeTable: MutableTypeTable,
|
private val typeTable: MutableTypeTable,
|
||||||
@@ -681,7 +681,7 @@ class FirElementSerializer private constructor(
|
|||||||
}
|
}
|
||||||
is ConeTypeParameterType -> {
|
is ConeTypeParameterType -> {
|
||||||
val typeParameter = type.lookupTag.typeParameterSymbol.fir
|
val typeParameter = type.lookupTag.typeParameterSymbol.fir
|
||||||
if (typeParameter in (containingDeclaration as? FirMemberDeclaration)?.typeParameters ?: emptyList()) {
|
if (typeParameter in (containingDeclaration as? FirMemberDeclaration<*>)?.typeParameters ?: emptyList()) {
|
||||||
builder.typeParameterName = getSimpleNameIndex(typeParameter.name)
|
builder.typeParameterName = getSimpleNameIndex(typeParameter.name)
|
||||||
} else {
|
} else {
|
||||||
builder.typeParameter = getTypeParameterId(typeParameter)
|
builder.typeParameter = getTypeParameterId(typeParameter)
|
||||||
@@ -820,7 +820,7 @@ class FirElementSerializer private constructor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createChildSerializer(declaration: FirDeclaration): FirElementSerializer =
|
private fun createChildSerializer(declaration: FirDeclaration<*>): FirElementSerializer =
|
||||||
FirElementSerializer(
|
FirElementSerializer(
|
||||||
session, scopeSession, declaration, Interner(typeParameters), extension,
|
session, scopeSession, declaration, Interner(typeParameters), extension,
|
||||||
typeTable, versionRequirementTable, serializeTypeTableToFunction = false,
|
typeTable, versionRequirementTable, serializeTypeTableToFunction = false,
|
||||||
@@ -832,7 +832,7 @@ class FirElementSerializer private constructor(
|
|||||||
|
|
||||||
private fun useTypeTable(): Boolean = extension.shouldUseTypeTable()
|
private fun useTypeTable(): Boolean = extension.shouldUseTypeTable()
|
||||||
|
|
||||||
private fun FirDeclaration.hasInlineClassTypesInSignature(): Boolean {
|
private fun FirDeclaration<*>.hasInlineClassTypesInSignature(): Boolean {
|
||||||
// TODO
|
// TODO
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -927,7 +927,7 @@ class FirElementSerializer private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun normalizeVisibility(declaration: FirMemberDeclaration): Visibility {
|
private fun normalizeVisibility(declaration: FirMemberDeclaration<*>): Visibility {
|
||||||
return declaration.visibility.normalize()
|
return declaration.visibility.normalize()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
-10
@@ -12,28 +12,28 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
|||||||
import org.jetbrains.kotlin.fir.signaturer.FirMangler
|
import org.jetbrains.kotlin.fir.signaturer.FirMangler
|
||||||
|
|
||||||
@NoMutableState
|
@NoMutableState
|
||||||
class FirJvmKotlinMangler(private val session: FirSession) : AbstractKotlinMangler<FirDeclaration>(), FirMangler {
|
class FirJvmKotlinMangler(private val session: FirSession) : AbstractKotlinMangler<FirDeclaration<*>>(), FirMangler {
|
||||||
|
|
||||||
override val FirDeclaration.mangleString: String
|
override val FirDeclaration<*>.mangleString: String
|
||||||
get() = getMangleComputer(MangleMode.FULL).computeMangle(this)
|
get() = getMangleComputer(MangleMode.FULL).computeMangle(this)
|
||||||
|
|
||||||
override val FirDeclaration.signatureString: String
|
override val FirDeclaration<*>.signatureString: String
|
||||||
get() = getMangleComputer(MangleMode.SIGNATURE).computeMangle(this)
|
get() = getMangleComputer(MangleMode.SIGNATURE).computeMangle(this)
|
||||||
|
|
||||||
override val FirDeclaration.fqnString: String
|
override val FirDeclaration<*>.fqnString: String
|
||||||
get() = getMangleComputer(MangleMode.FQNAME).computeMangle(this)
|
get() = getMangleComputer(MangleMode.FQNAME).computeMangle(this)
|
||||||
|
|
||||||
override fun FirDeclaration.isExported(): Boolean = true
|
override fun FirDeclaration<*>.isExported(): Boolean = true
|
||||||
|
|
||||||
override fun getExportChecker(): KotlinExportChecker<FirDeclaration> {
|
override fun getExportChecker(): KotlinExportChecker<FirDeclaration<*>> {
|
||||||
return object : KotlinExportChecker<FirDeclaration> {
|
return object : KotlinExportChecker<FirDeclaration<*>> {
|
||||||
override fun check(declaration: FirDeclaration, type: SpecialDeclarationType): Boolean = true
|
override fun check(declaration: FirDeclaration<*>, type: SpecialDeclarationType): Boolean = true
|
||||||
|
|
||||||
override fun FirDeclaration.isPlatformSpecificExported(): Boolean = true
|
override fun FirDeclaration<*>.isPlatformSpecificExported(): Boolean = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getMangleComputer(mode: MangleMode): KotlinMangleComputer<FirDeclaration> {
|
override fun getMangleComputer(mode: MangleMode): KotlinMangleComputer<FirDeclaration<*>> {
|
||||||
return FirJvmMangleComputer(StringBuilder(256), mode, session)
|
return FirJvmMangleComputer(StringBuilder(256), mode, session)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-10
@@ -12,8 +12,8 @@ import org.jetbrains.kotlin.backend.common.serialization.mangle.collectForMangle
|
|||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.firProvider
|
import org.jetbrains.kotlin.fir.resolve.firProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.symbolProvider
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.symbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
@@ -29,9 +29,9 @@ open class FirJvmMangleComputer(
|
|||||||
private val builder: StringBuilder,
|
private val builder: StringBuilder,
|
||||||
private val mode: MangleMode,
|
private val mode: MangleMode,
|
||||||
private val session: FirSession
|
private val session: FirSession
|
||||||
) : FirVisitor<Unit, Boolean>(), KotlinMangleComputer<FirDeclaration> {
|
) : FirVisitor<Unit, Boolean>(), KotlinMangleComputer<FirDeclaration<*>> {
|
||||||
|
|
||||||
private val typeParameterContainer = ArrayList<FirMemberDeclaration>(4)
|
private val typeParameterContainer = ArrayList<FirMemberDeclaration<*>>(4)
|
||||||
|
|
||||||
private var isRealExpect = false
|
private var isRealExpect = false
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@ open class FirJvmMangleComputer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirDeclaration.visitParent() {
|
private fun FirDeclaration<*>.visitParent() {
|
||||||
val (parentPackageFqName, parentClassId) = when (this) {
|
val (parentPackageFqName, parentClassId) = when (this) {
|
||||||
is FirCallableMemberDeclaration<*> -> this.containingClass()?.classId?.let { it.packageFqName to it } ?: return
|
is FirCallableMemberDeclaration<*> -> this.containingClass()?.classId?.let { it.packageFqName to it } ?: return
|
||||||
is FirClassLikeDeclaration<*> -> this.symbol.classId.let { it.packageFqName to it.outerClassId }
|
is FirClassLikeDeclaration<*> -> this.symbol.classId.let { it.packageFqName to it.outerClassId }
|
||||||
@@ -98,7 +98,7 @@ open class FirJvmMangleComputer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirDeclaration.mangleSimpleDeclaration(name: String) {
|
private fun FirDeclaration<*>.mangleSimpleDeclaration(name: String) {
|
||||||
val l = builder.length
|
val l = builder.length
|
||||||
visitParent()
|
visitParent()
|
||||||
|
|
||||||
@@ -109,11 +109,11 @@ open class FirJvmMangleComputer(
|
|||||||
builder.appendName(name)
|
builder.appendName(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirFunction<*>.mangleFunction(isCtor: Boolean, isStatic: Boolean, container: FirDeclaration) {
|
private fun FirFunction<*>.mangleFunction(isCtor: Boolean, isStatic: Boolean, container: FirDeclaration<*>) {
|
||||||
|
|
||||||
isRealExpect = isRealExpect || (this as? FirMemberDeclaration)?.isExpect == true
|
isRealExpect = isRealExpect || (this as? FirMemberDeclaration<*>)?.isExpect == true
|
||||||
|
|
||||||
if (container is FirMemberDeclaration) {
|
if (container is FirMemberDeclaration<*>) {
|
||||||
typeParameterContainer.add(container)
|
typeParameterContainer.add(container)
|
||||||
}
|
}
|
||||||
visitParent()
|
visitParent()
|
||||||
@@ -164,7 +164,7 @@ open class FirJvmMangleComputer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirTypeParameter.effectiveParent(): FirMemberDeclaration {
|
private fun FirTypeParameter.effectiveParent(): FirMemberDeclaration<*> {
|
||||||
for (parent in typeParameterContainer) {
|
for (parent in typeParameterContainer) {
|
||||||
if (this in parent.typeParameters) {
|
if (this in parent.typeParameters) {
|
||||||
return parent
|
return parent
|
||||||
@@ -315,7 +315,7 @@ open class FirJvmMangleComputer(
|
|||||||
override fun visitConstructor(constructor: FirConstructor, data: Boolean) =
|
override fun visitConstructor(constructor: FirConstructor, data: Boolean) =
|
||||||
constructor.mangleFunction(isCtor = true, isStatic = false, constructor)
|
constructor.mangleFunction(isCtor = true, isStatic = false, constructor)
|
||||||
|
|
||||||
override fun computeMangle(declaration: FirDeclaration): String {
|
override fun computeMangle(declaration: FirDeclaration<*>): String {
|
||||||
declaration.accept(this, true)
|
declaration.accept(this, true)
|
||||||
return builder.toString()
|
return builder.toString()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ class Fir2IrConverter(
|
|||||||
return irClass
|
return irClass
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun delegatedMembers(irClass: IrClass): List<FirDeclaration> {
|
private fun delegatedMembers(irClass: IrClass): List<FirDeclaration<*>> {
|
||||||
return irClass.declarations.filter {
|
return irClass.declarations.filter {
|
||||||
it.origin == IrDeclarationOrigin.DELEGATED_MEMBER
|
it.origin == IrDeclarationOrigin.DELEGATED_MEMBER
|
||||||
}.mapNotNull {
|
}.mapNotNull {
|
||||||
@@ -172,7 +172,7 @@ class Fir2IrConverter(
|
|||||||
// Sort declarations so that all non-synthetic declarations are before synthetic ones.
|
// Sort declarations so that all non-synthetic declarations are before synthetic ones.
|
||||||
// This is needed because converting synthetic fields for implementation delegation needs to know
|
// This is needed because converting synthetic fields for implementation delegation needs to know
|
||||||
// existing declarations in the class to avoid adding redundant delegated members.
|
// existing declarations in the class to avoid adding redundant delegated members.
|
||||||
private fun syntheticPropertiesLast(declarations: List<FirDeclaration>): Iterable<FirDeclaration> {
|
private fun syntheticPropertiesLast(declarations: List<FirDeclaration<*>>): Iterable<FirDeclaration<*>> {
|
||||||
return declarations.sortedBy { it !is FirField && it.isSynthetic }
|
return declarations.sortedBy { it !is FirField && it.isSynthetic }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,7 +196,7 @@ class Fir2IrConverter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun processMemberDeclaration(
|
private fun processMemberDeclaration(
|
||||||
declaration: FirDeclaration,
|
declaration: FirDeclaration<*>,
|
||||||
containingClass: FirClass<*>?,
|
containingClass: FirClass<*>?,
|
||||||
parent: IrDeclarationParent
|
parent: IrDeclarationParent
|
||||||
): IrDeclaration? {
|
): IrDeclaration? {
|
||||||
|
|||||||
+3
-3
@@ -97,7 +97,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
// For pure fields (from Java) only
|
// For pure fields (from Java) only
|
||||||
private val fieldToPropertyCache = ConcurrentHashMap<Pair<FirField, IrDeclarationParent>, IrProperty>()
|
private val fieldToPropertyCache = ConcurrentHashMap<Pair<FirField, IrDeclarationParent>, IrProperty>()
|
||||||
|
|
||||||
private val delegatedReverseCache = ConcurrentHashMap<IrDeclaration, FirDeclaration>()
|
private val delegatedReverseCache = ConcurrentHashMap<IrDeclaration, FirDeclaration<*>>()
|
||||||
|
|
||||||
private val fieldCache = ConcurrentHashMap<FirField, IrField>()
|
private val fieldCache = ConcurrentHashMap<FirField, IrField>()
|
||||||
|
|
||||||
@@ -411,7 +411,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
delegatedReverseCache[irFunction] = function
|
delegatedReverseCache[irFunction] = function
|
||||||
}
|
}
|
||||||
|
|
||||||
fun originalDeclarationForDelegated(irDeclaration: IrDeclaration): FirDeclaration? = delegatedReverseCache[irDeclaration]
|
fun originalDeclarationForDelegated(irDeclaration: IrDeclaration): FirDeclaration<*>? = delegatedReverseCache[irDeclaration]
|
||||||
|
|
||||||
internal fun declareIrSimpleFunction(
|
internal fun declareIrSimpleFunction(
|
||||||
signature: IdSignature?,
|
signature: IdSignature?,
|
||||||
@@ -1266,7 +1266,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun IrMutableAnnotationContainer.convertAnnotationsFromLibrary(firAnnotationContainer: FirAnnotationContainer) {
|
private fun IrMutableAnnotationContainer.convertAnnotationsFromLibrary(firAnnotationContainer: FirAnnotationContainer) {
|
||||||
if ((firAnnotationContainer as? FirDeclaration)?.isFromLibrary == true ||
|
if ((firAnnotationContainer as? FirDeclaration<*>)?.isFromLibrary == true ||
|
||||||
(firAnnotationContainer is FirCallableMemberDeclaration<*> && firAnnotationContainer.isSubstitutionOrIntersectionOverride)
|
(firAnnotationContainer is FirCallableMemberDeclaration<*> && firAnnotationContainer.isSubstitutionOrIntersectionOverride)
|
||||||
) {
|
) {
|
||||||
annotationGenerator.generate(this, firAnnotationContainer)
|
annotationGenerator.generate(this, firAnnotationContainer)
|
||||||
|
|||||||
@@ -11,6 +11,6 @@ import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
|||||||
import org.jetbrains.kotlin.ir.util.IdSignature
|
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||||
|
|
||||||
interface Fir2IrSignatureComposer {
|
interface Fir2IrSignatureComposer {
|
||||||
fun composeSignature(declaration: FirDeclaration, containingClass: ConeClassLikeLookupTag? = null): IdSignature?
|
fun composeSignature(declaration: FirDeclaration<*>, containingClass: ConeClassLikeLookupTag? = null): IdSignature?
|
||||||
fun composeAccessorSignature(property: FirProperty, isSetter: Boolean, containingClass: ConeClassLikeLookupTag? = null): IdSignature?
|
fun composeAccessorSignature(property: FirProperty, isSetter: Boolean, containingClass: ConeClassLikeLookupTag? = null): IdSignature?
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ class Fir2IrVisitor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirDeclaration.toIrDeclaration(): IrDeclaration =
|
private fun FirDeclaration<*>.toIrDeclaration(): IrDeclaration =
|
||||||
accept(this@Fir2IrVisitor, null) as IrDeclaration
|
accept(this@Fir2IrVisitor, null) as IrDeclaration
|
||||||
|
|
||||||
// ==================================================================================
|
// ==================================================================================
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.ir.declarations.MetadataSource
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
sealed class FirMetadataSource : MetadataSource {
|
sealed class FirMetadataSource : MetadataSource {
|
||||||
abstract val fir: FirDeclaration
|
abstract val fir: FirDeclaration<*>
|
||||||
|
|
||||||
val declarationSiteSession: FirSession
|
val declarationSiteSession: FirSession
|
||||||
get() = fir.moduleData.session
|
get() = fir.moduleData.session
|
||||||
|
|||||||
+9
-4
@@ -7,7 +7,9 @@ package org.jetbrains.kotlin.fir.backend.generators
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.fir.backend.*
|
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
|
||||||
|
import org.jetbrains.kotlin.fir.backend.Fir2IrConversionScope
|
||||||
|
import org.jetbrains.kotlin.fir.backend.FirMetadataSource
|
||||||
import org.jetbrains.kotlin.fir.backend.convertWithOffsets
|
import org.jetbrains.kotlin.fir.backend.convertWithOffsets
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
@@ -32,7 +34,10 @@ import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
|||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.types.*
|
import org.jetbrains.kotlin.ir.types.IrSimpleType
|
||||||
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
import org.jetbrains.kotlin.ir.types.isUnit
|
||||||
|
import org.jetbrains.kotlin.ir.types.typeOrNull
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@@ -172,7 +177,7 @@ internal class AdapterGenerator(
|
|||||||
): IrSimpleFunction {
|
): IrSimpleFunction {
|
||||||
val returnType = type.arguments.last().typeOrNull!!
|
val returnType = type.arguments.last().typeOrNull!!
|
||||||
val parameterTypes = type.arguments.dropLast(1).map { it.typeOrNull!! }
|
val parameterTypes = type.arguments.dropLast(1).map { it.typeOrNull!! }
|
||||||
val firMemberAdaptee = firAdaptee as FirMemberDeclaration
|
val firMemberAdaptee = firAdaptee as FirMemberDeclaration<*>
|
||||||
return irFactory.createFunction(
|
return irFactory.createFunction(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
IrDeclarationOrigin.ADAPTER_FOR_CALLABLE_REFERENCE,
|
IrDeclarationOrigin.ADAPTER_FOR_CALLABLE_REFERENCE,
|
||||||
@@ -292,7 +297,7 @@ internal class AdapterGenerator(
|
|||||||
boundDispatchReceiver != null -> irCall.dispatchReceiver = receiverValue
|
boundDispatchReceiver != null -> irCall.dispatchReceiver = receiverValue
|
||||||
boundExtensionReceiver != null -> irCall.extensionReceiver = receiverValue
|
boundExtensionReceiver != null -> irCall.extensionReceiver = receiverValue
|
||||||
}
|
}
|
||||||
} else if (callableReferenceAccess.explicitReceiver is FirResolvedQualifier && ((firAdaptee as? FirMemberDeclaration)?.isStatic != true)) {
|
} else if (callableReferenceAccess.explicitReceiver is FirResolvedQualifier && ((firAdaptee as? FirMemberDeclaration<*>)?.isStatic != true)) {
|
||||||
// Unbound callable reference 'A::foo'
|
// Unbound callable reference 'A::foo'
|
||||||
val adaptedReceiverParameter = adapterFunction.valueParameters[0]
|
val adaptedReceiverParameter = adapterFunction.valueParameters[0]
|
||||||
val adaptedReceiverValue = IrGetValueImpl(
|
val adaptedReceiverValue = IrGetValueImpl(
|
||||||
|
|||||||
+4
-4
@@ -58,10 +58,10 @@ import org.jetbrains.kotlin.util.OperatorNameConventions.TO_STRING
|
|||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
class DataClassMembersGenerator(val components: Fir2IrComponents) {
|
class DataClassMembersGenerator(val components: Fir2IrComponents) {
|
||||||
|
|
||||||
fun generateInlineClassMembers(klass: FirClass<*>, irClass: IrClass): List<FirDeclaration> =
|
fun generateInlineClassMembers(klass: FirClass<*>, irClass: IrClass): List<FirDeclaration<*>> =
|
||||||
MyDataClassMethodsGenerator(irClass, klass.symbol.toLookupTag(), IrDeclarationOrigin.GENERATED_INLINE_CLASS_MEMBER).generate(klass)
|
MyDataClassMethodsGenerator(irClass, klass.symbol.toLookupTag(), IrDeclarationOrigin.GENERATED_INLINE_CLASS_MEMBER).generate(klass)
|
||||||
|
|
||||||
fun generateDataClassMembers(klass: FirClass<*>, irClass: IrClass): List<FirDeclaration> =
|
fun generateDataClassMembers(klass: FirClass<*>, irClass: IrClass): List<FirDeclaration<*>> =
|
||||||
MyDataClassMethodsGenerator(irClass, klass.symbol.toLookupTag(), IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER).generate(klass)
|
MyDataClassMethodsGenerator(irClass, klass.symbol.toLookupTag(), IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER).generate(klass)
|
||||||
|
|
||||||
fun generateDataClassComponentBody(irFunction: IrFunction, lookupTag: ConeClassLikeLookupTag) =
|
fun generateDataClassComponentBody(irFunction: IrFunction, lookupTag: ConeClassLikeLookupTag) =
|
||||||
@@ -175,14 +175,14 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) {
|
|||||||
(this.name == HASHCODE_NAME && matchesHashCodeSignature) ||
|
(this.name == HASHCODE_NAME && matchesHashCodeSignature) ||
|
||||||
(this.name == TO_STRING && matchesToStringSignature)
|
(this.name == TO_STRING && matchesToStringSignature)
|
||||||
|
|
||||||
fun generate(klass: FirClass<*>): List<FirDeclaration> {
|
fun generate(klass: FirClass<*>): List<FirDeclaration<*>> {
|
||||||
val propertyParametersCount = irClass.primaryConstructor?.explicitParameters?.size ?: 0
|
val propertyParametersCount = irClass.primaryConstructor?.explicitParameters?.size ?: 0
|
||||||
val properties = irClass.properties.filter { it.backingField != null }.take(propertyParametersCount).toList()
|
val properties = irClass.properties.filter { it.backingField != null }.take(propertyParametersCount).toList()
|
||||||
if (properties.isEmpty()) {
|
if (properties.isEmpty()) {
|
||||||
return emptyList()
|
return emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
val result = mutableListOf<FirDeclaration>()
|
val result = mutableListOf<FirDeclaration<*>>()
|
||||||
|
|
||||||
val contributedFunctionsInThisType = klass.declarations.mapNotNull {
|
val contributedFunctionsInThisType = klass.declarations.mapNotNull {
|
||||||
if (it is FirSimpleFunction && it.matchesDataClassSyntheticMemberSignatures) {
|
if (it is FirSimpleFunction && it.matchesDataClassSyntheticMemberSignatures) {
|
||||||
|
|||||||
+4
-4
@@ -14,8 +14,8 @@ import org.jetbrains.kotlin.fir.resolve.toSymbol
|
|||||||
import org.jetbrains.kotlin.fir.scopes.*
|
import org.jetbrains.kotlin.fir.scopes.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirFakeOverrideGenerator
|
import org.jetbrains.kotlin.fir.scopes.impl.FirFakeOverrideGenerator
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData
|
import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
@@ -59,18 +59,18 @@ class FakeOverrideGenerator(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun IrClass.addFakeOverrides(klass: FirClass<*>, declarations: Collection<FirDeclaration>) {
|
fun IrClass.addFakeOverrides(klass: FirClass<*>, declarations: Collection<FirDeclaration<*>>) {
|
||||||
this.declarations += getFakeOverrides(
|
this.declarations += getFakeOverrides(
|
||||||
klass,
|
klass,
|
||||||
declarations
|
declarations
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun IrClass.getFakeOverrides(klass: FirClass<*>, realDeclarations: Collection<FirDeclaration>): List<IrDeclaration> {
|
fun IrClass.getFakeOverrides(klass: FirClass<*>, realDeclarations: Collection<FirDeclaration<*>>): List<IrDeclaration> {
|
||||||
val result = mutableListOf<IrDeclaration>()
|
val result = mutableListOf<IrDeclaration>()
|
||||||
val useSiteMemberScope = klass.unsubstitutedScope(session, scopeSession, withForcedTypeCalculator = true)
|
val useSiteMemberScope = klass.unsubstitutedScope(session, scopeSession, withForcedTypeCalculator = true)
|
||||||
val superTypesCallableNames = useSiteMemberScope.getCallableNames()
|
val superTypesCallableNames = useSiteMemberScope.getCallableNames()
|
||||||
val realDeclarationSymbols = realDeclarations.filterIsInstance<FirSymbolOwner<*>>().mapTo(mutableSetOf(), FirSymbolOwner<*>::symbol)
|
val realDeclarationSymbols = realDeclarations.mapTo(mutableSetOf(), FirDeclaration<*>::symbol)
|
||||||
|
|
||||||
for (name in superTypesCallableNames) {
|
for (name in superTypesCallableNames) {
|
||||||
generateFakeOverridesForName(this, useSiteMemberScope, name, klass, result, realDeclarationSymbols)
|
generateFakeOverridesForName(this, useSiteMemberScope, name, klass, result, realDeclarationSymbols)
|
||||||
|
|||||||
+5
-2
@@ -10,12 +10,15 @@ import org.jetbrains.kotlin.fir.backend.toIrType
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||||
import org.jetbrains.kotlin.fir.symbols.Fir2IrBindableSymbol
|
import org.jetbrains.kotlin.fir.symbols.Fir2IrBindableSymbol
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrFactory
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import kotlin.properties.ReadWriteProperty
|
import kotlin.properties.ReadWriteProperty
|
||||||
|
|
||||||
interface AbstractFir2IrLazyDeclaration<F : FirMemberDeclaration, D : IrDeclaration> :
|
interface AbstractFir2IrLazyDeclaration<F : FirMemberDeclaration<*>, D : IrDeclaration> :
|
||||||
IrDeclaration, IrDeclarationParent, Fir2IrComponents {
|
IrDeclaration, IrDeclarationParent, Fir2IrComponents {
|
||||||
|
|
||||||
val fir: F
|
val fir: F
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.name.ClassId
|
|||||||
import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME
|
import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME
|
||||||
import kotlin.properties.ReadWriteProperty
|
import kotlin.properties.ReadWriteProperty
|
||||||
|
|
||||||
abstract class AbstractFir2IrLazyFunction<F : FirMemberDeclaration>(
|
abstract class AbstractFir2IrLazyFunction<F : FirMemberDeclaration<*>>(
|
||||||
components: Fir2IrComponents,
|
components: Fir2IrComponents,
|
||||||
override val startOffset: Int,
|
override val startOffset: Int,
|
||||||
override val endOffset: Int,
|
override val endOffset: Int,
|
||||||
|
|||||||
+10
-4
@@ -5,11 +5,17 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.lazy
|
package org.jetbrains.kotlin.fir.lazy
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.backend.*
|
import org.jetbrains.kotlin.fir.backend.ConversionTypeContext
|
||||||
|
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
|
||||||
|
import org.jetbrains.kotlin.fir.backend.generateOverriddenAccessorSymbols
|
||||||
|
import org.jetbrains.kotlin.fir.backend.toIrType
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.symbols.Fir2IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.Fir2IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
@@ -28,12 +34,12 @@ class Fir2IrLazyPropertyAccessor(
|
|||||||
firParentClass: FirRegularClass,
|
firParentClass: FirRegularClass,
|
||||||
symbol: Fir2IrSimpleFunctionSymbol,
|
symbol: Fir2IrSimpleFunctionSymbol,
|
||||||
isFakeOverride: Boolean
|
isFakeOverride: Boolean
|
||||||
) : AbstractFir2IrLazyFunction<FirMemberDeclaration>(components, startOffset, endOffset, origin, symbol, isFakeOverride) {
|
) : AbstractFir2IrLazyFunction<FirMemberDeclaration<*>>(components, startOffset, endOffset, origin, symbol, isFakeOverride) {
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val fir: FirMemberDeclaration
|
override val fir: FirMemberDeclaration<*>
|
||||||
get() = firAccessor ?: firParentProperty
|
get() = firAccessor ?: firParentProperty
|
||||||
|
|
||||||
// TODO: investigate why some deserialized properties are inline
|
// TODO: investigate why some deserialized properties are inline
|
||||||
|
|||||||
+1
-1
@@ -56,7 +56,7 @@ class FirBasedSignatureComposer(private val mangler: FirMangler) : Fir2IrSignatu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun composeSignature(declaration: FirDeclaration, containingClass: ConeClassLikeLookupTag?): IdSignature? {
|
override fun composeSignature(declaration: FirDeclaration<*>, containingClass: ConeClassLikeLookupTag?): IdSignature? {
|
||||||
if (declaration is FirAnonymousObject || declaration is FirAnonymousFunction) return null
|
if (declaration is FirAnonymousObject || declaration is FirAnonymousFunction) return null
|
||||||
if (declaration is FirRegularClass && declaration.classId.isLocal) return null
|
if (declaration is FirRegularClass && declaration.classId.isLocal) return null
|
||||||
if (declaration is FirCallableMemberDeclaration<*>) {
|
if (declaration is FirCallableMemberDeclaration<*>) {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.signaturer
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.ir.util.KotlinMangler
|
import org.jetbrains.kotlin.ir.util.KotlinMangler
|
||||||
|
|
||||||
interface FirMangler : KotlinMangler<FirDeclaration> {
|
interface FirMangler : KotlinMangler<FirDeclaration<*>> {
|
||||||
override val manglerName: String
|
override val manglerName: String
|
||||||
get() = "Fir"
|
get() = "Fir"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ object FirJavaVisibilityChecker : FirVisibilityChecker() {
|
|||||||
declarationVisibility: Visibility,
|
declarationVisibility: Visibility,
|
||||||
symbol: FirBasedSymbol<*>,
|
symbol: FirBasedSymbol<*>,
|
||||||
useSiteFile: FirFile,
|
useSiteFile: FirFile,
|
||||||
containingDeclarations: List<FirDeclaration>,
|
containingDeclarations: List<FirDeclaration<*>>,
|
||||||
dispatchReceiver: ReceiverValue?,
|
dispatchReceiver: ReceiverValue?,
|
||||||
session: FirSession
|
session: FirSession
|
||||||
): Boolean {
|
): Boolean {
|
||||||
|
|||||||
@@ -371,7 +371,7 @@ class JavaSymbolProvider(
|
|||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
javaTypeParameterStack: JavaTypeParameterStack,
|
javaTypeParameterStack: JavaTypeParameterStack,
|
||||||
dispatchReceiver: ConeClassLikeType
|
dispatchReceiver: ConeClassLikeType
|
||||||
): FirDeclaration {
|
): FirDeclaration<*> {
|
||||||
val fieldName = javaField.name
|
val fieldName = javaField.name
|
||||||
val fieldId = CallableId(classId.packageFqName, classId.relativeClassName, fieldName)
|
val fieldId = CallableId(classId.packageFqName, classId.relativeClassName, fieldName)
|
||||||
val returnType = javaField.type
|
val returnType = javaField.type
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ class FirJavaClass @FirImplementationDetail internal constructor(
|
|||||||
override val annotations: MutableList<FirAnnotationCall>,
|
override val annotations: MutableList<FirAnnotationCall>,
|
||||||
override var status: FirDeclarationStatus,
|
override var status: FirDeclarationStatus,
|
||||||
override val classKind: ClassKind,
|
override val classKind: ClassKind,
|
||||||
override val declarations: MutableList<FirDeclaration>,
|
override val declarations: MutableList<FirDeclaration<*>>,
|
||||||
override val scopeProvider: FirScopeProvider,
|
override val scopeProvider: FirScopeProvider,
|
||||||
override val symbol: FirRegularClassSymbol,
|
override val symbol: FirRegularClassSymbol,
|
||||||
override val superTypeRefs: MutableList<FirTypeRef>,
|
override val superTypeRefs: MutableList<FirTypeRef>,
|
||||||
@@ -132,7 +132,7 @@ internal class FirJavaClassBuilder : FirRegularClassBuilder(), FirAnnotationCont
|
|||||||
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
|
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
|
||||||
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
||||||
override val typeParameters: MutableList<FirTypeParameterRef> = mutableListOf()
|
override val typeParameters: MutableList<FirTypeParameterRef> = mutableListOf()
|
||||||
override val declarations: MutableList<FirDeclaration> = mutableListOf()
|
override val declarations: MutableList<FirDeclaration<*>> = mutableListOf()
|
||||||
|
|
||||||
override val superTypeRefs: MutableList<FirTypeRef> = mutableListOf()
|
override val superTypeRefs: MutableList<FirTypeRef> = mutableListOf()
|
||||||
|
|
||||||
|
|||||||
+9
-9
@@ -87,7 +87,7 @@ class DeclarationsConverter(
|
|||||||
|
|
||||||
val fileAnnotationList = mutableListOf<FirAnnotationCall>()
|
val fileAnnotationList = mutableListOf<FirAnnotationCall>()
|
||||||
val importList = mutableListOf<FirImport>()
|
val importList = mutableListOf<FirImport>()
|
||||||
val firDeclarationList = mutableListOf<FirDeclaration>()
|
val firDeclarationList = mutableListOf<FirDeclaration<*>>()
|
||||||
context.packageFqName = FqName.ROOT
|
context.packageFqName = FqName.ROOT
|
||||||
file.forEachChildren {
|
file.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
@@ -95,7 +95,7 @@ class DeclarationsConverter(
|
|||||||
PACKAGE_DIRECTIVE -> context.packageFqName = convertPackageName(it)
|
PACKAGE_DIRECTIVE -> context.packageFqName = convertPackageName(it)
|
||||||
IMPORT_LIST -> importList += convertImportDirectives(it)
|
IMPORT_LIST -> importList += convertImportDirectives(it)
|
||||||
CLASS -> firDeclarationList += convertClass(it)
|
CLASS -> firDeclarationList += convertClass(it)
|
||||||
FUN -> firDeclarationList += convertFunctionDeclaration(it) as FirDeclaration
|
FUN -> firDeclarationList += convertFunctionDeclaration(it) as FirDeclaration<*>
|
||||||
PROPERTY -> firDeclarationList += convertPropertyDeclaration(it)
|
PROPERTY -> firDeclarationList += convertPropertyDeclaration(it)
|
||||||
TYPEALIAS -> firDeclarationList += convertTypeAlias(it)
|
TYPEALIAS -> firDeclarationList += convertTypeAlias(it)
|
||||||
OBJECT_DECLARATION -> firDeclarationList += convertClass(it)
|
OBJECT_DECLARATION -> firDeclarationList += convertClass(it)
|
||||||
@@ -358,7 +358,7 @@ class DeclarationsConverter(
|
|||||||
/**
|
/**
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseClassOrObject
|
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseClassOrObject
|
||||||
*/
|
*/
|
||||||
private fun convertClass(classNode: LighterASTNode): FirDeclaration {
|
private fun convertClass(classNode: LighterASTNode): FirDeclaration<*> {
|
||||||
var modifiers = Modifier()
|
var modifiers = Modifier()
|
||||||
var classKind: ClassKind = ClassKind.CLASS //TODO
|
var classKind: ClassKind = ClassKind.CLASS //TODO
|
||||||
var identifier: String? = null
|
var identifier: String? = null
|
||||||
@@ -730,12 +730,12 @@ class DeclarationsConverter(
|
|||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseClassBody
|
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseClassBody
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseEnumClassBody
|
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseEnumClassBody
|
||||||
*/
|
*/
|
||||||
private fun convertClassBody(classBody: LighterASTNode, classWrapper: ClassWrapper): List<FirDeclaration> {
|
private fun convertClassBody(classBody: LighterASTNode, classWrapper: ClassWrapper): List<FirDeclaration<*>> {
|
||||||
return classBody.forEachChildrenReturnList { node, container ->
|
return classBody.forEachChildrenReturnList { node, container ->
|
||||||
when (node.tokenType) {
|
when (node.tokenType) {
|
||||||
ENUM_ENTRY -> container += convertEnumEntry(node, classWrapper)
|
ENUM_ENTRY -> container += convertEnumEntry(node, classWrapper)
|
||||||
CLASS -> container += convertClass(node)
|
CLASS -> container += convertClass(node)
|
||||||
FUN -> container += convertFunctionDeclaration(node, classWrapper) as FirDeclaration
|
FUN -> container += convertFunctionDeclaration(node, classWrapper) as FirDeclaration<*>
|
||||||
PROPERTY -> container += convertPropertyDeclaration(node, classWrapper)
|
PROPERTY -> container += convertPropertyDeclaration(node, classWrapper)
|
||||||
TYPEALIAS -> container += convertTypeAlias(node)
|
TYPEALIAS -> container += convertTypeAlias(node)
|
||||||
OBJECT_DECLARATION -> container += convertClass(node)
|
OBJECT_DECLARATION -> container += convertClass(node)
|
||||||
@@ -826,7 +826,7 @@ class DeclarationsConverter(
|
|||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseMemberDeclarationRest
|
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseMemberDeclarationRest
|
||||||
* at INIT keyword
|
* at INIT keyword
|
||||||
*/
|
*/
|
||||||
private fun convertAnonymousInitializer(anonymousInitializer: LighterASTNode): FirDeclaration {
|
private fun convertAnonymousInitializer(anonymousInitializer: LighterASTNode): FirDeclaration<*> {
|
||||||
var firBlock: FirBlock? = null
|
var firBlock: FirBlock? = null
|
||||||
anonymousInitializer.forEachChildren {
|
anonymousInitializer.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
@@ -949,7 +949,7 @@ class DeclarationsConverter(
|
|||||||
/**
|
/**
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseTypeAlias
|
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseTypeAlias
|
||||||
*/
|
*/
|
||||||
private fun convertTypeAlias(typeAlias: LighterASTNode): FirDeclaration {
|
private fun convertTypeAlias(typeAlias: LighterASTNode): FirDeclaration<*> {
|
||||||
var modifiers = Modifier()
|
var modifiers = Modifier()
|
||||||
var identifier: String? = null
|
var identifier: String? = null
|
||||||
lateinit var firType: FirTypeRef
|
lateinit var firType: FirTypeRef
|
||||||
@@ -985,7 +985,7 @@ class DeclarationsConverter(
|
|||||||
/**
|
/**
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseProperty
|
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseProperty
|
||||||
*/
|
*/
|
||||||
fun convertPropertyDeclaration(property: LighterASTNode, classWrapper: ClassWrapper? = null): FirDeclaration {
|
fun convertPropertyDeclaration(property: LighterASTNode, classWrapper: ClassWrapper? = null): FirDeclaration<*> {
|
||||||
var modifiers = Modifier()
|
var modifiers = Modifier()
|
||||||
var identifier: String? = null
|
var identifier: String? = null
|
||||||
val firTypeParameters = mutableListOf<FirTypeParameter>()
|
val firTypeParameters = mutableListOf<FirTypeParameter>()
|
||||||
@@ -1991,7 +1991,7 @@ class DeclarationsConverter(
|
|||||||
typeParameters: List<FirTypeParameter>,
|
typeParameters: List<FirTypeParameter>,
|
||||||
typeConstraints: List<TypeConstraint>,
|
typeConstraints: List<TypeConstraint>,
|
||||||
to: T
|
to: T
|
||||||
) where T : FirDeclaration, T : FirTypeParameterRefsOwner {
|
) where T : FirDeclaration<T>, T : FirTypeParameterRefsOwner {
|
||||||
val typeParamNames = typeParameters.map { it.name }.toSet()
|
val typeParamNames = typeParameters.map { it.name }.toSet()
|
||||||
val result = typeConstraints.mapNotNull { constraint ->
|
val result = typeConstraints.mapNotNull { constraint ->
|
||||||
val name = constraint.identifier.nameAsSafeName()
|
val name = constraint.identifier.nameAsSafeName()
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ open class RawFirBuilder(
|
|||||||
owner: KtClassOrObject,
|
owner: KtClassOrObject,
|
||||||
ownerClassBuilder: FirClassBuilder,
|
ownerClassBuilder: FirClassBuilder,
|
||||||
ownerTypeParameters: List<FirTypeParameterRef>
|
ownerTypeParameters: List<FirTypeParameterRef>
|
||||||
): FirDeclaration {
|
): FirDeclaration<*> {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is KtSecondaryConstructor -> {
|
is KtSecondaryConstructor -> {
|
||||||
disabledLazyMode {
|
disabledLazyMode {
|
||||||
@@ -514,7 +514,7 @@ open class RawFirBuilder(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun <T> KtTypeParameterListOwner.fillDanglingConstraintsTo(to: T) where T : FirDeclaration, T : FirTypeParameterRefsOwner {
|
private fun <T> KtTypeParameterListOwner.fillDanglingConstraintsTo(to: T) where T : FirDeclaration<T>, T : FirTypeParameterRefsOwner {
|
||||||
val typeParamNames = typeParameters.mapNotNull { it.nameAsName }.toSet()
|
val typeParamNames = typeParameters.mapNotNull { it.nameAsName }.toSet()
|
||||||
val result = typeConstraints.mapNotNull { constraint ->
|
val result = typeConstraints.mapNotNull { constraint ->
|
||||||
constraint.subjectTypeParameterName?.getReferencedNameAsName()?.let { name ->
|
constraint.subjectTypeParameterName?.getReferencedNameAsName()?.let { name ->
|
||||||
@@ -730,7 +730,7 @@ open class RawFirBuilder(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (declaration in file.declarations) {
|
for (declaration in file.declarations) {
|
||||||
declarations += declaration.convert<FirDeclaration>()
|
declarations += declaration.convert<FirDeclaration<*>>()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -738,7 +738,7 @@ open class RawFirBuilder(
|
|||||||
private fun KtEnumEntry.toFirEnumEntry(
|
private fun KtEnumEntry.toFirEnumEntry(
|
||||||
delegatedEnumSelfTypeRef: FirResolvedTypeRef,
|
delegatedEnumSelfTypeRef: FirResolvedTypeRef,
|
||||||
ownerClassHasDefaultConstructor: Boolean
|
ownerClassHasDefaultConstructor: Boolean
|
||||||
): FirDeclaration {
|
): FirDeclaration<*> {
|
||||||
val ktEnumEntry = this@toFirEnumEntry
|
val ktEnumEntry = this@toFirEnumEntry
|
||||||
return buildEnumEntry {
|
return buildEnumEntry {
|
||||||
source = toFirSourceElement()
|
source = toFirSourceElement()
|
||||||
|
|||||||
+1
-1
@@ -113,7 +113,7 @@ class RawFirBuilderTotalKotlinTestCase : AbstractRawFirBuilderTestCase() {
|
|||||||
// errorDeclaration.psi?.let { println(it) }
|
// errorDeclaration.psi?.let { println(it) }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
override fun visitDeclaration(declaration: FirDeclaration) {
|
override fun <T : FirDeclaration<T>> visitDeclaration(declaration: FirDeclaration<T>) {
|
||||||
normalDeclarations++
|
normalDeclarations++
|
||||||
declaration.acceptChildren(this)
|
declaration.acceptChildren(this)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -596,7 +596,7 @@ class FirCallResolver(
|
|||||||
createResolvedReferenceWithoutCandidateForLocalVariables &&
|
createResolvedReferenceWithoutCandidateForLocalVariables &&
|
||||||
explicitReceiver?.typeRef?.coneTypeSafe<ConeIntegerLiteralType>() == null &&
|
explicitReceiver?.typeRef?.coneTypeSafe<ConeIntegerLiteralType>() == null &&
|
||||||
coneSymbol is FirVariableSymbol &&
|
coneSymbol is FirVariableSymbol &&
|
||||||
(coneSymbol !is FirPropertySymbol || (coneSymbol.fir as FirMemberDeclaration).typeParameters.isEmpty())
|
(coneSymbol !is FirPropertySymbol || (coneSymbol.fir as FirMemberDeclaration<*>).typeParameters.isEmpty())
|
||||||
) {
|
) {
|
||||||
return buildResolvedNamedReference {
|
return buildResolvedNamedReference {
|
||||||
this.source = source
|
this.source = source
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.name.ClassId
|
|||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
interface FirModuleVisibilityChecker : FirSessionComponent {
|
interface FirModuleVisibilityChecker : FirSessionComponent {
|
||||||
fun isInFriendModule(declaration: FirMemberDeclaration): Boolean
|
fun isInFriendModule(declaration: FirMemberDeclaration<*>): Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class FirVisibilityChecker : FirSessionComponent {
|
abstract class FirVisibilityChecker : FirSessionComponent {
|
||||||
@@ -34,7 +34,7 @@ abstract class FirVisibilityChecker : FirSessionComponent {
|
|||||||
declarationVisibility: Visibility,
|
declarationVisibility: Visibility,
|
||||||
symbol: FirBasedSymbol<*>,
|
symbol: FirBasedSymbol<*>,
|
||||||
useSiteFile: FirFile,
|
useSiteFile: FirFile,
|
||||||
containingDeclarations: List<FirDeclaration>,
|
containingDeclarations: List<FirDeclaration<*>>,
|
||||||
dispatchReceiver: ReceiverValue?,
|
dispatchReceiver: ReceiverValue?,
|
||||||
session: FirSession
|
session: FirSession
|
||||||
): Boolean {
|
): Boolean {
|
||||||
@@ -42,13 +42,13 @@ abstract class FirVisibilityChecker : FirSessionComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T> isVisible(
|
fun isVisible(
|
||||||
declaration: T,
|
declaration: FirMemberDeclaration<*>,
|
||||||
candidate: Candidate
|
candidate: Candidate
|
||||||
): Boolean where T : FirMemberDeclaration, T : FirSymbolOwner<*> {
|
): Boolean {
|
||||||
if (declaration is FirCallableDeclaration<*> && (declaration.isIntersectionOverride || declaration.isSubstitutionOverride)) {
|
if (declaration is FirCallableDeclaration<*> && (declaration.isIntersectionOverride || declaration.isSubstitutionOverride)) {
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
return isVisible(declaration.originalIfFakeOverride() as T, candidate)
|
return isVisible(declaration.originalIfFakeOverride() as FirMemberDeclaration<*>, candidate)
|
||||||
}
|
}
|
||||||
|
|
||||||
val callInfo = candidate.callInfo
|
val callInfo = candidate.callInfo
|
||||||
@@ -59,13 +59,13 @@ abstract class FirVisibilityChecker : FirSessionComponent {
|
|||||||
return isVisible(declaration, session, useSiteFile, containingDeclarations, candidate.dispatchReceiverValue)
|
return isVisible(declaration, session, useSiteFile, containingDeclarations, candidate.dispatchReceiverValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T> isVisible(
|
fun isVisible(
|
||||||
declaration: T,
|
declaration: FirMemberDeclaration<*>,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
useSiteFile: FirFile,
|
useSiteFile: FirFile,
|
||||||
containingDeclarations: List<FirDeclaration>,
|
containingDeclarations: List<FirDeclaration<*>>,
|
||||||
dispatchReceiver: ReceiverValue?
|
dispatchReceiver: ReceiverValue?
|
||||||
): Boolean where T : FirMemberDeclaration, T : FirSymbolOwner<*> {
|
): Boolean {
|
||||||
val provider = session.firProvider
|
val provider = session.firProvider
|
||||||
val symbol = declaration.symbol
|
val symbol = declaration.symbol
|
||||||
return when (declaration.visibility) {
|
return when (declaration.visibility) {
|
||||||
@@ -124,13 +124,13 @@ abstract class FirVisibilityChecker : FirSessionComponent {
|
|||||||
declarationVisibility: Visibility,
|
declarationVisibility: Visibility,
|
||||||
symbol: FirBasedSymbol<*>,
|
symbol: FirBasedSymbol<*>,
|
||||||
useSiteFile: FirFile,
|
useSiteFile: FirFile,
|
||||||
containingDeclarations: List<FirDeclaration>,
|
containingDeclarations: List<FirDeclaration<*>>,
|
||||||
dispatchReceiver: ReceiverValue?,
|
dispatchReceiver: ReceiverValue?,
|
||||||
session: FirSession
|
session: FirSession
|
||||||
): Boolean
|
): Boolean
|
||||||
|
|
||||||
private fun canSeePrivateMemberOf(
|
private fun canSeePrivateMemberOf(
|
||||||
containingDeclarationOfUseSite: List<FirDeclaration>,
|
containingDeclarationOfUseSite: List<FirDeclaration<*>>,
|
||||||
ownerId: ClassId,
|
ownerId: ClassId,
|
||||||
session: FirSession
|
session: FirSession
|
||||||
): Boolean {
|
): Boolean {
|
||||||
@@ -195,7 +195,7 @@ abstract class FirVisibilityChecker : FirSessionComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected fun canSeeProtectedMemberOf(
|
protected fun canSeeProtectedMemberOf(
|
||||||
containingDeclarationOfUseSite: List<FirDeclaration>,
|
containingDeclarationOfUseSite: List<FirDeclaration<*>>,
|
||||||
dispatchReceiver: ReceiverValue?,
|
dispatchReceiver: ReceiverValue?,
|
||||||
ownerId: ClassId, session: FirSession
|
ownerId: ClassId, session: FirSession
|
||||||
): Boolean {
|
): Boolean {
|
||||||
|
|||||||
+1
-1
@@ -85,6 +85,6 @@ private val USE_SITE_TARGET_NAME_MAP = mapOf(
|
|||||||
private val DEFAULT_USE_SITE_TARGETS: Set<AnnotationUseSiteTarget> =
|
private val DEFAULT_USE_SITE_TARGETS: Set<AnnotationUseSiteTarget> =
|
||||||
USE_SITE_TARGET_NAME_MAP.values.fold(setOf<AnnotationUseSiteTarget>()) { a, b -> a + b } - setOf(AnnotationUseSiteTarget.FILE)
|
USE_SITE_TARGET_NAME_MAP.values.fold(setOf<AnnotationUseSiteTarget>()) { a, b -> a + b } - setOf(AnnotationUseSiteTarget.FILE)
|
||||||
|
|
||||||
fun FirAnnotatedDeclaration.hasAnnotation(classId: ClassId): Boolean {
|
fun FirAnnotatedDeclaration<*>.hasAnnotation(classId: ClassId): Boolean {
|
||||||
return annotations.any { it.toAnnotationClassId() == classId }
|
return annotations.any { it.toAnnotationClassId() == classId }
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -9,4 +9,4 @@ import org.jetbrains.kotlin.metadata.deserialization.VersionRequirementTable
|
|||||||
|
|
||||||
object FirVersionRequirementsTableKey : FirDeclarationDataKey()
|
object FirVersionRequirementsTableKey : FirDeclarationDataKey()
|
||||||
|
|
||||||
var FirDeclaration.versionRequirementsTable: VersionRequirementTable? by FirDeclarationDataRegistry.data(FirVersionRequirementsTableKey)
|
var FirDeclaration<*>.versionRequirementsTable: VersionRequirementTable? by FirDeclarationDataRegistry.data(FirVersionRequirementsTableKey)
|
||||||
|
|||||||
+6
-6
@@ -27,18 +27,18 @@ abstract class FirDeclarationGenerationExtension(session: FirSession) : FirPredi
|
|||||||
final override val extensionType: KClass<out FirExtension> = FirDeclarationGenerationExtension::class
|
final override val extensionType: KClass<out FirExtension> = FirDeclarationGenerationExtension::class
|
||||||
|
|
||||||
abstract fun generateClasses(
|
abstract fun generateClasses(
|
||||||
annotatedDeclaration: FirDeclaration,
|
annotatedDeclaration: FirDeclaration<*>,
|
||||||
owners: List<FirAnnotatedDeclaration>
|
owners: List<FirAnnotatedDeclaration<*>>
|
||||||
): List<GeneratedDeclaration<FirRegularClass>>
|
): List<GeneratedDeclaration<FirRegularClass>>
|
||||||
|
|
||||||
abstract fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List<FirDeclaration>
|
abstract fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List<FirDeclaration<*>>
|
||||||
|
|
||||||
abstract fun generateMembers(
|
abstract fun generateMembers(
|
||||||
annotatedDeclaration: FirDeclaration,
|
annotatedDeclaration: FirDeclaration<*>,
|
||||||
owners: List<FirAnnotatedDeclaration>
|
owners: List<FirAnnotatedDeclaration<*>>
|
||||||
): List<GeneratedDeclaration<*>>
|
): List<GeneratedDeclaration<*>>
|
||||||
|
|
||||||
data class GeneratedDeclaration<out T : FirDeclaration>(val newDeclaration: T, val owner: FirAnnotatedDeclaration)
|
data class GeneratedDeclaration<out T : FirDeclaration<*>>(val newDeclaration: T, val owner: FirAnnotatedDeclaration<*>)
|
||||||
|
|
||||||
fun interface Factory : FirExtension.Factory<FirDeclarationGenerationExtension>
|
fun interface Factory : FirExtension.Factory<FirDeclarationGenerationExtension>
|
||||||
}
|
}
|
||||||
|
|||||||
+38
-38
@@ -23,30 +23,30 @@ abstract class FirPredicateBasedProvider : FirSessionComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract fun getSymbolsByPredicate(predicate: DeclarationPredicate): List<FirAnnotatedDeclaration>
|
abstract fun getSymbolsByPredicate(predicate: DeclarationPredicate): List<FirAnnotatedDeclaration<*>>
|
||||||
|
|
||||||
abstract fun getSymbolsByPredicate(
|
abstract fun getSymbolsByPredicate(
|
||||||
declarations: Collection<FirAnnotatedDeclaration>,
|
declarations: Collection<FirAnnotatedDeclaration<*>>,
|
||||||
predicate: DeclarationPredicate
|
predicate: DeclarationPredicate
|
||||||
): List<FirAnnotatedDeclaration>
|
): List<FirAnnotatedDeclaration<*>>
|
||||||
|
|
||||||
abstract fun getSymbolsWithOwnersByPredicate(
|
abstract fun getSymbolsWithOwnersByPredicate(
|
||||||
predicate: DeclarationPredicate
|
predicate: DeclarationPredicate
|
||||||
): List<Pair<FirAnnotatedDeclaration, List<FirAnnotatedDeclaration>>>
|
): List<Pair<FirAnnotatedDeclaration<*>, List<FirAnnotatedDeclaration<*>>>>
|
||||||
|
|
||||||
abstract fun getSymbolsWithOwnersByPredicate(
|
abstract fun getSymbolsWithOwnersByPredicate(
|
||||||
declarations: Collection<FirAnnotatedDeclaration>,
|
declarations: Collection<FirAnnotatedDeclaration<*>>,
|
||||||
predicate: DeclarationPredicate
|
predicate: DeclarationPredicate
|
||||||
): List<Pair<FirAnnotatedDeclaration, List<FirAnnotatedDeclaration>>>
|
): List<Pair<FirAnnotatedDeclaration<*>, List<FirAnnotatedDeclaration<*>>>>
|
||||||
|
|
||||||
abstract fun getOwnersOfDeclaration(declaration: FirAnnotatedDeclaration): List<FirAnnotatedDeclaration>?
|
abstract fun getOwnersOfDeclaration(declaration: FirAnnotatedDeclaration<*>): List<FirAnnotatedDeclaration<*>>?
|
||||||
|
|
||||||
abstract fun fileHasPluginAnnotations(file: FirFile): Boolean
|
abstract fun fileHasPluginAnnotations(file: FirFile): Boolean
|
||||||
|
|
||||||
abstract fun registerAnnotatedDeclaration(declaration: FirAnnotatedDeclaration, owners: PersistentList<FirAnnotatedDeclaration>)
|
abstract fun registerAnnotatedDeclaration(declaration: FirAnnotatedDeclaration<*>, owners: PersistentList<FirAnnotatedDeclaration<*>>)
|
||||||
abstract fun registerGeneratedDeclaration(declaration: FirAnnotatedDeclaration, owner: FirAnnotatedDeclaration)
|
abstract fun registerGeneratedDeclaration(declaration: FirAnnotatedDeclaration<*>, owner: FirAnnotatedDeclaration<*>)
|
||||||
|
|
||||||
abstract fun matches(predicate: DeclarationPredicate, declaration: FirAnnotatedDeclaration): Boolean
|
abstract fun matches(predicate: DeclarationPredicate, declaration: FirAnnotatedDeclaration<*>): Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
@NoMutableState
|
@NoMutableState
|
||||||
@@ -54,7 +54,7 @@ private class FirPredicateBasedProviderImpl(private val session: FirSession) : F
|
|||||||
private val registeredPluginAnnotations = session.registeredPluginAnnotations
|
private val registeredPluginAnnotations = session.registeredPluginAnnotations
|
||||||
private val cache = Cache()
|
private val cache = Cache()
|
||||||
|
|
||||||
override fun getSymbolsByPredicate(predicate: DeclarationPredicate): List<FirAnnotatedDeclaration> {
|
override fun getSymbolsByPredicate(predicate: DeclarationPredicate): List<FirAnnotatedDeclaration<*>> {
|
||||||
val annotations = registeredPluginAnnotations.getAnnotationsForPredicate(predicate)
|
val annotations = registeredPluginAnnotations.getAnnotationsForPredicate(predicate)
|
||||||
if (annotations.isEmpty()) return emptyList()
|
if (annotations.isEmpty()) return emptyList()
|
||||||
val declarations = annotations.flatMapTo(mutableSetOf()) { cache.declarationByAnnotation[it] + cache.declarationsUnderAnnotated[it] }
|
val declarations = annotations.flatMapTo(mutableSetOf()) { cache.declarationByAnnotation[it] + cache.declarationsUnderAnnotated[it] }
|
||||||
@@ -62,24 +62,24 @@ private class FirPredicateBasedProviderImpl(private val session: FirSession) : F
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getSymbolsByPredicate(
|
override fun getSymbolsByPredicate(
|
||||||
declarations: Collection<FirAnnotatedDeclaration>,
|
declarations: Collection<FirAnnotatedDeclaration<*>>,
|
||||||
predicate: DeclarationPredicate
|
predicate: DeclarationPredicate
|
||||||
): List<FirAnnotatedDeclaration> {
|
): List<FirAnnotatedDeclaration<*>> {
|
||||||
return declarations.filter { matches(predicate, it) }
|
return declarations.filter { matches(predicate, it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getSymbolsWithOwnersByPredicate(predicate: DeclarationPredicate): List<Pair<FirAnnotatedDeclaration, List<FirAnnotatedDeclaration>>> {
|
override fun getSymbolsWithOwnersByPredicate(predicate: DeclarationPredicate): List<Pair<FirAnnotatedDeclaration<*>, List<FirAnnotatedDeclaration<*>>>> {
|
||||||
return getSymbolsByPredicate(predicate).zipWithParents()
|
return getSymbolsByPredicate(predicate).zipWithParents()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getSymbolsWithOwnersByPredicate(
|
override fun getSymbolsWithOwnersByPredicate(
|
||||||
declarations: Collection<FirAnnotatedDeclaration>,
|
declarations: Collection<FirAnnotatedDeclaration<*>>,
|
||||||
predicate: DeclarationPredicate
|
predicate: DeclarationPredicate
|
||||||
): List<Pair<FirAnnotatedDeclaration, List<FirAnnotatedDeclaration>>> {
|
): List<Pair<FirAnnotatedDeclaration<*>, List<FirAnnotatedDeclaration<*>>>> {
|
||||||
return getSymbolsByPredicate(declarations, predicate).zipWithParents()
|
return getSymbolsByPredicate(declarations, predicate).zipWithParents()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun List<FirAnnotatedDeclaration>.zipWithParents(): List<Pair<FirAnnotatedDeclaration, List<FirAnnotatedDeclaration>>> {
|
private fun List<FirAnnotatedDeclaration<*>>.zipWithParents(): List<Pair<FirAnnotatedDeclaration<*>, List<FirAnnotatedDeclaration<*>>>> {
|
||||||
return this.map { it to cache.ownersForDeclaration.getValue(it) }
|
return this.map { it to cache.ownersForDeclaration.getValue(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@ private class FirPredicateBasedProviderImpl(private val session: FirSession) : F
|
|||||||
return file in cache.filesWithPluginAnnotations
|
return file in cache.filesWithPluginAnnotations
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun registerAnnotatedDeclaration(declaration: FirAnnotatedDeclaration, owners: PersistentList<FirAnnotatedDeclaration>) {
|
override fun registerAnnotatedDeclaration(declaration: FirAnnotatedDeclaration<*>, owners: PersistentList<FirAnnotatedDeclaration<*>>) {
|
||||||
cache.ownersForDeclaration[declaration] = owners
|
cache.ownersForDeclaration[declaration] = owners
|
||||||
registerOwnersDeclarations(declaration, owners)
|
registerOwnersDeclarations(declaration, owners)
|
||||||
|
|
||||||
@@ -101,16 +101,16 @@ private class FirPredicateBasedProviderImpl(private val session: FirSession) : F
|
|||||||
cache.filesWithPluginAnnotations += file
|
cache.filesWithPluginAnnotations += file
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getOwnersOfDeclaration(declaration: FirAnnotatedDeclaration): List<FirAnnotatedDeclaration>? {
|
override fun getOwnersOfDeclaration(declaration: FirAnnotatedDeclaration<*>): List<FirAnnotatedDeclaration<*>>? {
|
||||||
return cache.ownersForDeclaration[declaration]
|
return cache.ownersForDeclaration[declaration]
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun registerGeneratedDeclaration(declaration: FirAnnotatedDeclaration, owner: FirAnnotatedDeclaration) {
|
override fun registerGeneratedDeclaration(declaration: FirAnnotatedDeclaration<*>, owner: FirAnnotatedDeclaration<*>) {
|
||||||
val owners = cache.ownersForDeclaration.getValue(owner).add(owner)
|
val owners = cache.ownersForDeclaration.getValue(owner).add(owner)
|
||||||
registerAnnotatedDeclaration(declaration, owners)
|
registerAnnotatedDeclaration(declaration, owners)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun registerOwnersDeclarations(declaration: FirAnnotatedDeclaration, owners: PersistentList<FirAnnotatedDeclaration>) {
|
private fun registerOwnersDeclarations(declaration: FirAnnotatedDeclaration<*>, owners: PersistentList<FirAnnotatedDeclaration<*>>) {
|
||||||
val lastOwner = owners.lastOrNull() ?: return
|
val lastOwner = owners.lastOrNull() ?: return
|
||||||
val annotationsFromLastOwner = cache.annotationsOfDeclaration[lastOwner]
|
val annotationsFromLastOwner = cache.annotationsOfDeclaration[lastOwner]
|
||||||
val annotationsFromPreviousOwners = cache.parentAnnotationsOfDeclaration[lastOwner]
|
val annotationsFromPreviousOwners = cache.parentAnnotationsOfDeclaration[lastOwner]
|
||||||
@@ -122,53 +122,53 @@ private class FirPredicateBasedProviderImpl(private val session: FirSession) : F
|
|||||||
|
|
||||||
// ---------------------------------- Matching ----------------------------------
|
// ---------------------------------- Matching ----------------------------------
|
||||||
|
|
||||||
override fun matches(predicate: DeclarationPredicate, declaration: FirAnnotatedDeclaration): Boolean {
|
override fun matches(predicate: DeclarationPredicate, declaration: FirAnnotatedDeclaration<*>): Boolean {
|
||||||
return predicate.accept(matcher, declaration)
|
return predicate.accept(matcher, declaration)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val matcher = Matcher()
|
private val matcher = Matcher()
|
||||||
|
|
||||||
private inner class Matcher : DeclarationPredicateVisitor<Boolean, FirAnnotatedDeclaration>() {
|
private inner class Matcher : DeclarationPredicateVisitor<Boolean, FirAnnotatedDeclaration<*>>() {
|
||||||
override fun visitPredicate(predicate: DeclarationPredicate, data: FirAnnotatedDeclaration): Boolean {
|
override fun visitPredicate(predicate: DeclarationPredicate, data: FirAnnotatedDeclaration<*>): Boolean {
|
||||||
throw IllegalStateException("Should not be there")
|
throw IllegalStateException("Should not be there")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitAny(predicate: DeclarationPredicate.Any, data: FirAnnotatedDeclaration): Boolean {
|
override fun visitAny(predicate: DeclarationPredicate.Any, data: FirAnnotatedDeclaration<*>): Boolean {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitAnd(predicate: DeclarationPredicate.And, data: FirAnnotatedDeclaration): Boolean {
|
override fun visitAnd(predicate: DeclarationPredicate.And, data: FirAnnotatedDeclaration<*>): Boolean {
|
||||||
return predicate.a.accept(this, data) && predicate.b.accept(this, data)
|
return predicate.a.accept(this, data) && predicate.b.accept(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitOr(predicate: DeclarationPredicate.Or, data: FirAnnotatedDeclaration): Boolean {
|
override fun visitOr(predicate: DeclarationPredicate.Or, data: FirAnnotatedDeclaration<*>): Boolean {
|
||||||
return predicate.a.accept(this, data) || predicate.b.accept(this, data)
|
return predicate.a.accept(this, data) || predicate.b.accept(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitAnnotatedWith(predicate: AnnotatedWith, data: FirAnnotatedDeclaration): Boolean {
|
override fun visitAnnotatedWith(predicate: AnnotatedWith, data: FirAnnotatedDeclaration<*>): Boolean {
|
||||||
return matchWith(data, predicate.annotations)
|
return matchWith(data, predicate.annotations)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitUnderAnnotatedWith(predicate: UnderAnnotatedWith, data: FirAnnotatedDeclaration): Boolean {
|
override fun visitUnderAnnotatedWith(predicate: UnderAnnotatedWith, data: FirAnnotatedDeclaration<*>): Boolean {
|
||||||
return matchUnder(data, predicate.annotations)
|
return matchUnder(data, predicate.annotations)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitAnnotatedWithMeta(predicate: AnnotatedWithMeta, data: FirAnnotatedDeclaration): Boolean {
|
override fun visitAnnotatedWithMeta(predicate: AnnotatedWithMeta, data: FirAnnotatedDeclaration<*>): Boolean {
|
||||||
return matchWith(data, predicate.userDefinedAnnotations)
|
return matchWith(data, predicate.userDefinedAnnotations)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitUnderMetaAnnotated(predicate: UnderMetaAnnotated, data: FirAnnotatedDeclaration): Boolean {
|
override fun visitUnderMetaAnnotated(predicate: UnderMetaAnnotated, data: FirAnnotatedDeclaration<*>): Boolean {
|
||||||
return matchUnder(data, predicate.userDefinedAnnotations)
|
return matchUnder(data, predicate.userDefinedAnnotations)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val MetaAnnotated.userDefinedAnnotations: Set<AnnotationFqn>
|
private val MetaAnnotated.userDefinedAnnotations: Set<AnnotationFqn>
|
||||||
get() = metaAnnotations.flatMapTo(mutableSetOf()) { registeredPluginAnnotations.getAnnotationsWithMetaAnnotation(it) }
|
get() = metaAnnotations.flatMapTo(mutableSetOf()) { registeredPluginAnnotations.getAnnotationsWithMetaAnnotation(it) }
|
||||||
|
|
||||||
private fun matchWith(declaration: FirAnnotatedDeclaration, annotations: Set<AnnotationFqn>): Boolean {
|
private fun matchWith(declaration: FirAnnotatedDeclaration<*>, annotations: Set<AnnotationFqn>): Boolean {
|
||||||
return cache.annotationsOfDeclaration[declaration].any { it in annotations }
|
return cache.annotationsOfDeclaration[declaration].any { it in annotations }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun matchUnder(declaration: FirAnnotatedDeclaration, annotations: Set<AnnotationFqn>): Boolean {
|
private fun matchUnder(declaration: FirAnnotatedDeclaration<*>, annotations: Set<AnnotationFqn>): Boolean {
|
||||||
return cache.parentAnnotationsOfDeclaration[declaration].any { it in annotations }
|
return cache.parentAnnotationsOfDeclaration[declaration].any { it in annotations }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -176,13 +176,13 @@ private class FirPredicateBasedProviderImpl(private val session: FirSession) : F
|
|||||||
// ---------------------------------- Cache ----------------------------------
|
// ---------------------------------- Cache ----------------------------------
|
||||||
|
|
||||||
private class Cache {
|
private class Cache {
|
||||||
val declarationByAnnotation: Multimap<AnnotationFqn, FirAnnotatedDeclaration> = LinkedHashMultimap.create()
|
val declarationByAnnotation: Multimap<AnnotationFqn, FirAnnotatedDeclaration<*>> = LinkedHashMultimap.create()
|
||||||
val annotationsOfDeclaration: LinkedHashMultimap<FirAnnotatedDeclaration, AnnotationFqn> = LinkedHashMultimap.create()
|
val annotationsOfDeclaration: LinkedHashMultimap<FirAnnotatedDeclaration<*>, AnnotationFqn> = LinkedHashMultimap.create()
|
||||||
|
|
||||||
val declarationsUnderAnnotated: Multimap<AnnotationFqn, FirAnnotatedDeclaration> = LinkedHashMultimap.create()
|
val declarationsUnderAnnotated: Multimap<AnnotationFqn, FirAnnotatedDeclaration<*>> = LinkedHashMultimap.create()
|
||||||
val parentAnnotationsOfDeclaration: LinkedHashMultimap<FirAnnotatedDeclaration, AnnotationFqn> = LinkedHashMultimap.create()
|
val parentAnnotationsOfDeclaration: LinkedHashMultimap<FirAnnotatedDeclaration<*>, AnnotationFqn> = LinkedHashMultimap.create()
|
||||||
|
|
||||||
val ownersForDeclaration: MutableMap<FirAnnotatedDeclaration, PersistentList<FirAnnotatedDeclaration>> = mutableMapOf()
|
val ownersForDeclaration: MutableMap<FirAnnotatedDeclaration<*>, PersistentList<FirAnnotatedDeclaration<*>>> = mutableMapOf()
|
||||||
|
|
||||||
val filesWithPluginAnnotations: MutableSet<FirFile> = mutableSetOf()
|
val filesWithPluginAnnotations: MutableSet<FirFile> = mutableSetOf()
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -25,8 +25,8 @@ abstract class FirStatusTransformerExtension(session: FirSession) : FirPredicate
|
|||||||
final override val extensionType: KClass<out FirExtension> = FirStatusTransformerExtension::class
|
final override val extensionType: KClass<out FirExtension> = FirStatusTransformerExtension::class
|
||||||
|
|
||||||
abstract fun transformStatus(
|
abstract fun transformStatus(
|
||||||
declaration: FirDeclaration,
|
declaration: FirDeclaration<*>,
|
||||||
owners: List<FirAnnotatedDeclaration>,
|
owners: List<FirAnnotatedDeclaration<*>>,
|
||||||
status: FirDeclarationStatus
|
status: FirDeclarationStatus
|
||||||
): FirDeclarationStatus
|
): FirDeclarationStatus
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ data class SessionHolderImpl(override val session: FirSession, override val scop
|
|||||||
abstract class BodyResolveComponents : SessionHolder {
|
abstract class BodyResolveComponents : SessionHolder {
|
||||||
abstract val returnTypeCalculator: ReturnTypeCalculator
|
abstract val returnTypeCalculator: ReturnTypeCalculator
|
||||||
abstract val implicitReceiverStack: ImplicitReceiverStack
|
abstract val implicitReceiverStack: ImplicitReceiverStack
|
||||||
abstract val containingDeclarations: List<FirDeclaration>
|
abstract val containingDeclarations: List<FirDeclaration<*>>
|
||||||
abstract val fileImportsScope: List<FirScope>
|
abstract val fileImportsScope: List<FirScope>
|
||||||
abstract val towerDataElements: List<FirTowerDataElement>
|
abstract val towerDataElements: List<FirTowerDataElement>
|
||||||
abstract val towerDataContext: FirTowerDataContext
|
abstract val towerDataContext: FirTowerDataContext
|
||||||
@@ -53,7 +53,7 @@ abstract class BodyResolveComponents : SessionHolder {
|
|||||||
abstract val noExpectedType: FirTypeRef
|
abstract val noExpectedType: FirTypeRef
|
||||||
abstract val symbolProvider: FirSymbolProvider
|
abstract val symbolProvider: FirSymbolProvider
|
||||||
abstract val file: FirFile
|
abstract val file: FirFile
|
||||||
abstract val container: FirDeclaration
|
abstract val container: FirDeclaration<*>
|
||||||
abstract val resolutionStageRunner: ResolutionStageRunner
|
abstract val resolutionStageRunner: ResolutionStageRunner
|
||||||
abstract val samResolver: FirSamResolver
|
abstract val samResolver: FirSamResolver
|
||||||
abstract val callResolver: FirCallResolver
|
abstract val callResolver: FirCallResolver
|
||||||
@@ -211,7 +211,7 @@ data class ImplicitReceivers(
|
|||||||
|
|
||||||
fun SessionHolder.collectImplicitReceivers(
|
fun SessionHolder.collectImplicitReceivers(
|
||||||
type: ConeKotlinType?,
|
type: ConeKotlinType?,
|
||||||
owner: FirDeclaration
|
owner: FirDeclaration<*>
|
||||||
): ImplicitReceivers {
|
): ImplicitReceivers {
|
||||||
if (type == null) return ImplicitReceivers(null, emptyList())
|
if (type == null) return ImplicitReceivers(null, emptyList())
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType
|
|||||||
import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolved
|
import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolved
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData
|
import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.importedFromObjectData
|
import org.jetbrains.kotlin.fir.scopes.impl.importedFromObjectData
|
||||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
|
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
|
||||||
@@ -59,7 +59,7 @@ fun FirFunction<*>.constructFunctionalTypeRef(isSuspend: Boolean = false): FirRe
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
val rawReturnType = (this as FirTypedDeclaration).returnTypeRef.coneType
|
val rawReturnType = (this as FirTypedDeclaration<*>).returnTypeRef.coneType
|
||||||
|
|
||||||
val functionalType = createFunctionalType(parameters, receiverTypeRef?.coneType, rawReturnType, isSuspend = isSuspend)
|
val functionalType = createFunctionalType(parameters, receiverTypeRef?.coneType, rawReturnType, isSuspend = isSuspend)
|
||||||
|
|
||||||
@@ -155,7 +155,7 @@ internal fun typeForReifiedParameterReference(parameterReferenceBuilder: FirReso
|
|||||||
return resultType.resolvedTypeFromPrototype(typeParameterSymbol.constructType(emptyArray(), false))
|
return resultType.resolvedTypeFromPrototype(typeParameterSymbol.constructType(emptyArray(), false))
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun typeForQualifierByDeclaration(declaration: FirDeclaration, resultType: FirTypeRef, session: FirSession): FirTypeRef? {
|
internal fun typeForQualifierByDeclaration(declaration: FirDeclaration<*>, resultType: FirTypeRef, session: FirSession): FirTypeRef? {
|
||||||
if (declaration is FirTypeAlias) {
|
if (declaration is FirTypeAlias) {
|
||||||
val expandedDeclaration = declaration.expandedConeType?.lookupTag?.toSymbol(session)?.fir ?: return null
|
val expandedDeclaration = declaration.expandedConeType?.lookupTag?.toSymbol(session)?.fir ?: return null
|
||||||
return typeForQualifierByDeclaration(expandedDeclaration, resultType, session)
|
return typeForQualifierByDeclaration(expandedDeclaration, resultType, session)
|
||||||
@@ -413,7 +413,7 @@ fun FirFunction<*>.getAsForbiddenNamedArgumentsTarget(session: FirSession): Forb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this is FirMemberDeclaration && status.isExpect) {
|
if (this is FirMemberDeclaration<*> && status.isExpect) {
|
||||||
return ForbiddenNamedArgumentsTarget.EXPECTED_CLASS_MEMBER
|
return ForbiddenNamedArgumentsTarget.EXPECTED_CLASS_MEMBER
|
||||||
}
|
}
|
||||||
return when (origin) {
|
return when (origin) {
|
||||||
|
|||||||
+2
-2
@@ -18,11 +18,11 @@ import org.jetbrains.kotlin.fir.resolve.createFunctionalType
|
|||||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnsupportedCallableReferenceTarget
|
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnsupportedCallableReferenceTarget
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.extractInputOutputTypesFromCallableReferenceExpectedType
|
import org.jetbrains.kotlin.fir.resolve.inference.extractInputOutputTypesFromCallableReferenceExpectedType
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType
|
import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.resolve.calls.components.SuspendConversionStrategy
|
import org.jetbrains.kotlin.resolve.calls.components.SuspendConversionStrategy
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemOperation
|
import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemOperation
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.model.SimpleConstraintSystemConstraintPosition
|
import org.jetbrains.kotlin.resolve.calls.inference.model.SimpleConstraintSystemConstraintPosition
|
||||||
@@ -407,6 +407,6 @@ private fun FirVariable<*>.canBeMutableReference(candidate: Candidate): Boolean
|
|||||||
if (this is FirField) return true
|
if (this is FirField) return true
|
||||||
val original = this.unwrapFakeOverrides()
|
val original = this.unwrapFakeOverrides()
|
||||||
return original.source?.kind == FirFakeSourceElementKind.PropertyFromParameter ||
|
return original.source?.kind == FirFakeSourceElementKind.PropertyFromParameter ||
|
||||||
(original.setter is FirMemberDeclaration &&
|
(original.setter is FirMemberDeclaration<*> &&
|
||||||
candidate.callInfo.session.visibilityChecker.isVisible(original.setter!!, candidate))
|
candidate.callInfo.session.visibilityChecker.isVisible(original.setter!!, candidate))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ data class CallInfo(
|
|||||||
val typeArguments: List<FirTypeProjection>,
|
val typeArguments: List<FirTypeProjection>,
|
||||||
val session: FirSession,
|
val session: FirSession,
|
||||||
val containingFile: FirFile,
|
val containingFile: FirFile,
|
||||||
val containingDeclarations: List<FirDeclaration>,
|
val containingDeclarations: List<FirDeclaration<*>>,
|
||||||
|
|
||||||
val candidateForCommonInvokeReceiver: Candidate? = null,
|
val candidateForCommonInvokeReceiver: Candidate? = null,
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -10,8 +10,8 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.modality
|
import org.jetbrains.kotlin.fir.declarations.modality
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.ConeTypeParameterBasedTypeVariable
|
import org.jetbrains.kotlin.fir.resolve.inference.ConeTypeParameterBasedTypeVariable
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
|
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
||||||
import org.jetbrains.kotlin.fir.types.coneType
|
import org.jetbrains.kotlin.fir.types.coneType
|
||||||
@@ -102,7 +102,7 @@ class ConeOverloadConflictResolver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (discriminateAbstracts) {
|
if (discriminateAbstracts) {
|
||||||
val filtered = candidates.filterTo(mutableSetOf()) { (it.symbol.fir as? FirMemberDeclaration)?.modality != Modality.ABSTRACT }
|
val filtered = candidates.filterTo(mutableSetOf()) { (it.symbol.fir as? FirMemberDeclaration<*>)?.modality != Modality.ABSTRACT }
|
||||||
when (filtered.size) {
|
when (filtered.size) {
|
||||||
1 -> return filtered
|
1 -> return filtered
|
||||||
0, candidates.size -> {
|
0, candidates.size -> {
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.calls
|
package org.jetbrains.kotlin.fir.resolve.calls
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
|
||||||
import org.jetbrains.kotlin.fir.FirVisibilityChecker
|
import org.jetbrains.kotlin.fir.FirVisibilityChecker
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
@@ -101,7 +100,7 @@ object CheckDispatchReceiver : ResolutionStage() {
|
|||||||
override suspend fun check(candidate: Candidate, callInfo: CallInfo, sink: CheckerSink, context: ResolutionContext) {
|
override suspend fun check(candidate: Candidate, callInfo: CallInfo, sink: CheckerSink, context: ResolutionContext) {
|
||||||
val explicitReceiverExpression = callInfo.explicitReceiver
|
val explicitReceiverExpression = callInfo.explicitReceiver
|
||||||
if (explicitReceiverExpression.isSuperCall()) {
|
if (explicitReceiverExpression.isSuperCall()) {
|
||||||
val status = candidate.symbol.fir as? FirMemberDeclaration
|
val status = candidate.symbol.fir as? FirMemberDeclaration<*>
|
||||||
if (status?.modality == Modality.ABSTRACT) {
|
if (status?.modality == Modality.ABSTRACT) {
|
||||||
sink.reportDiagnostic(ResolvedWithLowPriority)
|
sink.reportDiagnostic(ResolvedWithLowPriority)
|
||||||
}
|
}
|
||||||
@@ -197,7 +196,7 @@ internal object CheckVisibility : CheckerStage() {
|
|||||||
val visibilityChecker = callInfo.session.visibilityChecker
|
val visibilityChecker = callInfo.session.visibilityChecker
|
||||||
val symbol = candidate.symbol
|
val symbol = candidate.symbol
|
||||||
val declaration = symbol.fir
|
val declaration = symbol.fir
|
||||||
if (declaration is FirMemberDeclaration) {
|
if (declaration is FirMemberDeclaration<*>) {
|
||||||
if (!checkVisibility(declaration, sink, candidate, visibilityChecker)) {
|
if (!checkVisibility(declaration, sink, candidate, visibilityChecker)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -216,12 +215,12 @@ internal object CheckVisibility : CheckerStage() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun <T> checkVisibility(
|
private suspend fun <T : FirMemberDeclaration<*>> checkVisibility(
|
||||||
declaration: T,
|
declaration: T,
|
||||||
sink: CheckerSink,
|
sink: CheckerSink,
|
||||||
candidate: Candidate,
|
candidate: Candidate,
|
||||||
visibilityChecker: FirVisibilityChecker
|
visibilityChecker: FirVisibilityChecker
|
||||||
): Boolean where T : FirMemberDeclaration, T : FirSymbolOwner<*> {
|
): Boolean {
|
||||||
if (!visibilityChecker.isVisible(declaration, candidate)) {
|
if (!visibilityChecker.isVisible(declaration, candidate)) {
|
||||||
sink.yieldDiagnostic(HiddenCandidate)
|
sink.yieldDiagnostic(HiddenCandidate)
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.dfa
|
package org.jetbrains.kotlin.fir.resolve.dfa
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.CFGNode
|
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.CFGNode
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
|
|
||||||
@@ -76,12 +76,12 @@ class SymbolBasedNodeStorage<T, N : CFGNode<T>> : Stack<N>() where T : FirElemen
|
|||||||
override fun top(): N = stack.top()
|
override fun top(): N = stack.top()
|
||||||
|
|
||||||
override fun pop(): N = stack.pop().also {
|
override fun pop(): N = stack.pop().also {
|
||||||
map.remove((it.fir as FirSymbolOwner<*>).symbol)
|
map.remove((it.fir as FirDeclaration<*>).symbol)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun push(value: N) {
|
override fun push(value: N) {
|
||||||
stack.push(value)
|
stack.push(value)
|
||||||
map[(value.fir as FirSymbolOwner<*>).symbol] = value
|
map[(value.fir as FirDeclaration<*>).symbol] = value
|
||||||
}
|
}
|
||||||
|
|
||||||
operator fun get(key: FirBasedSymbol<*>): N? {
|
operator fun get(key: FirBasedSymbol<*>): N? {
|
||||||
@@ -92,4 +92,4 @@ class SymbolBasedNodeStorage<T, N : CFGNode<T>> : Stack<N>() where T : FirElemen
|
|||||||
stack.reset()
|
stack.reset()
|
||||||
map.clear()
|
map.clear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.resolve.dfa.cfg
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
|
|
||||||
class ControlFlowGraph(val declaration: FirDeclaration?, val name: String, val kind: Kind) {
|
class ControlFlowGraph(val declaration: FirDeclaration<*>?, val name: String, val kind: Kind) {
|
||||||
private var _nodes: MutableList<CFGNode<*>> = mutableListOf()
|
private var _nodes: MutableList<CFGNode<*>> = mutableListOf()
|
||||||
|
|
||||||
val nodes: List<CFGNode<*>>
|
val nodes: List<CFGNode<*>>
|
||||||
|
|||||||
+5
-6
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.resolve.dfa.cfg
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange
|
import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.buildAnonymousFunctionExpression
|
import org.jetbrains.kotlin.fir.expressions.builder.buildAnonymousFunctionExpression
|
||||||
@@ -413,13 +412,13 @@ class ControlFlowGraphBuilder {
|
|||||||
return popGraph()
|
return popGraph()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun prepareForLocalClassMembers(members: Collection<FirSymbolOwner<*>>) {
|
fun prepareForLocalClassMembers(members: Collection<FirDeclaration<*>>) {
|
||||||
members.forEachMember {
|
members.forEachMember {
|
||||||
enterToLocalClassesMembers[it.symbol] = lastNodes.topOrNull()
|
enterToLocalClassesMembers[it.symbol] = lastNodes.topOrNull()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun cleanAfterForLocalClassMembers(members: Collection<FirSymbolOwner<*>>) {
|
fun cleanAfterForLocalClassMembers(members: Collection<FirDeclaration<*>>) {
|
||||||
members.forEachMember {
|
members.forEachMember {
|
||||||
enterToLocalClassesMembers.remove(it.symbol)
|
enterToLocalClassesMembers.remove(it.symbol)
|
||||||
}
|
}
|
||||||
@@ -1362,7 +1361,7 @@ class ControlFlowGraphBuilder {
|
|||||||
|
|
||||||
// ----------------------------------- Utils -----------------------------------
|
// ----------------------------------- Utils -----------------------------------
|
||||||
|
|
||||||
private inline fun Collection<FirSymbolOwner<*>>.forEachMember(block: (FirSymbolOwner<*>) -> Unit) {
|
private inline fun Collection<FirDeclaration<*>>.forEachMember(block: (FirDeclaration<*>) -> Unit) {
|
||||||
for (member in this) {
|
for (member in this) {
|
||||||
for (callableDeclaration in member.unwrap()) {
|
for (callableDeclaration in member.unwrap()) {
|
||||||
block(callableDeclaration)
|
block(callableDeclaration)
|
||||||
@@ -1370,7 +1369,7 @@ class ControlFlowGraphBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirSymbolOwner<*>.unwrap(): List<FirSymbolOwner<*>> =
|
private fun FirDeclaration<*>.unwrap(): List<FirDeclaration<*>> =
|
||||||
when (this) {
|
when (this) {
|
||||||
is FirFunction<*>, is FirAnonymousInitializer -> listOf(this)
|
is FirFunction<*>, is FirAnonymousInitializer -> listOf(this)
|
||||||
is FirProperty -> listOfNotNull(this.getter, this.setter, this)
|
is FirProperty -> listOfNotNull(this.getter, this.setter, this)
|
||||||
@@ -1384,4 +1383,4 @@ class ControlFlowGraphBuilder {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirDeclaration?.isLocalClassOrAnonymousObject() = ((this as? FirRegularClass)?.isLocal == true) || this is FirAnonymousObject
|
fun FirDeclaration<*>?.isLocalClassOrAnonymousObject() = ((this as? FirRegularClass)?.isLocal == true) || this is FirAnonymousObject
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ package org.jetbrains.kotlin.fir.resolve.dfa
|
|||||||
|
|
||||||
import kotlinx.collections.immutable.PersistentMap
|
import kotlinx.collections.immutable.PersistentMap
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
|
||||||
import org.jetbrains.kotlin.fir.contracts.description.ConeBooleanConstantReference
|
import org.jetbrains.kotlin.fir.contracts.description.ConeBooleanConstantReference
|
||||||
import org.jetbrains.kotlin.fir.contracts.description.ConeConstantReference
|
import org.jetbrains.kotlin.fir.contracts.description.ConeConstantReference
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirThisReference
|
import org.jetbrains.kotlin.fir.references.FirThisReference
|
||||||
@@ -95,7 +95,7 @@ internal val FirExpression.coneType: ConeKotlinType
|
|||||||
internal val FirElement.symbol: FirBasedSymbol<*>?
|
internal val FirElement.symbol: FirBasedSymbol<*>?
|
||||||
get() = when (this) {
|
get() = when (this) {
|
||||||
is FirResolvable -> symbol
|
is FirResolvable -> symbol
|
||||||
is FirSymbolOwner<*> -> symbol
|
is FirDeclaration<*> -> symbol
|
||||||
is FirWhenSubjectExpression -> whenRef.value.subject?.symbol
|
is FirWhenSubjectExpression -> whenRef.value.subject?.symbol
|
||||||
is FirSafeCallExpression -> regularQualifiedAccess.symbol
|
is FirSafeCallExpression -> regularQualifiedAccess.symbol
|
||||||
else -> null
|
else -> null
|
||||||
|
|||||||
+1
-1
@@ -273,4 +273,4 @@ class FirStubTypeTransformer(
|
|||||||
private val BUILDER_INFERENCE_ANNOTATION_CLASS_ID = ClassId.topLevel(BUILDER_INFERENCE_ANNOTATION_FQ_NAME)
|
private val BUILDER_INFERENCE_ANNOTATION_CLASS_ID = ClassId.topLevel(BUILDER_INFERENCE_ANNOTATION_FQ_NAME)
|
||||||
|
|
||||||
fun FirElement.hasBuilderInferenceAnnotation(): Boolean =
|
fun FirElement.hasBuilderInferenceAnnotation(): Boolean =
|
||||||
(this as? FirAnnotatedDeclaration)?.hasAnnotation(BUILDER_INFERENCE_ANNOTATION_CLASS_ID) == true
|
(this as? FirAnnotatedDeclaration<*>)?.hasAnnotation(BUILDER_INFERENCE_ANNOTATION_CLASS_ID) == true
|
||||||
|
|||||||
@@ -41,10 +41,10 @@ abstract class FirProvider : FirSessionComponent {
|
|||||||
abstract fun getFirFilesByPackage(fqName: FqName): List<FirFile>
|
abstract fun getFirFilesByPackage(fqName: FqName): List<FirFile>
|
||||||
|
|
||||||
@FirProviderInternals
|
@FirProviderInternals
|
||||||
abstract fun recordGeneratedClass(owner: FirAnnotatedDeclaration, klass: FirRegularClass)
|
abstract fun recordGeneratedClass(owner: FirAnnotatedDeclaration<*>, klass: FirRegularClass)
|
||||||
|
|
||||||
@FirProviderInternals
|
@FirProviderInternals
|
||||||
abstract fun recordGeneratedMember(owner: FirAnnotatedDeclaration, klass: FirDeclaration)
|
abstract fun recordGeneratedMember(owner: FirAnnotatedDeclaration<*>, klass: FirDeclaration<*>)
|
||||||
|
|
||||||
abstract fun getClassNamesInPackage(fqName: FqName): Set<Name>
|
abstract fun getClassNamesInPackage(fqName: FqName): Set<Name>
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.scopes.getDeclaredConstructors
|
|||||||
import org.jetbrains.kotlin.fir.scopes.getFunctions
|
import org.jetbrains.kotlin.fir.scopes.getFunctions
|
||||||
import org.jetbrains.kotlin.fir.scopes.getProperties
|
import org.jetbrains.kotlin.fir.scopes.getProperties
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.ConeLookupTagBasedType
|
import org.jetbrains.kotlin.fir.types.ConeLookupTagBasedType
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
|
|||||||
+3
-3
@@ -27,12 +27,12 @@ class FirLibrarySessionProvider(
|
|||||||
override fun getFirFilesByPackage(fqName: FqName): List<FirFile> = emptyList()
|
override fun getFirFilesByPackage(fqName: FqName): List<FirFile> = emptyList()
|
||||||
|
|
||||||
@FirProviderInternals
|
@FirProviderInternals
|
||||||
override fun recordGeneratedClass(owner: FirAnnotatedDeclaration, klass: FirRegularClass) = shouldNotBeCalled()
|
override fun recordGeneratedClass(owner: FirAnnotatedDeclaration<*>, klass: FirRegularClass) = shouldNotBeCalled()
|
||||||
|
|
||||||
@FirProviderInternals
|
@FirProviderInternals
|
||||||
override fun recordGeneratedMember(owner: FirAnnotatedDeclaration, klass: FirDeclaration) = shouldNotBeCalled()
|
override fun recordGeneratedMember(owner: FirAnnotatedDeclaration<*>, klass: FirDeclaration<*>) = shouldNotBeCalled()
|
||||||
|
|
||||||
override fun getClassNamesInPackage(fqName: FqName): Set<Name> = shouldNotBeCalled()
|
override fun getClassNamesInPackage(fqName: FqName): Set<Name> = shouldNotBeCalled()
|
||||||
|
|
||||||
private fun shouldNotBeCalled(): Nothing = error("Should not be called for FirLibrarySessionProvider")
|
private fun shouldNotBeCalled(): Nothing = error("Should not be called for FirLibrarySessionProvider")
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -14,9 +14,9 @@ import org.jetbrains.kotlin.fir.resolve.providers.FirProviderInternals
|
|||||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProviderInternals
|
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProviderInternals
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
|
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
|
||||||
import org.jetbrains.kotlin.name.CallableId
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
|
||||||
|
import org.jetbrains.kotlin.name.CallableId
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -78,16 +78,16 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: FirKotli
|
|||||||
}
|
}
|
||||||
|
|
||||||
@FirProviderInternals
|
@FirProviderInternals
|
||||||
override fun recordGeneratedClass(owner: FirAnnotatedDeclaration, klass: FirRegularClass) {
|
override fun recordGeneratedClass(owner: FirAnnotatedDeclaration<*>, klass: FirRegularClass) {
|
||||||
klass.accept(FirRecorder, FirRecorderData(state, owner.file, session.nameConflictsTracker))
|
klass.accept(FirRecorder, FirRecorderData(state, owner.file, session.nameConflictsTracker))
|
||||||
}
|
}
|
||||||
|
|
||||||
@FirProviderInternals
|
@FirProviderInternals
|
||||||
override fun recordGeneratedMember(owner: FirAnnotatedDeclaration, klass: FirDeclaration) {
|
override fun recordGeneratedMember(owner: FirAnnotatedDeclaration<*>, klass: FirDeclaration<*>) {
|
||||||
klass.accept(FirRecorder, FirRecorderData(state, owner.file, session.nameConflictsTracker))
|
klass.accept(FirRecorder, FirRecorderData(state, owner.file, session.nameConflictsTracker))
|
||||||
}
|
}
|
||||||
|
|
||||||
private val FirAnnotatedDeclaration.file: FirFile
|
private val FirAnnotatedDeclaration<*>.file: FirFile
|
||||||
get() = when (this) {
|
get() = when (this) {
|
||||||
is FirFile -> this
|
is FirFile -> this
|
||||||
is FirRegularClass -> getFirClassifierContainerFile(this.symbol.classId)
|
is FirRegularClass -> getFirClassifierContainerFile(this.symbol.classId)
|
||||||
|
|||||||
+2
-3
@@ -31,11 +31,10 @@ abstract class FirAbstractPhaseTransformer<D>(
|
|||||||
file.replaceResolvePhase(transformerPhase)
|
file.replaceResolvePhase(transformerPhase)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
return super.transformFile(file, data)
|
||||||
return super.transformFile(file, data) as FirFile
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformDeclaration(declaration: FirDeclaration, data: D): FirDeclaration {
|
override fun <T : FirDeclaration<T>> transformDeclaration(declaration: FirDeclaration<T>, data: D): FirDeclaration<T> {
|
||||||
if (declaration.resolvePhase < transformerPhase) {
|
if (declaration.resolvePhase < transformerPhase) {
|
||||||
declaration.replaceResolvePhase(transformerPhase)
|
declaration.replaceResolvePhase(transformerPhase)
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
|
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
|
||||||
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
|
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||||
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes
|
import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||||
@@ -33,7 +32,7 @@ abstract class FirAbstractTreeTransformerWithSuperTypes(
|
|||||||
protected val scopes = mutableListOf<FirScope>()
|
protected val scopes = mutableListOf<FirScope>()
|
||||||
protected val towerScope = FirCompositeScope(scopes.asReversed())
|
protected val towerScope = FirCompositeScope(scopes.asReversed())
|
||||||
|
|
||||||
protected open fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = transformerPhase > firDeclaration.resolvePhase
|
protected open fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean = transformerPhase > firDeclaration.resolvePhase
|
||||||
|
|
||||||
protected inline fun <T> withScopeCleanup(crossinline l: () -> T): T {
|
protected inline fun <T> withScopeCleanup(crossinline l: () -> T): T {
|
||||||
val sizeBefore = scopes.size
|
val sizeBefore = scopes.size
|
||||||
@@ -89,13 +88,13 @@ abstract class FirAbstractTreeTransformerWithSuperTypes(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun FirMemberDeclaration.addTypeParametersScope() {
|
protected fun FirMemberDeclaration<*>.addTypeParametersScope() {
|
||||||
if (typeParameters.isNotEmpty()) {
|
if (typeParameters.isNotEmpty()) {
|
||||||
scopes.add(FirMemberTypeParameterScope(this))
|
scopes.add(FirMemberTypeParameterScope(this))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun transformDeclarationContent(declaration: FirDeclaration, data: Any?): FirDeclaration {
|
open fun transformDeclarationContent(declaration: FirDeclaration<*>, data: Any?): FirDeclaration<*> {
|
||||||
return transformElement(declaration, data)
|
return transformElement(declaration, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user