Move ProtoEnumFlags to :core:metadata

This commit is contained in:
Dmitriy Novozhilov
2020-09-02 11:59:24 +03:00
parent e39ce91253
commit 8d2e89a9ea
14 changed files with 209 additions and 208 deletions
@@ -34,7 +34,7 @@ class MemberDeserializer(private val c: DeserializationContext) {
c.containingDeclaration, null,
getAnnotations(proto, flags, AnnotatedCallableKind.PROPERTY),
ProtoEnumFlags.modality(Flags.MODALITY.get(flags)),
ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)),
ProtoEnumFlags.descriptorVisibility(Flags.VISIBILITY.get(flags)),
Flags.IS_VAR.get(flags),
c.nameResolver.getName(proto.name),
ProtoEnumFlags.memberKind(Flags.MEMBER_KIND.get(flags)),
@@ -87,7 +87,7 @@ class MemberDeserializer(private val c: DeserializationContext) {
property,
annotations,
ProtoEnumFlags.modality(Flags.MODALITY.get(getterFlags)),
ProtoEnumFlags.visibility(Flags.VISIBILITY.get(getterFlags)),
ProtoEnumFlags.descriptorVisibility(Flags.VISIBILITY.get(getterFlags)),
/* isDefault = */ !isNotDefault,
/* isExternal = */ isExternal,
isInline,
@@ -113,7 +113,7 @@ class MemberDeserializer(private val c: DeserializationContext) {
property,
annotations,
ProtoEnumFlags.modality(Flags.MODALITY.get(setterFlags)),
ProtoEnumFlags.visibility(Flags.VISIBILITY.get(setterFlags)),
ProtoEnumFlags.descriptorVisibility(Flags.VISIBILITY.get(setterFlags)),
/* isDefault = */ !isNotDefault,
/* isExternal = */ isExternal,
isInline,
@@ -284,7 +284,7 @@ class MemberDeserializer(private val c: DeserializationContext) {
local.memberDeserializer.valueParameters(proto.valueParameterList, proto, AnnotatedCallableKind.FUNCTION),
local.typeDeserializer.type(proto.returnType(c.typeTable)),
ProtoEnumFlags.modality(Flags.MODALITY.get(flags)),
ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)),
ProtoEnumFlags.descriptorVisibility(Flags.VISIBILITY.get(flags)),
emptyMap<CallableDescriptor.UserDataKey<*>, Any?>(),
Flags.IS_SUSPEND.get(flags)
)
@@ -311,7 +311,7 @@ class MemberDeserializer(private val c: DeserializationContext) {
proto.annotationList.map { annotationDeserializer.deserializeAnnotation(it, c.nameResolver) }
)
val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(proto.flags))
val visibility = ProtoEnumFlags.descriptorVisibility(Flags.VISIBILITY.get(proto.flags))
val typeAlias = DeserializedTypeAliasDescriptor(
c.storageManager, c.containingDeclaration, annotations, c.nameResolver.getName(proto.name),
visibility, proto, c.nameResolver, c.typeTable, c.versionRequirementTable, c.containerSource
@@ -343,7 +343,7 @@ class MemberDeserializer(private val c: DeserializationContext) {
val local = c.childContext(descriptor, listOf())
descriptor.initialize(
local.memberDeserializer.valueParameters(proto.valueParameterList, proto, AnnotatedCallableKind.FUNCTION),
ProtoEnumFlags.visibility(Flags.VISIBILITY.get(proto.flags))
ProtoEnumFlags.descriptorVisibility(Flags.VISIBILITY.get(proto.flags))
)
descriptor.returnType = classDescriptor.defaultType
@@ -1,117 +0,0 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.serialization.deserialization
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.ProtoBuf.TypeParameter
import org.jetbrains.kotlin.types.Variance
object ProtoEnumFlags {
fun memberKind(memberKind: ProtoBuf.MemberKind?) = when (memberKind) {
ProtoBuf.MemberKind.DECLARATION -> CallableMemberDescriptor.Kind.DECLARATION
ProtoBuf.MemberKind.FAKE_OVERRIDE -> CallableMemberDescriptor.Kind.FAKE_OVERRIDE
ProtoBuf.MemberKind.DELEGATION -> CallableMemberDescriptor.Kind.DELEGATION
ProtoBuf.MemberKind.SYNTHESIZED -> CallableMemberDescriptor.Kind.SYNTHESIZED
else -> CallableMemberDescriptor.Kind.DECLARATION
}
fun memberKind(kind: CallableMemberDescriptor.Kind): ProtoBuf.MemberKind = when (kind) {
CallableMemberDescriptor.Kind.DECLARATION -> ProtoBuf.MemberKind.DECLARATION
CallableMemberDescriptor.Kind.FAKE_OVERRIDE -> ProtoBuf.MemberKind.FAKE_OVERRIDE
CallableMemberDescriptor.Kind.DELEGATION -> ProtoBuf.MemberKind.DELEGATION
CallableMemberDescriptor.Kind.SYNTHESIZED -> ProtoBuf.MemberKind.SYNTHESIZED
}
fun modality(modality: ProtoBuf.Modality?) = when (modality) {
ProtoBuf.Modality.FINAL -> Modality.FINAL
ProtoBuf.Modality.OPEN -> Modality.OPEN
ProtoBuf.Modality.ABSTRACT -> Modality.ABSTRACT
ProtoBuf.Modality.SEALED -> Modality.SEALED
else -> Modality.FINAL
}
fun modality(modality: Modality): ProtoBuf.Modality = when (modality) {
Modality.FINAL -> ProtoBuf.Modality.FINAL
Modality.OPEN -> ProtoBuf.Modality.OPEN
Modality.ABSTRACT -> ProtoBuf.Modality.ABSTRACT
Modality.SEALED -> ProtoBuf.Modality.SEALED
}
fun visibility(visibility: ProtoBuf.Visibility?) = when (visibility) {
ProtoBuf.Visibility.INTERNAL -> DescriptorVisibilities.INTERNAL
ProtoBuf.Visibility.PRIVATE -> DescriptorVisibilities.PRIVATE
ProtoBuf.Visibility.PRIVATE_TO_THIS -> DescriptorVisibilities.PRIVATE_TO_THIS
ProtoBuf.Visibility.PROTECTED -> DescriptorVisibilities.PROTECTED
ProtoBuf.Visibility.PUBLIC -> DescriptorVisibilities.PUBLIC
ProtoBuf.Visibility.LOCAL -> DescriptorVisibilities.LOCAL
else -> DescriptorVisibilities.PRIVATE
}
fun visibility(visibility: DescriptorVisibility): ProtoBuf.Visibility = when (visibility) {
DescriptorVisibilities.INTERNAL -> ProtoBuf.Visibility.INTERNAL
DescriptorVisibilities.PUBLIC -> ProtoBuf.Visibility.PUBLIC
DescriptorVisibilities.PRIVATE -> ProtoBuf.Visibility.PRIVATE
DescriptorVisibilities.PRIVATE_TO_THIS -> ProtoBuf.Visibility.PRIVATE_TO_THIS
DescriptorVisibilities.PROTECTED -> ProtoBuf.Visibility.PROTECTED
DescriptorVisibilities.LOCAL -> ProtoBuf.Visibility.LOCAL
else -> throw IllegalArgumentException("Unknown visibility: $visibility")
}
fun classKind(kind: ProtoBuf.Class.Kind?): ClassKind = when (kind) {
ProtoBuf.Class.Kind.CLASS -> ClassKind.CLASS
ProtoBuf.Class.Kind.INTERFACE -> ClassKind.INTERFACE
ProtoBuf.Class.Kind.ENUM_CLASS -> ClassKind.ENUM_CLASS
ProtoBuf.Class.Kind.ENUM_ENTRY -> ClassKind.ENUM_ENTRY
ProtoBuf.Class.Kind.ANNOTATION_CLASS -> ClassKind.ANNOTATION_CLASS
ProtoBuf.Class.Kind.OBJECT, ProtoBuf.Class.Kind.COMPANION_OBJECT -> ClassKind.OBJECT
else -> ClassKind.CLASS
}
fun classKind(kind: ClassKind, isCompanionObject: Boolean): ProtoBuf.Class.Kind {
if (isCompanionObject) return ProtoBuf.Class.Kind.COMPANION_OBJECT
return when (kind) {
ClassKind.CLASS -> ProtoBuf.Class.Kind.CLASS
ClassKind.INTERFACE -> ProtoBuf.Class.Kind.INTERFACE
ClassKind.ENUM_CLASS -> ProtoBuf.Class.Kind.ENUM_CLASS
ClassKind.ENUM_ENTRY -> ProtoBuf.Class.Kind.ENUM_ENTRY
ClassKind.ANNOTATION_CLASS -> ProtoBuf.Class.Kind.ANNOTATION_CLASS
ClassKind.OBJECT -> ProtoBuf.Class.Kind.OBJECT
}
}
fun variance(variance: TypeParameter.Variance) = when (variance) {
ProtoBuf.TypeParameter.Variance.IN -> Variance.IN_VARIANCE
ProtoBuf.TypeParameter.Variance.OUT -> Variance.OUT_VARIANCE
ProtoBuf.TypeParameter.Variance.INV -> Variance.INVARIANT
}
fun variance(projection: ProtoBuf.Type.Argument.Projection) = when (projection) {
ProtoBuf.Type.Argument.Projection.IN -> Variance.IN_VARIANCE
ProtoBuf.Type.Argument.Projection.OUT -> Variance.OUT_VARIANCE
ProtoBuf.Type.Argument.Projection.INV -> Variance.INVARIANT
ProtoBuf.Type.Argument.Projection.STAR ->
throw IllegalArgumentException("Only IN, OUT and INV are supported. Actual argument: $projection")
}
fun variance(variance: Variance) = when (variance) {
Variance.IN_VARIANCE -> TypeParameter.Variance.IN
Variance.OUT_VARIANCE -> TypeParameter.Variance.OUT
Variance.INVARIANT -> TypeParameter.Variance.INV
}
}
@@ -0,0 +1,50 @@
/*
* Copyright 2010-2020 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.serialization.deserialization
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.metadata.ProtoBuf
@Suppress("unused")
fun ProtoEnumFlags.memberKind(memberKind: ProtoBuf.MemberKind?): CallableMemberDescriptor.Kind = when (memberKind) {
ProtoBuf.MemberKind.DECLARATION -> CallableMemberDescriptor.Kind.DECLARATION
ProtoBuf.MemberKind.FAKE_OVERRIDE -> CallableMemberDescriptor.Kind.FAKE_OVERRIDE
ProtoBuf.MemberKind.DELEGATION -> CallableMemberDescriptor.Kind.DELEGATION
ProtoBuf.MemberKind.SYNTHESIZED -> CallableMemberDescriptor.Kind.SYNTHESIZED
else -> CallableMemberDescriptor.Kind.DECLARATION
}
@Suppress("unused")
fun ProtoEnumFlags.memberKind(kind: CallableMemberDescriptor.Kind): ProtoBuf.MemberKind = when (kind) {
CallableMemberDescriptor.Kind.DECLARATION -> ProtoBuf.MemberKind.DECLARATION
CallableMemberDescriptor.Kind.FAKE_OVERRIDE -> ProtoBuf.MemberKind.FAKE_OVERRIDE
CallableMemberDescriptor.Kind.DELEGATION -> ProtoBuf.MemberKind.DELEGATION
CallableMemberDescriptor.Kind.SYNTHESIZED -> ProtoBuf.MemberKind.SYNTHESIZED
}
@Suppress("unused")
fun ProtoEnumFlags.descriptorVisibility(visibility: ProtoBuf.Visibility?): DescriptorVisibility = when (visibility) {
ProtoBuf.Visibility.INTERNAL -> DescriptorVisibilities.INTERNAL
ProtoBuf.Visibility.PRIVATE -> DescriptorVisibilities.PRIVATE
ProtoBuf.Visibility.PRIVATE_TO_THIS -> DescriptorVisibilities.PRIVATE_TO_THIS
ProtoBuf.Visibility.PROTECTED -> DescriptorVisibilities.PROTECTED
ProtoBuf.Visibility.PUBLIC -> DescriptorVisibilities.PUBLIC
ProtoBuf.Visibility.LOCAL -> DescriptorVisibilities.LOCAL
else -> DescriptorVisibilities.PRIVATE
}
@Suppress("unused")
fun ProtoEnumFlags.descriptorVisibility(visibility: DescriptorVisibility): ProtoBuf.Visibility = when (visibility) {
DescriptorVisibilities.INTERNAL -> ProtoBuf.Visibility.INTERNAL
DescriptorVisibilities.PUBLIC -> ProtoBuf.Visibility.PUBLIC
DescriptorVisibilities.PRIVATE -> ProtoBuf.Visibility.PRIVATE
DescriptorVisibilities.PRIVATE_TO_THIS -> ProtoBuf.Visibility.PRIVATE_TO_THIS
DescriptorVisibilities.PROTECTED -> ProtoBuf.Visibility.PROTECTED
DescriptorVisibilities.LOCAL -> ProtoBuf.Visibility.LOCAL
else -> throw IllegalArgumentException("Unknown visibility: $visibility")
}
@@ -46,7 +46,7 @@ class DeserializedClassDescriptor(
private val classId = nameResolver.getClassId(classProto.fqName)
private val modality = ProtoEnumFlags.modality(Flags.MODALITY.get(classProto.flags))
private val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(classProto.flags))
private val visibility = ProtoEnumFlags.descriptorVisibility(Flags.VISIBILITY.get(classProto.flags))
private val kind = ProtoEnumFlags.classKind(Flags.CLASS_KIND.get(classProto.flags))
val c = outerContext.childContext(
+1 -2
View File
@@ -1,5 +1,3 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm")
id("jps-compatible")
@@ -11,6 +9,7 @@ javaHome = rootProject.extra["JDK_16"] as String
dependencies {
compile(protobufLite())
compile(kotlinStdlib())
api(project(":core:compiler.common"))
}
sourceSets {
@@ -0,0 +1,91 @@
/*
* Copyright 2010-2020 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.serialization.deserialization
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.ProtoBuf.TypeParameter
import org.jetbrains.kotlin.types.Variance
object ProtoEnumFlags {
fun modality(modality: ProtoBuf.Modality?): Modality = when (modality) {
ProtoBuf.Modality.FINAL -> Modality.FINAL
ProtoBuf.Modality.OPEN -> Modality.OPEN
ProtoBuf.Modality.ABSTRACT -> Modality.ABSTRACT
ProtoBuf.Modality.SEALED -> Modality.SEALED
else -> Modality.FINAL
}
fun modality(modality: Modality): ProtoBuf.Modality = when (modality) {
Modality.FINAL -> ProtoBuf.Modality.FINAL
Modality.OPEN -> ProtoBuf.Modality.OPEN
Modality.ABSTRACT -> ProtoBuf.Modality.ABSTRACT
Modality.SEALED -> ProtoBuf.Modality.SEALED
}
fun visibility(visibility: ProtoBuf.Visibility?): Visibility = when (visibility) {
ProtoBuf.Visibility.INTERNAL -> Visibilities.Internal
ProtoBuf.Visibility.PRIVATE -> Visibilities.Private
ProtoBuf.Visibility.PRIVATE_TO_THIS -> Visibilities.PrivateToThis
ProtoBuf.Visibility.PROTECTED -> Visibilities.Protected
ProtoBuf.Visibility.PUBLIC -> Visibilities.Public
ProtoBuf.Visibility.LOCAL -> Visibilities.Local
else -> Visibilities.Private
}
fun visibility(visibility: Visibility): ProtoBuf.Visibility = when (visibility) {
Visibilities.Internal -> ProtoBuf.Visibility.INTERNAL
Visibilities.Public -> ProtoBuf.Visibility.PUBLIC
Visibilities.Private -> ProtoBuf.Visibility.PRIVATE
Visibilities.PrivateToThis -> ProtoBuf.Visibility.PRIVATE_TO_THIS
Visibilities.Protected -> ProtoBuf.Visibility.PROTECTED
Visibilities.Local -> ProtoBuf.Visibility.LOCAL
else -> throw IllegalArgumentException("Unknown visibility: $visibility")
}
fun classKind(kind: ProtoBuf.Class.Kind?): ClassKind = when (kind) {
ProtoBuf.Class.Kind.CLASS -> ClassKind.CLASS
ProtoBuf.Class.Kind.INTERFACE -> ClassKind.INTERFACE
ProtoBuf.Class.Kind.ENUM_CLASS -> ClassKind.ENUM_CLASS
ProtoBuf.Class.Kind.ENUM_ENTRY -> ClassKind.ENUM_ENTRY
ProtoBuf.Class.Kind.ANNOTATION_CLASS -> ClassKind.ANNOTATION_CLASS
ProtoBuf.Class.Kind.OBJECT, ProtoBuf.Class.Kind.COMPANION_OBJECT -> ClassKind.OBJECT
else -> ClassKind.CLASS
}
fun classKind(kind: ClassKind, isCompanionObject: Boolean): ProtoBuf.Class.Kind {
if (isCompanionObject) return ProtoBuf.Class.Kind.COMPANION_OBJECT
return when (kind) {
ClassKind.CLASS -> ProtoBuf.Class.Kind.CLASS
ClassKind.INTERFACE -> ProtoBuf.Class.Kind.INTERFACE
ClassKind.ENUM_CLASS -> ProtoBuf.Class.Kind.ENUM_CLASS
ClassKind.ENUM_ENTRY -> ProtoBuf.Class.Kind.ENUM_ENTRY
ClassKind.ANNOTATION_CLASS -> ProtoBuf.Class.Kind.ANNOTATION_CLASS
ClassKind.OBJECT -> ProtoBuf.Class.Kind.OBJECT
}
}
fun variance(variance: TypeParameter.Variance): Variance = when (variance) {
ProtoBuf.TypeParameter.Variance.IN -> Variance.IN_VARIANCE
ProtoBuf.TypeParameter.Variance.OUT -> Variance.OUT_VARIANCE
ProtoBuf.TypeParameter.Variance.INV -> Variance.INVARIANT
}
fun variance(projection: ProtoBuf.Type.Argument.Projection): Variance = when (projection) {
ProtoBuf.Type.Argument.Projection.IN -> Variance.IN_VARIANCE
ProtoBuf.Type.Argument.Projection.OUT -> Variance.OUT_VARIANCE
ProtoBuf.Type.Argument.Projection.INV -> Variance.INVARIANT
ProtoBuf.Type.Argument.Projection.STAR ->
throw IllegalArgumentException("Only IN, OUT and INV are supported. Actual argument: $projection")
}
fun variance(variance: Variance): TypeParameter.Variance = when (variance) {
Variance.IN_VARIANCE -> TypeParameter.Variance.IN
Variance.OUT_VARIANCE -> TypeParameter.Variance.OUT
Variance.INVARIANT -> TypeParameter.Variance.INV
}
}