[Commonizer] Replace DescriptorVisibilit[y,ies] by Visibilit[y,ies]

This commit is contained in:
Dmitriy Dolovov
2021-03-04 12:09:27 +03:00
parent 7bdbc893a0
commit 12be9c99ca
29 changed files with 164 additions and 149 deletions
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir
import kotlinx.metadata.*
import kotlinx.metadata.klib.KlibModuleMetadata
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
/**
* An intermediate representation of declarations for commonization purposes.
@@ -34,7 +34,7 @@ interface CirHasName {
}
interface CirHasVisibility {
val visibility: DescriptorVisibility
val visibility: Visibility
}
interface CirHasModality {
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.Visibilities
interface CirFunctionOrProperty :
CirDeclaration,
@@ -24,7 +24,7 @@ interface CirFunctionOrProperty :
val kind: CallableMemberDescriptor.Kind
fun isVirtual(): Boolean =
visibility != DescriptorVisibilities.PRIVATE
visibility != Visibilities.Private
&& modality != Modality.FINAL
&& !(containingClass?.modality == Modality.FINAL && containingClass?.kind != ClassKind.ENUM_CLASS)
}
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir.factory
import kotlinx.metadata.Flag
import kotlinx.metadata.KmConstructor
import kotlinx.metadata.klib.annotations
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.*
import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirClassConstructorImpl
import org.jetbrains.kotlin.descriptors.commonizer.metadata.decodeVisibility
@@ -31,7 +31,7 @@ object CirClassConstructorFactory {
inline fun create(
annotations: List<CirAnnotation>,
typeParameters: List<CirTypeParameter>,
visibility: DescriptorVisibility,
visibility: Visibility,
containingClass: CirContainingClass,
valueParameters: List<CirValueParameter>,
hasStableParameterNames: Boolean,
@@ -10,9 +10,9 @@ import kotlinx.metadata.KmAnnotation
import kotlinx.metadata.KmClass
import kotlinx.metadata.klib.annotations
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.*
import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirClassImpl
import org.jetbrains.kotlin.descriptors.commonizer.metadata.decodeClassKind
@@ -49,7 +49,7 @@ object CirClassFactory {
annotations = annotations.compactMap { CirAnnotationFactory.create(it, typeResolver) },
name = name,
typeParameters = emptyList(),
visibility = DescriptorVisibilities.PUBLIC,
visibility = Visibilities.Public,
modality = Modality.FINAL,
kind = ClassKind.ENUM_ENTRY,
companion = null,
@@ -74,7 +74,7 @@ object CirClassFactory {
annotations: List<CirAnnotation>,
name: CirName,
typeParameters: List<CirTypeParameter>,
visibility: DescriptorVisibility,
visibility: Visibility,
modality: Modality,
kind: ClassKind,
companion: CirName?,
@@ -9,8 +9,8 @@ import kotlinx.metadata.Flag
import kotlinx.metadata.KmFunction
import kotlinx.metadata.klib.annotations
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.*
import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirFunctionImpl
import org.jetbrains.kotlin.descriptors.commonizer.metadata.decodeCallableKind
@@ -41,7 +41,7 @@ object CirFunctionFactory {
annotations: List<CirAnnotation>,
name: CirName,
typeParameters: List<CirTypeParameter>,
visibility: DescriptorVisibility,
visibility: Visibility,
modality: Modality,
containingClass: CirContainingClass?,
valueParameters: List<CirValueParameter>,
@@ -10,8 +10,8 @@ import kotlinx.metadata.KmProperty
import kotlinx.metadata.klib.annotations
import kotlinx.metadata.klib.compileTimeValue
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.*
import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirPropertyImpl
import org.jetbrains.kotlin.descriptors.commonizer.metadata.decodeCallableKind
@@ -56,7 +56,7 @@ object CirPropertyFactory {
annotations: List<CirAnnotation>,
name: CirName,
typeParameters: List<CirTypeParameter>,
visibility: DescriptorVisibility,
visibility: Visibility,
modality: Modality,
containingClass: CirContainingClass?,
isExternal: Boolean,
@@ -9,8 +9,8 @@ import kotlinx.metadata.Flag
import kotlinx.metadata.KmProperty
import kotlinx.metadata.klib.annotations
import kotlinx.metadata.klib.setterAnnotations
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirAnnotation
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirPropertySetter
import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirPropertySetterImpl
@@ -41,7 +41,7 @@ object CirPropertySetterFactory {
fun create(
annotations: List<CirAnnotation>,
parameterAnnotations: List<CirAnnotation>,
visibility: DescriptorVisibility,
visibility: Visibility,
isDefault: Boolean,
isExternal: Boolean,
isInline: Boolean
@@ -59,11 +59,11 @@ object CirPropertySetterFactory {
}
@Suppress("NOTHING_TO_INLINE")
inline fun createDefaultNoAnnotations(visibility: DescriptorVisibility): CirPropertySetter = create(
inline fun createDefaultNoAnnotations(visibility: Visibility): CirPropertySetter = create(
annotations = emptyList(),
parameterAnnotations = emptyList(),
visibility = visibility,
isDefault = visibility == DescriptorVisibilities.PUBLIC,
isDefault = visibility == Visibilities.Public,
isExternal = false,
isInline = false
)
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir.factory
import kotlinx.metadata.KmTypeAlias
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.*
import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirTypeAliasImpl
import org.jetbrains.kotlin.descriptors.commonizer.metadata.decodeVisibility
@@ -32,7 +32,7 @@ object CirTypeAliasFactory {
annotations: List<CirAnnotation>,
name: CirName,
typeParameters: List<CirTypeParameter>,
visibility: DescriptorVisibility,
visibility: Visibility,
underlyingType: CirClassOrTypeAliasType,
expandedType: CirClassType
): CirTypeAlias {
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir.factory
import gnu.trove.TIntObjectHashMap
import kotlinx.metadata.*
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.*
import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirClassTypeImpl
import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirTypeAliasTypeImpl
@@ -24,7 +24,7 @@ object CirTypeFactory {
val ANY: CirClassType = createClassType(
classId = ANY_CLASS_ID,
outerType = null,
visibility = DescriptorVisibilities.PUBLIC,
visibility = Visibilities.Public,
arguments = emptyList(),
isMarkedNullable = false
)
@@ -87,7 +87,7 @@ object CirTypeFactory {
fun createClassType(
classId: CirEntityId,
outerType: CirClassType?,
visibility: DescriptorVisibility,
visibility: Visibility,
arguments: List<CirTypeProjection>,
isMarkedNullable: Boolean
): CirClassType {
@@ -5,13 +5,13 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir.impl
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.*
data class CirClassConstructorImpl(
override val annotations: List<CirAnnotation>,
override val typeParameters: List<CirTypeParameter>,
override val visibility: DescriptorVisibility,
override val visibility: Visibility,
override val containingClass: CirContainingClass,
override var valueParameters: List<CirValueParameter>,
override var hasStableParameterNames: Boolean,
@@ -7,14 +7,14 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir.impl
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.*
data class CirClassImpl(
override val annotations: List<CirAnnotation>,
override val name: CirName,
override val typeParameters: List<CirTypeParameter>,
override val visibility: DescriptorVisibility,
override val visibility: Visibility,
override val modality: Modality,
override val kind: ClassKind,
override var companion: CirName?,
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir.impl
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirClassType
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirEntityId
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirTypeProjection
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.descriptors.commonizer.utils.hashCode
data class CirClassTypeImpl(
override val classifierId: CirEntityId,
override val outerType: CirClassType?,
override val visibility: DescriptorVisibility, // visibility of the class descriptor
override val visibility: Visibility, // visibility of the class descriptor
override val arguments: List<CirTypeProjection>,
override val isMarkedNullable: Boolean,
) : CirClassType() {
@@ -7,14 +7,14 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir.impl
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.*
data class CirFunctionImpl(
override val annotations: List<CirAnnotation>,
override val name: CirName,
override val typeParameters: List<CirTypeParameter>,
override val visibility: DescriptorVisibility,
override val visibility: Visibility,
override val modality: Modality,
override val containingClass: CirContainingClass?,
override var valueParameters: List<CirValueParameter>,
@@ -7,14 +7,14 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir.impl
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.*
data class CirPropertyImpl(
override val annotations: List<CirAnnotation>,
override val name: CirName,
override val typeParameters: List<CirTypeParameter>,
override val visibility: DescriptorVisibility,
override val visibility: Visibility,
override val modality: Modality,
override val containingClass: CirContainingClass?,
override val isExternal: Boolean,
@@ -5,14 +5,14 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir.impl
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirAnnotation
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirPropertySetter
data class CirPropertySetterImpl(
override val annotations: List<CirAnnotation>,
override val parameterAnnotations: List<CirAnnotation>,
override val visibility: DescriptorVisibility,
override val visibility: Visibility,
override val isDefault: Boolean,
override val isExternal: Boolean,
override val isInline: Boolean
@@ -5,14 +5,14 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir.impl
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.*
data class CirTypeAliasImpl(
override val annotations: List<CirAnnotation>,
override val name: CirName,
override val typeParameters: List<CirTypeParameter>,
override val visibility: DescriptorVisibility,
override val visibility: Visibility,
override val underlyingType: CirClassOrTypeAliasType,
override val expandedType: CirClassType // only for commonization algorithm; does not participate in building resulting declarations
) : CirTypeAlias {
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.descriptors.commonizer.core
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirAnnotation
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirConstantValue
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirConstantValue.*
@@ -14,7 +14,9 @@ import org.jetbrains.kotlin.descriptors.commonizer.cir.CirName
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirAnnotationFactory
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirTypeFactory
import org.jetbrains.kotlin.descriptors.commonizer.core.AnnotationsCommonizer.Companion.FALLBACK_MESSAGE
import org.jetbrains.kotlin.descriptors.commonizer.utils.*
import org.jetbrains.kotlin.descriptors.commonizer.utils.DEPRECATED_ANNOTATION_CLASS_ID
import org.jetbrains.kotlin.descriptors.commonizer.utils.compactMap
import org.jetbrains.kotlin.descriptors.commonizer.utils.compactMapOf
import kotlin.DeprecationLevel.WARNING
/**
@@ -156,7 +158,7 @@ private class DeprecatedAnnotationCommonizer : Commonizer<CirAnnotation, CirAnno
private fun buildAnnotationType(classId: CirEntityId) = CirTypeFactory.createClassType(
classId = classId,
outerType = null,
visibility = DescriptorVisibilities.PUBLIC,
visibility = Visibilities.Public,
arguments = emptyList(),
isMarkedNullable = false
)
@@ -5,12 +5,12 @@
package org.jetbrains.kotlin.descriptors.commonizer.core
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirHasVisibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirPropertySetter
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirPropertySetterFactory
class PropertySetterCommonizer : AbstractNullableCommonizer<CirPropertySetter, CirPropertySetter, CirHasVisibility, DescriptorVisibility>(
class PropertySetterCommonizer : AbstractNullableCommonizer<CirPropertySetter, CirPropertySetter, CirHasVisibility, Visibility>(
wrappedCommonizerFactory = { VisibilityCommonizer.equalizing() },
extractor = { it },
builder = CirPropertySetterFactory::createDefaultNoAnnotations
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.descriptors.commonizer.core
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.*
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirTypeFactory
import org.jetbrains.kotlin.descriptors.commonizer.core.CommonizedTypeAliasAnswer.Companion.FAILURE_MISSING_IN_SOME_TARGET
@@ -39,7 +39,7 @@ class TypeCommonizer(private val classifiers: CirKnownClassifiers) : AbstractSta
private class ClassTypeCommonizer(private val classifiers: CirKnownClassifiers) : AbstractStandardCommonizer<CirClassType, CirClassType>() {
private lateinit var classId: CirEntityId
private val outerType = OuterClassTypeCommonizer(classifiers)
private lateinit var anyVisibility: DescriptorVisibility
private lateinit var anyVisibility: Visibility
private val arguments = TypeArgumentListCommonizer(classifiers)
private var isMarkedNullable = false
@@ -5,40 +5,40 @@
package org.jetbrains.kotlin.descriptors.commonizer.core
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirFunctionOrProperty
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirHasVisibility
abstract class VisibilityCommonizer : Commonizer<CirHasVisibility, DescriptorVisibility> {
abstract class VisibilityCommonizer : Commonizer<CirHasVisibility, Visibility> {
companion object {
fun lowering(): VisibilityCommonizer = LoweringVisibilityCommonizer()
fun equalizing(): VisibilityCommonizer = EqualizingVisibilityCommonizer()
}
private var temp: DescriptorVisibility? = null
private var temp: Visibility? = null
override val result: DescriptorVisibility
get() = checkState(temp, temp == DescriptorVisibilities.UNKNOWN)
override val result: Visibility
get() = checkState(temp, temp == Visibilities.Unknown)
override fun commonizeWith(next: CirHasVisibility): Boolean {
if (temp == DescriptorVisibilities.UNKNOWN)
if (temp == Visibilities.Unknown)
return false
val nextVisibility = next.visibility
if (DescriptorVisibilities.isPrivate(nextVisibility) || !canBeCommonized(next)) {
temp = DescriptorVisibilities.UNKNOWN
if (Visibilities.isPrivate(nextVisibility) || !canBeCommonized(next)) {
temp = Visibilities.Unknown
return false
}
temp = temp?.let { temp -> getNext(temp, nextVisibility) } ?: nextVisibility
return temp != DescriptorVisibilities.UNKNOWN
return temp != Visibilities.Unknown
}
protected abstract fun canBeCommonized(next: CirHasVisibility): Boolean
protected abstract fun getNext(current: DescriptorVisibility, next: DescriptorVisibility): DescriptorVisibility
protected abstract fun getNext(current: Visibility, next: Visibility): Visibility
}
/**
@@ -56,26 +56,26 @@ private class LoweringVisibilityCommonizer : VisibilityCommonizer() {
return !atLeastOneVirtualCallableMet || !atLeastTwoVisibilitiesMet
}
override fun getNext(current: DescriptorVisibility, next: DescriptorVisibility): DescriptorVisibility {
val comparisonResult: Int = DescriptorVisibilities.compare(current, next)
?: return DescriptorVisibilities.UNKNOWN // two visibilities that can't be compared against each one, ex: protected vs internal
override fun getNext(current: Visibility, next: Visibility): Visibility {
val comparisonResult: Int = Visibilities.compare(current, next)
?: return Visibilities.Unknown // two visibilities that can't be compared against each one, ex: protected vs internal
if (!atLeastTwoVisibilitiesMet)
atLeastTwoVisibilitiesMet = comparisonResult != 0
if (atLeastOneVirtualCallableMet && atLeastTwoVisibilitiesMet)
return DescriptorVisibilities.UNKNOWN
return Visibilities.Unknown
return if (comparisonResult <= 0) current else next
}
}
/**
* Make sure that visibilities of all member descriptors are equal and are not private according to [DescriptorVisibilities.isPrivate].
* Make sure that visibilities of all member descriptors are equal and are not private according to [Visibilities.isPrivate].
*/
private class EqualizingVisibilityCommonizer : VisibilityCommonizer() {
override fun canBeCommonized(next: CirHasVisibility) = true
override fun getNext(current: DescriptorVisibility, next: DescriptorVisibility) =
if (DescriptorVisibilities.compare(current, next) == 0) current else DescriptorVisibilities.UNKNOWN
override fun getNext(current: Visibility, next: Visibility) =
if (Visibilities.compare(current, next) == 0) current else Visibilities.Unknown
}
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree
import gnu.trove.THashMap
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirEntityId
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirName
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirPackageName
@@ -39,7 +39,7 @@ object CirFictitiousFunctionClassifiers : CirProvidedClassifiers {
}
val classId = CirEntityId.create(PACKAGE_NAME, CirName.create("$prefix$arity"))
val clazz = CirProvided.Class(typeParameters, DescriptorVisibilities.PUBLIC)
val clazz = CirProvided.Class(typeParameters, Visibilities.Public)
consumer(classId, clazz)
}
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirEntityId
import org.jetbrains.kotlin.types.Variance
@@ -61,7 +61,7 @@ object CirProvided {
data class Class(
override val typeParameters: List<TypeParameter>,
val visibility: DescriptorVisibility
val visibility: Visibility
) : Classifier
data class TypeAlias(
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.descriptors.commonizer.mergedtree
import com.intellij.util.containers.FactoryMap
import gnu.trove.THashMap
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirEntityId
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirName
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.library.metadata.parsePackageFragment
import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.deserialization.*
import org.jetbrains.kotlin.serialization.deserialization.ProtoEnumFlags
import org.jetbrains.kotlin.serialization.deserialization.descriptorVisibility
import org.jetbrains.kotlin.types.Variance
internal class CirProvidedClassifiersByModules private constructor(
@@ -63,7 +62,7 @@ internal class CirProvidedClassifiersByModules private constructor(
return CirProvidedClassifiersByModules(hasForwardDeclarations, classifiers)
}
private val FALLBACK_FORWARD_DECLARATION_CLASS = CirProvided.Class(emptyList(), DescriptorVisibilities.PUBLIC)
private val FALLBACK_FORWARD_DECLARATION_CLASS = CirProvided.Class(emptyList(), Visibilities.Public)
}
}
@@ -137,7 +136,7 @@ private fun readClass(
typeParameterProtos = classProto.typeParameterList,
typeParameterIndexOffset = typeParameterIndexOffset
)
val visibility = ProtoEnumFlags.descriptorVisibility(Flags.VISIBILITY.get(classProto.flags))
val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(classProto.flags))
val clazz = CirProvided.Class(typeParameters, visibility)
consumer(classId, clazz)
@@ -99,12 +99,12 @@ internal fun CirTypeAlias.typeAliasFlags(): Flags =
)
@Suppress("NOTHING_TO_INLINE")
internal inline fun decodeVisibility(flags: Flags): DescriptorVisibility =
internal inline fun decodeVisibility(flags: Flags): Visibility =
when {
Flag.Common.IS_PUBLIC(flags) -> DescriptorVisibilities.PUBLIC
Flag.Common.IS_PROTECTED(flags) -> DescriptorVisibilities.PROTECTED
Flag.Common.IS_INTERNAL(flags) -> DescriptorVisibilities.INTERNAL
Flag.Common.IS_PRIVATE(flags) -> DescriptorVisibilities.PRIVATE
Flag.Common.IS_PUBLIC(flags) -> Visibilities.Public
Flag.Common.IS_PROTECTED(flags) -> Visibilities.Protected
Flag.Common.IS_INTERNAL(flags) -> Visibilities.Internal
Flag.Common.IS_PRIVATE(flags) -> Visibilities.Private
else -> error("Can't decode visibility from flags: $flags")
}
@@ -156,10 +156,10 @@ private inline val CirProperty.hasAnnotationsFlag: Flag?
private inline val CirHasVisibility.visibilityFlag: Flag
get() = when (visibility) {
DescriptorVisibilities.PUBLIC -> Flag.Common.IS_PUBLIC
DescriptorVisibilities.PROTECTED -> Flag.Common.IS_PROTECTED
DescriptorVisibilities.INTERNAL -> Flag.Common.IS_INTERNAL
DescriptorVisibilities.PRIVATE -> Flag.Common.IS_PRIVATE
Visibilities.Public -> Flag.Common.IS_PUBLIC
Visibilities.Protected -> Flag.Common.IS_PROTECTED
Visibilities.Internal -> Flag.Common.IS_INTERNAL
Visibilities.Private -> Flag.Common.IS_PRIVATE
else -> error("Unexpected visibility: $this")
}
@@ -5,64 +5,68 @@
package org.jetbrains.kotlin.descriptors.commonizer.core
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities.*
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibilities.Internal
import org.jetbrains.kotlin.descriptors.Visibilities.Local
import org.jetbrains.kotlin.descriptors.Visibilities.Private
import org.jetbrains.kotlin.descriptors.Visibilities.Protected
import org.jetbrains.kotlin.descriptors.Visibilities.Public
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirHasVisibility
import org.junit.Test
class EqualizingVisibilityCommonizerTest : AbstractCommonizerTest<CirHasVisibility, DescriptorVisibility>() {
class EqualizingVisibilityCommonizerTest : AbstractCommonizerTest<CirHasVisibility, Visibility>() {
@Test
fun publicOnly() = doTestSuccess(
expected = PUBLIC,
PUBLIC.toMock(), PUBLIC.toMock(), PUBLIC.toMock()
expected = Public,
Public.toMock(), Public.toMock(), Public.toMock()
)
@Test
fun protectedOnly() = doTestSuccess(
expected = PROTECTED,
PROTECTED.toMock(), PROTECTED.toMock(), PROTECTED.toMock()
expected = Protected,
Protected.toMock(), Protected.toMock(), Protected.toMock()
)
@Test
fun internalOnly() = doTestSuccess(
expected = INTERNAL,
INTERNAL.toMock(), INTERNAL.toMock(), INTERNAL.toMock()
expected = Internal,
Internal.toMock(), Internal.toMock(), Internal.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun privateOnly() = doTestFailure(
PRIVATE.toMock()
Private.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun publicAndProtected() = doTestFailure(
PROTECTED.toMock(), PROTECTED.toMock(), PUBLIC.toMock()
Protected.toMock(), Protected.toMock(), Public.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun publicAndInternal() = doTestFailure(
INTERNAL.toMock(), INTERNAL.toMock(), PUBLIC.toMock()
Internal.toMock(), Internal.toMock(), Public.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun protectedAndInternal() = doTestFailure(
PROTECTED.toMock(), PROTECTED.toMock(), INTERNAL.toMock()
Protected.toMock(), Protected.toMock(), Internal.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun publicAndPrivate() = doTestFailure(
PUBLIC.toMock(), PUBLIC.toMock(), PRIVATE.toMock()
Public.toMock(), Public.toMock(), Private.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun somethingUnexpected() = doTestFailure(
PUBLIC.toMock(), LOCAL.toMock()
Public.toMock(), Local.toMock()
)
override fun createCommonizer() = VisibilityCommonizer.equalizing()
}
private fun DescriptorVisibility.toMock() = object : CirHasVisibility {
override val visibility: DescriptorVisibility = this@toMock
private fun Visibility.toMock() = object : CirHasVisibility {
override val visibility: Visibility = this@toMock
}
@@ -7,8 +7,12 @@ package org.jetbrains.kotlin.descriptors.commonizer.core
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities.*
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibilities.Internal
import org.jetbrains.kotlin.descriptors.Visibilities.Local
import org.jetbrains.kotlin.descriptors.Visibilities.Private
import org.jetbrains.kotlin.descriptors.Visibilities.Protected
import org.jetbrains.kotlin.descriptors.Visibilities.Public
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirContainingClass
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirFunctionOrProperty
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirHasVisibility
@@ -17,34 +21,34 @@ import org.junit.Test
abstract class LoweringVisibilityCommonizerTest(
private val areMembersVirtual: Boolean
) : AbstractCommonizerTest<CirHasVisibility, DescriptorVisibility>() {
) : AbstractCommonizerTest<CirHasVisibility, Visibility>() {
@Test
fun publicOnly() = doTestSuccess(
expected = PUBLIC,
PUBLIC.toMock(), PUBLIC.toMock(), PUBLIC.toMock()
expected = Public,
Public.toMock(), Public.toMock(), Public.toMock()
)
@Test
fun protectedOnly() = doTestSuccess(
expected = PROTECTED,
PROTECTED.toMock(), PROTECTED.toMock(), PROTECTED.toMock()
expected = Protected,
Protected.toMock(), Protected.toMock(), Protected.toMock()
)
@Test
fun internalOnly() = doTestSuccess(
expected = INTERNAL,
INTERNAL.toMock(), INTERNAL.toMock(), INTERNAL.toMock()
expected = Internal,
Internal.toMock(), Internal.toMock(), Internal.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun somethingUnexpected() = doTestFailure(
PUBLIC.toMock(), LOCAL.toMock()
Public.toMock(), Local.toMock()
)
final override fun createCommonizer() = VisibilityCommonizer.lowering()
protected fun DescriptorVisibility.toMock() = object : CirFunctionOrProperty {
protected fun Visibility.toMock() = object : CirFunctionOrProperty {
override val annotations get() = unsupported()
override val name get() = unsupported()
override val typeParameters get() = unsupported()
@@ -65,29 +69,29 @@ abstract class LoweringVisibilityCommonizerTest(
@Test
fun publicAndProtected() = doTestSuccess(
expected = PROTECTED,
PUBLIC.toMock(), PROTECTED.toMock(), PUBLIC.toMock()
expected = Protected,
Public.toMock(), Protected.toMock(), Public.toMock()
)
@Test
fun publicAndInternal() = doTestSuccess(
expected = INTERNAL,
PUBLIC.toMock(), INTERNAL.toMock(), PUBLIC.toMock()
expected = Internal,
Public.toMock(), Internal.toMock(), Public.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun publicAndInternalAndProtected() = doTestFailure(
PUBLIC.toMock(), INTERNAL.toMock(), PROTECTED.toMock()
Public.toMock(), Internal.toMock(), Protected.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun publicAndInternalAndPrivate() = doTestFailure(
PUBLIC.toMock(), INTERNAL.toMock(), PRIVATE.toMock()
Public.toMock(), Internal.toMock(), Private.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun privateOnly() = doTestFailure(
PRIVATE.toMock()
Private.toMock()
)
}
@@ -95,42 +99,42 @@ abstract class LoweringVisibilityCommonizerTest(
@Test(expected = IllegalCommonizerStateException::class)
fun publicAndProtected1() = doTestFailure(
PUBLIC.toMock(), PROTECTED.toMock()
Public.toMock(), Protected.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun publicAndProtected2() = doTestFailure(
PUBLIC.toMock(), PUBLIC.toMock(), PROTECTED.toMock()
Public.toMock(), Public.toMock(), Protected.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun publicAndInternal1() = doTestFailure(
PUBLIC.toMock(), INTERNAL.toMock()
Public.toMock(), Internal.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun publicAndInternal2() = doTestFailure(
PUBLIC.toMock(), PUBLIC.toMock(), INTERNAL.toMock()
Public.toMock(), Public.toMock(), Internal.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun protectedAndInternal1() = doTestFailure(
PROTECTED.toMock(), INTERNAL.toMock()
Protected.toMock(), Internal.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun protectedAndInternal2() = doTestFailure(
PROTECTED.toMock(), PROTECTED.toMock(), INTERNAL.toMock()
Protected.toMock(), Protected.toMock(), Internal.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun publicAndPrivate() = doTestFailure(
PUBLIC.toMock(), PRIVATE.toMock()
Public.toMock(), Private.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun privateOnly() = doTestFailure(
PRIVATE.toMock()
Private.toMock()
)
}
}
@@ -5,8 +5,12 @@
package org.jetbrains.kotlin.descriptors.commonizer.core
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities.*
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Visibilities.Internal
import org.jetbrains.kotlin.descriptors.Visibilities.Local
import org.jetbrains.kotlin.descriptors.Visibilities.Private
import org.jetbrains.kotlin.descriptors.Visibilities.Protected
import org.jetbrains.kotlin.descriptors.Visibilities.Public
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirPropertySetter
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirPropertySetterFactory
import org.junit.Test
@@ -21,79 +25,79 @@ class PropertySetterCommonizerTest : AbstractCommonizerTest<CirPropertySetter?,
@Test(expected = IllegalCommonizerStateException::class)
fun missingAndPublic() = doTestFailure(
null, null, null, PUBLIC
null, null, null, Public
)
@Test(expected = IllegalCommonizerStateException::class)
fun publicAndMissing() = doTestFailure(
PUBLIC, PUBLIC, PUBLIC, null
Public, Public, Public, null
)
@Test(expected = IllegalCommonizerStateException::class)
fun protectedAndMissing() = doTestFailure(
PROTECTED, PROTECTED, null
Protected, Protected, null
)
@Test(expected = IllegalCommonizerStateException::class)
fun missingAndInternal() = doTestFailure(
null, null, INTERNAL
null, null, Internal
)
@Test
fun publicOnly() = doTestSuccess(
expected = PUBLIC,
PUBLIC, PUBLIC, PUBLIC
expected = Public,
Public, Public, Public
)
@Test
fun protectedOnly() = doTestSuccess(
expected = PROTECTED,
PROTECTED, PROTECTED, PROTECTED
expected = Protected,
Protected, Protected, Protected
)
@Test
fun internalOnly() = doTestSuccess(
expected = INTERNAL,
INTERNAL, INTERNAL, INTERNAL
expected = Internal,
Internal, Internal, Internal
)
@Test(expected = IllegalCommonizerStateException::class)
fun privateOnly() = doTestFailure(
PRIVATE
Private
)
@Test(expected = IllegalCommonizerStateException::class)
fun publicAndProtected() = doTestFailure(
PUBLIC, PUBLIC, PROTECTED
Public, Public, Protected
)
@Test(expected = IllegalCommonizerStateException::class)
fun publicAndInternal() = doTestFailure(
PUBLIC, PUBLIC, INTERNAL
Public, Public, Internal
)
@Test(expected = IllegalCommonizerStateException::class)
fun protectedAndInternal() = doTestFailure(
PROTECTED, PROTECTED, INTERNAL
Protected, Protected, Internal
)
@Test(expected = IllegalCommonizerStateException::class)
fun publicAndPrivate() = doTestFailure(
PUBLIC, PUBLIC, PRIVATE
Public, Public, Private
)
@Test(expected = IllegalCommonizerStateException::class)
fun somethingUnexpected() = doTestFailure(
PUBLIC, LOCAL
Public, Local
)
private fun doTestSuccess(expected: DescriptorVisibility?, vararg variants: DescriptorVisibility?) =
private fun doTestSuccess(expected: Visibility?, vararg variants: Visibility?) =
super.doTestSuccess(
expected = expected?.let { CirPropertySetterFactory.createDefaultNoAnnotations(expected) },
*variants.map { it?.let(CirPropertySetterFactory::createDefaultNoAnnotations) }.toTypedArray()
)
private fun doTestFailure(vararg variants: DescriptorVisibility?) =
private fun doTestFailure(vararg variants: Visibility?) =
super.doTestFailure(
*variants.map { it?.let(CirPropertySetterFactory::createDefaultNoAnnotations) }.toTypedArray(),
shouldFailOnFirstVariant = false
@@ -5,7 +5,9 @@
package org.jetbrains.kotlin.descriptors.commonizer.core
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.commonizer.cir.*
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirClassFactory
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirTypeAliasFactory
@@ -478,7 +480,7 @@ class TypeCommonizerTest : AbstractCommonizerTest<CirType, CirType>() {
annotations = emptyList(),
name = type.classifierId.relativeNameSegments.last(),
typeParameters = emptyList(),
visibility = DescriptorVisibilities.PUBLIC,
visibility = Visibilities.Public,
modality = Modality.FINAL,
kind = ClassKind.CLASS,
companion = null,
@@ -502,7 +504,7 @@ class TypeCommonizerTest : AbstractCommonizerTest<CirType, CirType>() {
annotations = emptyList(),
name = type.classifierId.relativeNameSegments.last(),
typeParameters = emptyList(),
visibility = DescriptorVisibilities.PUBLIC,
visibility = Visibilities.Public,
underlyingType = type.underlyingType,
expandedType = computeExpandedType(type.underlyingType)
)
@@ -41,7 +41,7 @@ internal fun mockClassType(
): CirClassType = CirTypeFactory.createClassType(
classId = createValidClassifierId(classId),
outerType = null,
visibility = DescriptorVisibilities.PUBLIC,
visibility = Visibilities.Public,
arguments = emptyList(),
isMarkedNullable = nullable
)
@@ -60,7 +60,7 @@ internal val MOCK_CLASSIFIERS = CirKnownClassifiers(
annotations = emptyList(),
name = CirName.create("Any"),
typeParameters = emptyList(),
visibility = DescriptorVisibilities.PUBLIC,
visibility = Visibilities.Public,
modality = Modality.OPEN,
kind = ClassKind.CLASS,
companion = null,