[FIR] Move danglingConstraints attribute to other attributes

This commit is contained in:
Dmitriy Novozhilov
2021-06-21 11:16:59 +03:00
parent eca77324e0
commit 6c8096643c
4 changed files with 23 additions and 35 deletions
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
import org.jetbrains.kotlin.fir.declarations.getDanglingTypeConstraintsOrEmpty
import org.jetbrains.kotlin.fir.declarations.utils.getDanglingTypeConstraintsOrEmpty
object FirTypeConstraintsChecker : FirBasicDeclarationChecker() {
@@ -24,10 +24,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
import org.jetbrains.kotlin.fir.declarations.utils.addDeclarations
import org.jetbrains.kotlin.fir.declarations.utils.addDefaultBoundIfNecessary
import org.jetbrains.kotlin.fir.declarations.utils.isExternal
import org.jetbrains.kotlin.fir.declarations.utils.isInline
import org.jetbrains.kotlin.fir.declarations.utils.*
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.expressions.*
@@ -1,30 +0,0 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.name.Name
/**
* Constraint without corresponding type argiment
*/
data class DanglingTypeConstraint(val name: Name, val source: FirSourceElement)
private object DanglingTypeConstraintsKey : FirDeclarationDataKey()
var <T> T.danglingTypeConstraints: List<DanglingTypeConstraint>?
where T : FirDeclaration<T>, T : FirTypeParameterRefsOwner
by FirDeclarationDataRegistry.data(DanglingTypeConstraintsKey)
fun FirDeclaration<*>.getDanglingTypeConstraintsOrEmpty(): List<DanglingTypeConstraint> {
val res = when (this) {
is FirRegularClass -> danglingTypeConstraints
is FirSimpleFunction -> danglingTypeConstraints
is FirProperty -> danglingTypeConstraints
else -> null
}
return res ?: emptyList()
}
@@ -6,13 +6,16 @@
package org.jetbrains.kotlin.fir.declarations.utils
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.name.Name
private object IsFromVarargKey : FirDeclarationDataKey()
private object IsReferredViaField : FirDeclarationDataKey()
private object IsFromPrimaryConstructor : FirDeclarationDataKey()
private object SourceElementKey : FirDeclarationDataKey()
private object ModuleNameKey : FirDeclarationDataKey()
private object DanglingTypeConstraintsKey : FirDeclarationDataKey()
var FirProperty.isFromVararg: Boolean? by FirDeclarationDataRegistry.data(IsFromVarargKey)
var FirProperty.isReferredViaField: Boolean? by FirDeclarationDataRegistry.data(IsReferredViaField)
@@ -21,6 +24,15 @@ var FirTypeAlias.sourceElement: SourceElement? by FirDeclarationDataRegistry.dat
var FirRegularClass.sourceElement: SourceElement? by FirDeclarationDataRegistry.data(SourceElementKey)
var FirRegularClass.moduleName: String? by FirDeclarationDataRegistry.data(ModuleNameKey)
/**
* Constraint without corresponding type argument
*/
data class DanglingTypeConstraint(val name: Name, val source: FirSourceElement)
var <T> T.danglingTypeConstraints: List<DanglingTypeConstraint>?
where T : FirDeclaration<T>, T : FirTypeParameterRefsOwner
by FirDeclarationDataRegistry.data(DanglingTypeConstraintsKey)
// ----------------------------------- Utils -----------------------------------
val FirStatusOwner.containerSource: SourceElement?
@@ -49,3 +61,12 @@ val FirProperty.hasBackingField: Boolean
}
}
}
fun FirDeclaration<*>.getDanglingTypeConstraintsOrEmpty(): List<DanglingTypeConstraint> {
return when (this) {
is FirRegularClass -> danglingTypeConstraints
is FirSimpleFunction -> danglingTypeConstraints
is FirProperty -> danglingTypeConstraints
else -> null
} ?: emptyList()
}