diff --git a/build-common/test/org/jetbrains/kotlin/serialization/DebugProtoBuf.java b/build-common/test/org/jetbrains/kotlin/serialization/DebugProtoBuf.java index d7c5408770c..b5b364cba83 100644 --- a/build-common/test/org/jetbrains/kotlin/serialization/DebugProtoBuf.java +++ b/build-common/test/org/jetbrains/kotlin/serialization/DebugProtoBuf.java @@ -20013,6 +20013,8 @@ public final class DebugProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ boolean hasFlags(); @@ -20030,6 +20032,8 @@ public final class DebugProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ int getFlags(); @@ -20385,6 +20389,8 @@ public final class DebugProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ public boolean hasFlags() { @@ -20404,6 +20410,8 @@ public final class DebugProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ public int getFlags() { @@ -21201,6 +21209,8 @@ public final class DebugProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ public boolean hasFlags() { @@ -21220,6 +21230,8 @@ public final class DebugProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ public int getFlags() { @@ -21239,6 +21251,8 @@ public final class DebugProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ public Builder setFlags(int value) { @@ -21261,6 +21275,8 @@ public final class DebugProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ public Builder clearFlags() { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.java index 93105694059..1911ee71391 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.java @@ -76,9 +76,8 @@ public class AccessorForPropertyDescriptor extends PropertyDescriptorImpl implem boolean setterAccessorRequired ) { super(containingDeclaration, null, Annotations.Companion.getEMPTY(), Modality.FINAL, Visibilities.LOCAL, - original.isVar(), Name.identifier("access$" + nameSuffix), - Kind.DECLARATION, SourceElement.NO_SOURCE, /* lateInit = */ false, /* isConst = */ false, - /* isHeader = */ false, /* isImpl = */ false, /* isExternal = */ false); + original.isVar(), Name.identifier("access$" + nameSuffix), Kind.DECLARATION, SourceElement.NO_SOURCE, + false, false, false, false, false, false); this.calleeDescriptor = original; this.superCallTarget = superCallTarget; diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticPropertiesScope.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticPropertiesScope.kt index e41edd906d3..6f469bbc019 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticPropertiesScope.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticPropertiesScope.kt @@ -280,7 +280,8 @@ class JavaSyntheticPropertiesScope(storageManager: StorageManager, private val l source: SourceElement ) : SyntheticJavaPropertyDescriptor, PropertyDescriptorImpl( containingDeclaration, original, annotations, modality, visibility, isVar, name, kind, source, - /* lateInit = */ false, /* isConst = */ false, /* isHeader = */ false, /* isImpl = */ false, /* isExternal = */ false + /* lateInit = */ false, /* isConst = */ false, /* isHeader = */ false, /* isImpl = */ false, /* isExternal = */ false, + /* isDelegated = */ false ) { override var getMethod: FunctionDescriptor by Delegates.notNull() diff --git a/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/LocalVariableDescriptor.java b/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/LocalVariableDescriptor.java index 9eadb924b9c..aedd6af2619 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/LocalVariableDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/LocalVariableDescriptor.java @@ -83,6 +83,9 @@ public class LocalVariableDescriptor extends VariableDescriptorWithInitializerIm return setter; } + // This override is not deprecated because local variables can only come from sources, + // and we can be sure that they won't be recompiled independently + @Override public boolean isDelegated() { return isDelegated; } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java index 56a5a696cf4..8ee4eaa165d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java @@ -833,7 +833,8 @@ public class DescriptorResolver { modifierList != null && modifierList.hasModifier(KtTokens.HEADER_KEYWORD) || containingDeclaration instanceof ClassDescriptor && ((ClassDescriptor) containingDeclaration).isHeader(), modifierList != null && modifierList.hasModifier(KtTokens.IMPL_KEYWORD), - modifierList != null && modifierList.hasModifier(KtTokens.EXTERNAL_KEYWORD) + modifierList != null && modifierList.hasModifier(KtTokens.EXTERNAL_KEYWORD), + property.hasDelegate() ); wrapper.setDescriptor(propertyDescriptor); @@ -1161,11 +1162,12 @@ public class DescriptorResolver { name, CallableMemberDescriptor.Kind.DECLARATION, KotlinSourceElementKt.toSourceElement(parameter), - /* lateInit = */ false, - /* isConst = */ false, - /* isHeader = */ classDescriptor.isHeader(), - /* isImpl = */ modifierList != null && modifierList.hasModifier(KtTokens.IMPL_KEYWORD), - /* isExternal = */ false + false, + false, + classDescriptor.isHeader(), + modifierList != null && modifierList.hasModifier(KtTokens.IMPL_KEYWORD), + false, + false ); propertyWrapper.setDescriptor(propertyDescriptor); propertyDescriptor.setType(type, Collections.emptyList(), diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/LocalVariableResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/LocalVariableResolver.kt index 65fe13a0163..eba540aa8c7 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/LocalVariableResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/LocalVariableResolver.kt @@ -148,7 +148,8 @@ class LocalVariableResolver( /* isConst = */ false, /* isHeader = */ false, /* isImpl = */ false, - /* isExternal = */ false + /* isExternal = */ false, + variable is KtProperty && variable.hasDelegate() ) // For a local variable the type must not be deferred type = variableTypeAndInitializerResolver.resolveType(propertyDescriptor, scope, variable, dataFlowInfo, trace, local = true) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt index 00eaf8a4828..ddeb66a6080 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt @@ -100,7 +100,8 @@ class DynamicCallableDescriptors(storageManager: StorageManager, builtIns: Kotli /* isConst = */ false, /* isHeader = */ false, /* isImpl = */ false, - /* isExternal = */ false + /* isExternal = */ false, + /* isDelegated = */ false ) propertyDescriptor.setType( dynamicType, @@ -230,4 +231,3 @@ fun DeclarationDescriptor.isDynamic(): Boolean { val dispatchReceiverParameter = dispatchReceiverParameter return dispatchReceiverParameter != null && dispatchReceiverParameter.type.isDynamic() } - diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDescriptorWithExtraFlags.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDescriptorWithExtraFlags.kt index 2a976d28606..4012e3e57fd 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDescriptorWithExtraFlags.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDescriptorWithExtraFlags.kt @@ -27,7 +27,7 @@ interface JvmDescriptorWithExtraFlags { val extraFlags: Int } -class JvmPropertyDescriptorImpl( +class JvmPropertyDescriptorImpl private constructor( containingDeclaration: DeclarationDescriptor, original: PropertyDescriptor?, annotations: Annotations, @@ -44,7 +44,7 @@ class JvmPropertyDescriptorImpl( isImpl: Boolean ) : JvmDescriptorWithExtraFlags, PropertyDescriptorImpl( containingDeclaration, original, annotations, modality, visibility, isVar, - name, kind, source, isLateInit, isConst, isHeader, isImpl, /* isExternal = */ false + name, kind, source, isLateInit, isConst, isHeader, isImpl, /* isExternal = */ false, false ) { override fun createSubstitutedCopy( newOwner: DeclarationDescriptor, diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/SharedVariablesManager.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/SharedVariablesManager.kt index 34b7d96b511..6d5f582af9a 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/SharedVariablesManager.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/SharedVariablesManager.kt @@ -54,7 +54,7 @@ class JvmSharedVariablesManager(val builtIns: KotlinBuiltIns) : SharedVariablesM refClass, Annotations.EMPTY, Modality.FINAL, Visibilities.PUBLIC, true, Name.identifier("element"), CallableMemberDescriptor.Kind.DECLARATION, SourceElement.NO_SOURCE, /* lateInit = */ false, /* isConst = */ false, /* isHeader = */ false, /* isImpl = */ false, - /* isExternal = */ false + /* isExternal = */ false, /* isDelegated = */ false ).initialize(type, dispatchReceiverParameter = refClass.thisAsReceiverParameter) } @@ -95,7 +95,7 @@ class JvmSharedVariablesManager(val builtIns: KotlinBuiltIns) : SharedVariablesM genericRefClass, Annotations.EMPTY, Modality.FINAL, Visibilities.PUBLIC, true, Name.identifier("element"), CallableMemberDescriptor.Kind.DECLARATION, SourceElement.NO_SOURCE, /* lateInit = */ false, /* isConst = */ false, /* isHeader = */ false, /* isImpl = */ false, - /* isExternal = */ false + /* isExternal = */ false, /* isDelegated = */ false ).initialize( type = builtIns.anyType, dispatchReceiverParameter = genericRefClass.thisAsReceiverParameter diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/SpecialDescriptorsFactory.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/SpecialDescriptorsFactory.kt index d558c2e8559..b750b6d8ad6 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/SpecialDescriptorsFactory.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/SpecialDescriptorsFactory.kt @@ -129,9 +129,9 @@ class SpecialDescriptorsFactory( Annotations.EMPTY, Modality.FINAL, Visibilities.PUBLIC, false, Name.identifier("INSTANCE"), CallableMemberDescriptor.Kind.SYNTHESIZED, SourceElement.NO_SOURCE, /* lateInit = */ false, /* isConst = */ false, - /* isHeader = */ false, /* isImpl = */ false, /* isExternal = */ false + /* isHeader = */ false, /* isImpl = */ false, /* isExternal = */ false, /* isDelegated = */ false ).initialize(objectDescriptor.defaultType) return instanceFieldDescriptor } -} \ No newline at end of file +} diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AssignmentGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AssignmentGenerator.kt index 00448575c5b..62c2dbf9f38 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AssignmentGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AssignmentGenerator.kt @@ -116,6 +116,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen } is LocalVariableDescriptor -> + @Suppress("DEPRECATION") if (descriptor.isDelegated) DelegatedLocalPropertyLValue(ktLeft.startOffset, ktLeft.endOffset, descriptor, origin) else diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt index 7c7dad2e26f..2157e330296 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt @@ -18,7 +18,9 @@ package org.jetbrains.kotlin.psi2ir.generators import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor -import org.jetbrains.kotlin.ir.expressions.* +import org.jetbrains.kotlin.ir.expressions.IrExpression +import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression +import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.psiUtil.endOffset @@ -51,6 +53,7 @@ class CallGenerator(statementGenerator: StatementGenerator): StatementGeneratorE descriptor: VariableDescriptor, typeArguments: Map?, origin: IrStatementOrigin? = null) = + @Suppress("DEPRECATION") if (descriptor is LocalVariableDescriptor && descriptor.isDelegated) IrCallImpl(startOffset, endOffset, descriptor.type, descriptor.getter!!, typeArguments, origin ?: IrStatementOrigin.GET_LOCAL_PROPERTY) else diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrDelegateDescriptor.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrDelegateDescriptor.kt index 588dd471b6b..a7469d63fb4 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrDelegateDescriptor.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrDelegateDescriptor.kt @@ -62,7 +62,8 @@ abstract class IrDelegateDescriptorBase( /* isConst = */ false, /* isHeader = */ false, /* isImpl = */ false, - /* isExternal = */ false + /* isExternal = */ false, + /* isDelegated = */ true ) { init { setOutType(delegateType) @@ -134,4 +135,4 @@ class IrLocalDelegatedPropertyDelegateDescriptorImpl( override fun accept(visitor: DeclarationDescriptorVisitor, data: D): R = visitor.visitVariableDescriptor(this, data) -} \ No newline at end of file +} diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt index ef4e56162f6..f4564c10679 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt @@ -188,7 +188,8 @@ class DescriptorSerializer private constructor( val flags = Flags.getPropertyFlags( hasAnnotations, descriptor.visibility, descriptor.modality, descriptor.kind, descriptor.isVar, - hasGetter, hasSetter, hasConstant, isConst, lateInit, descriptor.isExternal + hasGetter, hasSetter, hasConstant, isConst, lateInit, descriptor.isExternal, + @Suppress("DEPRECATION") descriptor.isDelegated ) if (flags != builder.flags) { builder.flags = flags diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java index 959c58b2842..40ceb2f4630 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java @@ -33,7 +33,7 @@ import java.util.List; public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements JavaCallableMemberDescriptor { private final boolean isStaticFinal; - protected JavaPropertyDescriptor( + private JavaPropertyDescriptor( @NotNull DeclarationDescriptor containingDeclaration, @NotNull Annotations annotations, @NotNull Modality modality, @@ -46,7 +46,7 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja boolean isStaticFinal ) { super(containingDeclaration, original, annotations, modality, visibility, isVar, name, kind, source, - /* lateInit = */ false, /* isConst = */ false, /* isHeader = */ false, /* isImpl = */ false, /* isExternal = */ false); + false, false, false, false, false, false); this.isStaticFinal = isStaticFinal; } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/VariableDescriptorWithAccessors.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/VariableDescriptorWithAccessors.kt index a26b4bc01b0..2323a1244cb 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/VariableDescriptorWithAccessors.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/VariableDescriptorWithAccessors.kt @@ -16,7 +16,18 @@ package org.jetbrains.kotlin.descriptors -public interface VariableDescriptorWithAccessors : VariableDescriptor { - public val getter: VariableAccessorDescriptor? - public val setter: VariableAccessorDescriptor? -} \ No newline at end of file +interface VariableDescriptorWithAccessors : VariableDescriptor { + val getter: VariableAccessorDescriptor? + + val setter: VariableAccessorDescriptor? + + /** + * Please be careful with this method. Depending on the fact that a property is delegated may be dangerous in the compiler. + * Whether or not a property is delegated is neither the API or the ABI of that property, and one should be able to recompile a library + * in a way that makes some non-delegated properties delegated or vice versa, without any problems at compilation time or at runtime. + * + * This flag is needed for reflection however, that's why it's serialized to metadata and is exposed in this interface. + */ + @Deprecated("Do not call this method in the compiler front-end.") + val isDelegated: Boolean +} diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java index 251b68334b1..496f556446d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java @@ -47,6 +47,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp private final boolean isHeader; private final boolean isImpl; private final boolean isExternal; + private final boolean isDelegated; private ReceiverParameterDescriptor dispatchReceiverParameter; private ReceiverParameterDescriptor extensionReceiverParameter; @@ -69,7 +70,8 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp boolean isConst, boolean isHeader, boolean isImpl, - boolean isExternal + boolean isExternal, + boolean isDelegated ) { super(containingDeclaration, annotations, name, null, isVar, source); this.modality = modality; @@ -81,6 +83,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp this.isHeader = isHeader; this.isImpl = isImpl; this.isExternal = isExternal; + this.isDelegated = isDelegated; } @NotNull @@ -97,11 +100,12 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp boolean isConst, boolean isHeader, boolean isImpl, - boolean isExternal + boolean isExternal, + boolean isDelegated ) { return new PropertyDescriptorImpl(containingDeclaration, null, annotations, modality, visibility, isVar, name, kind, source, lateInit, isConst, - isHeader, isImpl, isExternal); + isHeader, isImpl, isExternal, isDelegated); } public void setType( @@ -209,6 +213,11 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp return isExternal; } + @Override + public boolean isDelegated() { + return isDelegated; + } + @Override @NotNull public List getAccessors() { @@ -353,7 +362,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp ) { return new PropertyDescriptorImpl( newOwner, original, getAnnotations(), newModality, newVisibility, isVar(), getName(), kind, SourceElement.NO_SOURCE, - isLateInit(), isConst(), isHeader(), isImpl(), isExternal() + isLateInit(), isConst(), isHeader(), isImpl(), isExternal(), isDelegated() ); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java index 8ef514e2fc1..acb4e46c9e9 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java @@ -379,11 +379,7 @@ public class ErrorUtils { Name.special(""), CallableMemberDescriptor.Kind.DECLARATION, SourceElement.NO_SOURCE, - /* lateInit = */ false, - /* isConst = */ false, - /* isHeader = */ false, - /* isImpl = */ false, - /* isExternal = */ false + false, false, false, false, false, false ); descriptor.setType(ERROR_PROPERTY_TYPE, Collections.emptyList(), diff --git a/core/deserialization/src/descriptors.proto b/core/deserialization/src/descriptors.proto index db5734011cb..acaae5bd3a4 100644 --- a/core/deserialization/src/descriptors.proto +++ b/core/deserialization/src/descriptors.proto @@ -301,6 +301,8 @@ message Property { isConst lateinit hasConstant + isExternal + isDelegated */ optional int32 flags = 11 [default = 518 /* public (6) final property with getter (512) */]; optional int32 old_flags = 1 [default = 2054]; diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java b/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java index 8b88cbcec15..fe0bf24a6e2 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java @@ -20,7 +20,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.protobuf.Internal; -import org.jetbrains.kotlin.types.KotlinType; public class Flags { private Flags() {} @@ -67,6 +66,7 @@ public class Flags { public static final BooleanFlagField IS_LATEINIT = FlagField.booleanAfter(IS_CONST); public static final BooleanFlagField HAS_CONSTANT = FlagField.booleanAfter(IS_LATEINIT); public static final BooleanFlagField IS_EXTERNAL_PROPERTY = FlagField.booleanAfter(HAS_CONSTANT); + public static final BooleanFlagField IS_DELEGATED = FlagField.booleanAfter(IS_EXTERNAL_PROPERTY); // Parameters @@ -173,7 +173,8 @@ public class Flags { boolean hasConstant, boolean isConst, boolean lateInit, - boolean isExternal + boolean isExternal, + boolean isDelegated ) { return HAS_ANNOTATIONS.toFlags(hasAnnotations) | VISIBILITY.toFlags(visibility(visibility)) @@ -186,6 +187,7 @@ public class Flags { | IS_LATEINIT.toFlags(lateInit) | HAS_CONSTANT.toFlags(hasConstant) | IS_EXTERNAL_PROPERTY.toFlags(isExternal) + | IS_DELEGATED.toFlags(isDelegated) ; } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java b/core/deserialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java index bd32a817f9c..4afbfbaf2d2 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java @@ -15322,6 +15322,8 @@ public final class ProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ boolean hasFlags(); @@ -15339,6 +15341,8 @@ public final class ProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ int getFlags(); @@ -15664,6 +15668,8 @@ public final class ProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ public boolean hasFlags() { @@ -15683,6 +15689,8 @@ public final class ProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ public int getFlags() { @@ -16371,6 +16379,8 @@ public final class ProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ public boolean hasFlags() { @@ -16390,6 +16400,8 @@ public final class ProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ public int getFlags() { @@ -16409,6 +16421,8 @@ public final class ProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ public Builder setFlags(int value) { @@ -16431,6 +16445,8 @@ public final class ProtoBuf { *isConst *lateinit *hasConstant + *isExternal + *isDelegated * */ public Builder clearFlags() { diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt index 80677b9f4c9..16ad6ad4728 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt @@ -47,6 +47,7 @@ class MemberDeserializer(private val c: DeserializationContext) { Flags.IS_LATEINIT.get(flags), Flags.IS_CONST.get(flags), Flags.IS_EXTERNAL_PROPERTY.get(flags), + Flags.IS_DELEGATED.get(flags), proto, c.nameResolver, c.typeTable, diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberDescriptor.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberDescriptor.kt index d0cd60e5cdb..2cc4c95cfce 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberDescriptor.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberDescriptor.kt @@ -105,6 +105,7 @@ class DeserializedPropertyDescriptor( isLateInit: Boolean, isConst: Boolean, isExternal: Boolean, + isDelegated: Boolean, override val proto: ProtoBuf.Property, override val nameResolver: NameResolver, override val typeTable: TypeTable, @@ -113,7 +114,7 @@ class DeserializedPropertyDescriptor( ) : DeserializedCallableMemberDescriptor, PropertyDescriptorImpl(containingDeclaration, original, annotations, modality, visibility, isVar, name, kind, SourceElement.NO_SOURCE, isLateInit, isConst, false, false, - isExternal) { + isExternal, isDelegated) { override fun createSubstitutedCopy( newOwner: DeclarationDescriptor, @@ -124,6 +125,7 @@ class DeserializedPropertyDescriptor( ): PropertyDescriptorImpl { return DeserializedPropertyDescriptor( newOwner, original, annotations, newModality, newVisibility, isVar, name, kind, isLateInit, isConst, isExternal, + @Suppress("DEPRECATION") isDelegated, proto, nameResolver, typeTable, sinceKotlinInfoTable, containerSource ) } diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/res/syntheticDescriptorGeneration.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/res/syntheticDescriptorGeneration.kt index 951107219c2..68c3f6ab581 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/res/syntheticDescriptorGeneration.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/res/syntheticDescriptorGeneration.kt @@ -105,7 +105,8 @@ private fun genProperty( /* isConst = */ false, /* isHeader = */ false, /* isImpl = */ false, - /* isExternal = */ false + /* isExternal = */ false, + /* isDelegated = */ false ) { override val errorType = errorType override val cacheView = cacheView @@ -149,4 +150,4 @@ interface AndroidSyntheticProperty { val isErrorType: Boolean get() = errorType != null -} \ No newline at end of file +}