[Commonizer] Refactor/simplify marker interfaces

This commit is contained in:
Dmitriy Dolovov
2020-06-08 15:18:54 +07:00
parent f3b400975e
commit 596363ea23
15 changed files with 36 additions and 50 deletions
@@ -5,12 +5,10 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.constants.ConstantValue
interface CirAnnotation {
val fqName: FqName
interface CirAnnotation : CirHasFqName {
val constantValueArguments: Map<Name, ConstantValue<*>>
val annotationValueArguments: Map<Name, CirAnnotation>
}
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.name.FqName
interface CirClass : CirClassifier, CirDeclarationWithModality {
interface CirClass : CirClassifier, CirHasModality {
val kind: ClassKind
var companion: FqName? // null means no companion object
val isCompanion: Boolean
@@ -8,9 +8,10 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
interface CirClassConstructor :
CirAnnotatedDeclaration,
CirDeclarationWithTypeParameters,
CirDeclarationWithVisibility,
CirDeclaration,
CirHasAnnotations,
CirHasTypeParameters,
CirHasVisibility,
CirMaybeCallableMemberOfClass,
CirCallableMemberWithParameters {
@@ -6,7 +6,8 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir
interface CirClassifier :
CirAnnotatedDeclaration,
CirNamedDeclaration,
CirDeclarationWithTypeParameters,
CirDeclarationWithVisibility
CirDeclaration,
CirHasAnnotations,
CirHasName,
CirHasTypeParameters,
CirHasVisibility
@@ -11,9 +11,9 @@ import org.jetbrains.kotlin.descriptors.Modality
// TODO: inline?
data class CirContainingClassDetails(
val kind: ClassKind,
val modality: Modality,
override val modality: Modality,
val isData: Boolean
) {
) : CirHasModality {
companion object {
val DOES_NOT_MATTER = CirContainingClassDetails(
kind = ClassKind.CLASS,
@@ -23,30 +23,31 @@ import org.jetbrains.kotlin.name.Name
*/
interface CirDeclaration
interface CirAnnotatedDeclaration : CirDeclaration {
interface CirHasAnnotations {
val annotations: List<CirAnnotation>
}
interface CirNamedDeclaration : CirDeclaration {
interface CirHasName {
val name: Name
}
// TODO: merge with [CirDeclarationWithVisibility]
interface CirHasFqName {
val fqName: FqName
}
interface CirHasVisibility {
val visibility: Visibility
}
interface CirDeclarationWithVisibility : CirDeclaration, CirHasVisibility
interface CirDeclarationWithModality : CirDeclaration {
interface CirHasModality {
val modality: Modality
}
interface CirMaybeCallableMemberOfClass : CirDeclaration {
interface CirMaybeCallableMemberOfClass {
val containingClassDetails: CirContainingClassDetails? // null assumes no containing class
}
interface CirDeclarationWithTypeParameters : CirDeclaration {
interface CirHasTypeParameters {
val typeParameters: List<CirTypeParameter>
}
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir
interface CirExtensionReceiver {
val annotations: List<CirAnnotation>
interface CirExtensionReceiver : CirHasAnnotations {
val type: CirType
}
@@ -11,11 +11,12 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
interface CirFunctionOrProperty :
CirAnnotatedDeclaration,
CirNamedDeclaration,
CirDeclarationWithTypeParameters,
CirDeclarationWithVisibility,
CirDeclarationWithModality,
CirDeclaration,
CirHasAnnotations,
CirHasName,
CirHasTypeParameters,
CirHasVisibility,
CirHasModality,
CirMaybeCallableMemberOfClass {
val isExternal: Boolean
@@ -5,4 +5,4 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir
interface CirModule : CirNamedDeclaration
interface CirModule : CirDeclaration, CirHasName
@@ -5,8 +5,4 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir
import org.jetbrains.kotlin.name.FqName
interface CirPackage : CirDeclaration {
val fqName: FqName
}
interface CirPackage : CirDeclaration, CirHasFqName
@@ -5,8 +5,7 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir
interface CirPropertyAccessor {
val annotations: List<CirAnnotation>
interface CirPropertyAccessor : CirHasAnnotations {
val isDefault: Boolean
val isExternal: Boolean
val isInline: Boolean
@@ -5,6 +5,6 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir
interface CirPropertySetter : CirPropertyAccessor, CirDeclarationWithVisibility {
interface CirPropertySetter : CirDeclaration, CirPropertyAccessor, CirHasVisibility {
val parameterAnnotations: List<CirAnnotation>
}
@@ -5,11 +5,9 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirSimpleTypeKind.CLASS
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirSimpleTypeKind.TYPE_ALIAS
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirTypeFactory
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.types.AbbreviatedType
import org.jetbrains.kotlin.types.Variance
@@ -28,9 +26,8 @@ sealed class CirType {
*
* Note: Annotations at simple types are not preserved. After commonization all annotations assigned to types will be lost.
*/
abstract class CirSimpleType : CirType(), CirHasVisibility {
abstract class CirSimpleType : CirType(), CirHasVisibility, CirHasFqName {
abstract val kind: CirSimpleTypeKind
abstract val fqName: FqName
abstract val arguments: List<CirTypeProjection>
abstract val isMarkedNullable: Boolean
abstract val isDefinitelyNotNullType: Boolean
@@ -5,12 +5,9 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.Variance
interface CirTypeParameter {
val annotations: List<CirAnnotation>
val name: Name
interface CirTypeParameter : CirHasAnnotations, CirHasName {
val isReified: Boolean
val variance: Variance
val upperBounds: List<CirType>
@@ -5,11 +5,7 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir
import org.jetbrains.kotlin.name.Name
interface CirValueParameter {
val annotations: List<CirAnnotation>
val name: Name
interface CirValueParameter : CirHasAnnotations, CirHasName {
val returnType: CirType
val varargElementType: CirType?
val declaresDefaultValue: Boolean