From 264bd5235beecdd792b31adb76bace12066f73a3 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Wed, 14 Oct 2015 14:44:23 +0300 Subject: [PATCH] Add isData() to ClassDescriptor --- .../kotlin/codegen/MutableClassDescriptor.java | 5 +++++ .../lazy/descriptors/LazyClassDescriptor.java | 14 ++++++++++++++ .../kotlin/serialization/DescriptorSerializer.java | 3 ++- .../lazy/descriptors/LazyJavaClassDescriptor.kt | 3 ++- .../builtins/functions/FunctionClassDescriptor.kt | 3 ++- .../kotlin/descriptors/ClassDescriptor.java | 2 ++ .../descriptors/impl/ClassDescriptorImpl.java | 5 +++++ .../impl/EnumEntrySyntheticClassDescriptor.java | 5 +++++ .../impl/LazySubstitutingClassDescriptor.java | 5 +++++ .../org/jetbrains/kotlin/serialization/Flags.java | 4 +++- .../descriptors/DeserializedClassDescriptor.kt | 3 +++ 11 files changed, 48 insertions(+), 4 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java index 3462e773521..9bf5f18924f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java @@ -100,6 +100,11 @@ public class MutableClassDescriptor extends ClassDescriptorBase implements Class return isInner; } + @Override + public boolean isData() { + return false; + } + @Override public boolean isCompanionObject() { return false; diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java index 55d321869f1..59dd0addacb 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.annotations.Annotations; import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorBase; import org.jetbrains.kotlin.incremental.components.NoLookupLocation; +import org.jetbrains.kotlin.lexer.JetTokens; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.resolve.*; @@ -83,6 +84,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes private final Visibility visibility; private final NotNullLazyValue kind; private final NotNullLazyValue isInner; + private final NotNullLazyValue isData; private final Annotations annotations; private final Annotations danglingAnnotations; @@ -153,6 +155,13 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes } }); + this.isData = storageManager.createLazyValue(new Function0() { + @Override + public Boolean invoke() { + return modifierList != null && modifierList.hasModifier(JetTokens.DATA_KEYWORD); + } + }); + this.kind = storageManager.createLazyValue(new Function0() { @Override public ClassKind invoke() { @@ -405,6 +414,11 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes return isInner.invoke(); } + @Override + public boolean isData() { + return isData.invoke(); + } + @Override public boolean isCompanionObject() { return isCompanionObject; diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java index f193735b914..5e0df5a2f04 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java @@ -125,7 +125,8 @@ public class DescriptorSerializer { ProtoBuf.Class.Builder builder = ProtoBuf.Class.newBuilder(); int flags = Flags.getClassFlags(hasAnnotations(classDescriptor), classDescriptor.getVisibility(), classDescriptor.getModality(), - classDescriptor.getKind(), classDescriptor.isInner(), classDescriptor.isCompanionObject()); + classDescriptor.getKind(), classDescriptor.isInner(), classDescriptor.isCompanionObject(), + classDescriptor.isData()); if (flags != builder.getFlags()) { builder.setFlags(flags); } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt index 0ed050a9eac..3b568f71e91 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt @@ -39,7 +39,7 @@ import org.jetbrains.kotlin.resolve.scopes.JetScope import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.toReadOnlyList -import java.util.ArrayList +import java.util.* class LazyJavaClassDescriptor( private val outerC: LazyJavaResolverContext, @@ -73,6 +73,7 @@ class LazyJavaClassDescriptor( override fun getModality() = modality override fun getVisibility() = visibility override fun isInner() = isInner + override fun isData() = false private val typeConstructor = c.storageManager.createLazyValue { LazyJavaClassTypeConstructor() } override fun getTypeConstructor(): TypeConstructor = typeConstructor() diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt index fb6039b8c3b..98b6902d275 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt @@ -30,7 +30,7 @@ import org.jetbrains.kotlin.resolve.scopes.StaticScopeForKotlinClass import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.utils.toReadOnlyList -import java.util.ArrayList +import java.util.* /** * A [ClassDescriptor] representing the fictitious class for a function type, such as kotlin.Function1 or kotlin.reflect.KFunction2. @@ -82,6 +82,7 @@ public class FunctionClassDescriptor( override fun getVisibility() = Visibilities.PUBLIC override fun isCompanionObject() = false override fun isInner() = false + override fun isData() = false override fun getAnnotations() = Annotations.EMPTY override fun getSource() = SourceElement.NO_SOURCE diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/ClassDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ClassDescriptor.java index a4780e56c3f..e47c536b729 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/ClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ClassDescriptor.java @@ -87,6 +87,8 @@ public interface ClassDescriptor extends ClassifierDescriptor, MemberDescriptor, boolean isCompanionObject(); + boolean isData(); + @NotNull ReceiverParameterDescriptor getThisAsReceiverParameter(); diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorImpl.java index 33288e3adaa..64be2dc03b4 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorImpl.java @@ -133,6 +133,11 @@ public class ClassDescriptorImpl extends ClassDescriptorBase { return Visibilities.PUBLIC; } + @Override + public boolean isData() { + return false; + } + @Override public boolean isInner() { return false; diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java index 836cd323067..98bf3c8025e 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java @@ -144,6 +144,11 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { return false; } + @Override + public boolean isData() { + return false; + } + @Override public boolean isCompanionObject() { return false; diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazySubstitutingClassDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazySubstitutingClassDescriptor.java index a754ce0cb2a..66f5b3eed75 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazySubstitutingClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazySubstitutingClassDescriptor.java @@ -211,6 +211,11 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor { return original.isInner(); } + @Override + public boolean isData() { + return original.isData(); + } + @Override public boolean isCompanionObject() { return original.isCompanionObject(); diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java b/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java index c31d2fb1c8b..de8c654114d 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java @@ -88,13 +88,15 @@ public class Flags { Modality modality, ClassKind kind, boolean inner, - boolean isCompanionObject + boolean isCompanionObject, + boolean isData ) { return HAS_ANNOTATIONS.toFlags(hasAnnotations) | MODALITY.toFlags(modality(modality)) | VISIBILITY.toFlags(visibility(visibility)) | CLASS_KIND.toFlags(classKind(kind, isCompanionObject)) | IS_INNER.toFlags(inner) + | IS_DATA.toFlags(isData) ; } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt index 43e2abbcd56..c9c2c78e750 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt @@ -54,6 +54,7 @@ public class DeserializedClassDescriptor( private val kind = Deserialization.classKind(kindFromProto) private val isCompanion = kindFromProto == ProtoBuf.Class.Kind.COMPANION_OBJECT private val isInner = Flags.IS_INNER.get(classProto.getFlags()) + private val isData = Flags.IS_DATA.get(classProto.flags) val c = outerContext.childContext(this, classProto.typeParameterList, nameResolver, TypeTable(classProto.typeTable)) @@ -90,6 +91,8 @@ public class DeserializedClassDescriptor( override fun isInner() = isInner + override fun isData() = isData + override fun getAnnotations() = annotations override fun getUnsubstitutedMemberScope() = memberScope