[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 package org.jetbrains.kotlin.descriptors.commonizer.cir
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.constants.ConstantValue import org.jetbrains.kotlin.resolve.constants.ConstantValue
interface CirAnnotation { interface CirAnnotation : CirHasFqName {
val fqName: FqName
val constantValueArguments: Map<Name, ConstantValue<*>> val constantValueArguments: Map<Name, ConstantValue<*>>
val annotationValueArguments: Map<Name, CirAnnotation> 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.descriptors.ClassKind
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
interface CirClass : CirClassifier, CirDeclarationWithModality { interface CirClass : CirClassifier, CirHasModality {
val kind: ClassKind val kind: ClassKind
var companion: FqName? // null means no companion object var companion: FqName? // null means no companion object
val isCompanion: Boolean val isCompanion: Boolean
@@ -8,9 +8,10 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
interface CirClassConstructor : interface CirClassConstructor :
CirAnnotatedDeclaration, CirDeclaration,
CirDeclarationWithTypeParameters, CirHasAnnotations,
CirDeclarationWithVisibility, CirHasTypeParameters,
CirHasVisibility,
CirMaybeCallableMemberOfClass, CirMaybeCallableMemberOfClass,
CirCallableMemberWithParameters { CirCallableMemberWithParameters {
@@ -6,7 +6,8 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir package org.jetbrains.kotlin.descriptors.commonizer.cir
interface CirClassifier : interface CirClassifier :
CirAnnotatedDeclaration, CirDeclaration,
CirNamedDeclaration, CirHasAnnotations,
CirDeclarationWithTypeParameters, CirHasName,
CirDeclarationWithVisibility CirHasTypeParameters,
CirHasVisibility
@@ -11,9 +11,9 @@ import org.jetbrains.kotlin.descriptors.Modality
// TODO: inline? // TODO: inline?
data class CirContainingClassDetails( data class CirContainingClassDetails(
val kind: ClassKind, val kind: ClassKind,
val modality: Modality, override val modality: Modality,
val isData: Boolean val isData: Boolean
) { ) : CirHasModality {
companion object { companion object {
val DOES_NOT_MATTER = CirContainingClassDetails( val DOES_NOT_MATTER = CirContainingClassDetails(
kind = ClassKind.CLASS, kind = ClassKind.CLASS,
@@ -23,30 +23,31 @@ import org.jetbrains.kotlin.name.Name
*/ */
interface CirDeclaration interface CirDeclaration
interface CirAnnotatedDeclaration : CirDeclaration { interface CirHasAnnotations {
val annotations: List<CirAnnotation> val annotations: List<CirAnnotation>
} }
interface CirNamedDeclaration : CirDeclaration { interface CirHasName {
val name: Name val name: Name
} }
// TODO: merge with [CirDeclarationWithVisibility] interface CirHasFqName {
val fqName: FqName
}
interface CirHasVisibility { interface CirHasVisibility {
val visibility: Visibility val visibility: Visibility
} }
interface CirDeclarationWithVisibility : CirDeclaration, CirHasVisibility interface CirHasModality {
interface CirDeclarationWithModality : CirDeclaration {
val modality: Modality val modality: Modality
} }
interface CirMaybeCallableMemberOfClass : CirDeclaration { interface CirMaybeCallableMemberOfClass {
val containingClassDetails: CirContainingClassDetails? // null assumes no containing class val containingClassDetails: CirContainingClassDetails? // null assumes no containing class
} }
interface CirDeclarationWithTypeParameters : CirDeclaration { interface CirHasTypeParameters {
val typeParameters: List<CirTypeParameter> val typeParameters: List<CirTypeParameter>
} }
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir package org.jetbrains.kotlin.descriptors.commonizer.cir
interface CirExtensionReceiver { interface CirExtensionReceiver : CirHasAnnotations {
val annotations: List<CirAnnotation>
val type: CirType val type: CirType
} }
@@ -11,11 +11,12 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
interface CirFunctionOrProperty : interface CirFunctionOrProperty :
CirAnnotatedDeclaration, CirDeclaration,
CirNamedDeclaration, CirHasAnnotations,
CirDeclarationWithTypeParameters, CirHasName,
CirDeclarationWithVisibility, CirHasTypeParameters,
CirDeclarationWithModality, CirHasVisibility,
CirHasModality,
CirMaybeCallableMemberOfClass { CirMaybeCallableMemberOfClass {
val isExternal: Boolean val isExternal: Boolean
@@ -5,4 +5,4 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir 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 package org.jetbrains.kotlin.descriptors.commonizer.cir
import org.jetbrains.kotlin.name.FqName interface CirPackage : CirDeclaration, CirHasFqName
interface CirPackage : CirDeclaration {
val fqName: FqName
}
@@ -5,8 +5,7 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir package org.jetbrains.kotlin.descriptors.commonizer.cir
interface CirPropertyAccessor { interface CirPropertyAccessor : CirHasAnnotations {
val annotations: List<CirAnnotation>
val isDefault: Boolean val isDefault: Boolean
val isExternal: Boolean val isExternal: Boolean
val isInline: Boolean val isInline: Boolean
@@ -5,6 +5,6 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir package org.jetbrains.kotlin.descriptors.commonizer.cir
interface CirPropertySetter : CirPropertyAccessor, CirDeclarationWithVisibility { interface CirPropertySetter : CirDeclaration, CirPropertyAccessor, CirHasVisibility {
val parameterAnnotations: List<CirAnnotation> val parameterAnnotations: List<CirAnnotation>
} }
@@ -5,11 +5,9 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir 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.CLASS
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirSimpleTypeKind.TYPE_ALIAS import org.jetbrains.kotlin.descriptors.commonizer.cir.CirSimpleTypeKind.TYPE_ALIAS
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirTypeFactory 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.AbbreviatedType
import org.jetbrains.kotlin.types.Variance 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. * 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 kind: CirSimpleTypeKind
abstract val fqName: FqName
abstract val arguments: List<CirTypeProjection> abstract val arguments: List<CirTypeProjection>
abstract val isMarkedNullable: Boolean abstract val isMarkedNullable: Boolean
abstract val isDefinitelyNotNullType: Boolean abstract val isDefinitelyNotNullType: Boolean
@@ -5,12 +5,9 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir package org.jetbrains.kotlin.descriptors.commonizer.cir
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
interface CirTypeParameter { interface CirTypeParameter : CirHasAnnotations, CirHasName {
val annotations: List<CirAnnotation>
val name: Name
val isReified: Boolean val isReified: Boolean
val variance: Variance val variance: Variance
val upperBounds: List<CirType> val upperBounds: List<CirType>
@@ -5,11 +5,7 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir package org.jetbrains.kotlin.descriptors.commonizer.cir
import org.jetbrains.kotlin.name.Name interface CirValueParameter : CirHasAnnotations, CirHasName {
interface CirValueParameter {
val annotations: List<CirAnnotation>
val name: Name
val returnType: CirType val returnType: CirType
val varargElementType: CirType? val varargElementType: CirType?
val declaresDefaultValue: Boolean val declaresDefaultValue: Boolean