From ba2443bcb3b2e6b6dc1c789ef88ae447700b6145 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Thu, 24 Nov 2016 19:37:13 +0300 Subject: [PATCH] Add `external` property to class and property descriptors --- .../codegen/AccessorForPropertyDescriptor.java | 2 +- .../codegen/CollectionStubMethodGenerator.kt | 4 ++-- .../kotlin/codegen/InterfaceImplBodyCodegen.kt | 3 ++- .../kotlin/codegen/JvmRuntimeTypes.kt | 3 ++- .../kotlin/codegen/MutableClassDescriptor.java | 3 ++- .../kotlin/codegen/SamWrapperCodegen.java | 3 ++- .../SyntheticClassDescriptorForLambda.kt | 3 ++- .../synthetic/JavaSyntheticPropertiesScope.kt | 2 +- .../kotlin/resolve/DescriptorResolver.java | 6 ++++-- .../kotlin/resolve/LocalVariableResolver.kt | 3 ++- .../kotlin/resolve/calls/tasks/dynamicCalls.kt | 3 ++- .../descriptors/AbstractLazyMemberScope.kt | 7 +++++-- .../lazy/descriptors/LazyClassDescriptor.java | 6 ++++-- .../lazy/descriptors/LazyScriptDescriptor.kt | 3 ++- .../expressions/LocalClassifierAnalyzer.kt | 4 +++- .../descriptors/DefaultImplsClassDescriptor.kt | 2 ++ .../jvm/descriptors/FileClassDescriptor.kt | 2 ++ .../descriptors/JvmDescriptorWithExtraFlags.kt | 2 +- .../jvm/descriptors/KnownDescriptors.kt | 1 + .../jvm/descriptors/SharedVariablesManager.kt | 6 ++++-- .../descriptors/SpecialDescriptorsFactory.kt | 3 ++- .../ir/descriptors/IrDelegateDescriptor.kt | 3 ++- .../JvmBuiltInClassDescriptorFactory.kt | 2 +- .../descriptors/JavaPropertyDescriptor.java | 2 +- .../descriptors/LazyJavaClassDescriptor.kt | 3 ++- .../kotlin/load/kotlin/JvmBuiltInsSettings.kt | 9 +++++---- .../functions/FunctionClassDescriptor.kt | 1 + .../kotlin/descriptors/FunctionDescriptor.java | 2 -- .../kotlin/descriptors/MemberDescriptor.java | 2 ++ .../impl/AbstractTypeAliasDescriptor.kt | 2 ++ .../descriptors/impl/ClassDescriptorBase.java | 10 +++++++++- .../descriptors/impl/ClassDescriptorImpl.java | 5 +++-- .../EnumEntrySyntheticClassDescriptor.java | 2 +- .../impl/LazySubstitutingClassDescriptor.java | 5 +++++ .../impl/PropertyDescriptorImpl.java | 18 ++++++++++++++---- .../org/jetbrains/kotlin/types/ErrorUtils.java | 7 +++++-- .../jetbrains/kotlin/serialization/Flags.java | 2 ++ .../deserialization/MemberDeserializer.kt | 1 + .../deserialization/NotFoundClasses.kt | 3 ++- .../descriptors/DeserializedClassDescriptor.kt | 2 ++ .../DeserializedMemberDescriptor.kt | 9 +++++++-- .../res/syntheticDescriptorGeneration.kt | 6 +++++- 42 files changed, 120 insertions(+), 47 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.java index ba2d01ffd8c..66ee82269b9 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.java @@ -78,7 +78,7 @@ public class AccessorForPropertyDescriptor extends PropertyDescriptorImpl implem 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, - /* isPlatform = */ false, /* isImpl = */ false); + /* isPlatform = */ false, /* isImpl = */ false, /* isExternal = */ false); this.calleeDescriptor = original; this.superCallTarget = superCallTarget; diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/CollectionStubMethodGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/CollectionStubMethodGenerator.kt index 9e749d8421e..34d1c0bdd7b 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/CollectionStubMethodGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/CollectionStubMethodGenerator.kt @@ -308,8 +308,8 @@ class CollectionStubMethodGenerator( } private fun createSyntheticSubclass(): Pair> { - val child = MutableClassDescriptor(descriptor.containingDeclaration, ClassKind.CLASS, false, - Name.special(""), descriptor.source) + val child = MutableClassDescriptor(descriptor.containingDeclaration, ClassKind.CLASS, /* isInner = */ false, + /* isExternal */ false, Name.special(""), descriptor.source) child.modality = Modality.FINAL child.visibility = Visibilities.PUBLIC val typeParameters = descriptor.typeConstructor.parameters diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt index 7dce196498c..fe0440b216a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt @@ -62,7 +62,8 @@ class InterfaceImplBodyCodegen( if (DescriptorUtils.isLocal(descriptor)) return null val classDescriptorImpl = ClassDescriptorImpl( descriptor, Name.identifier(JvmAbi.DEFAULT_IMPLS_CLASS_NAME), - Modality.FINAL, ClassKind.CLASS, Collections.emptyList(), SourceElement.NO_SOURCE) + Modality.FINAL, ClassKind.CLASS, Collections.emptyList(), SourceElement.NO_SOURCE, + /* isExternal = */ false) classDescriptorImpl.initialize(MemberScope.Empty, emptySet(), null) return classDescriptorImpl diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmRuntimeTypes.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmRuntimeTypes.kt index 005330d2700..e24c07da41d 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmRuntimeTypes.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmRuntimeTypes.kt @@ -67,7 +67,8 @@ class JvmRuntimeTypes(module: ModuleDescriptor) { } private fun createClass(packageFragment: PackageFragmentDescriptor, name: String): ClassDescriptor = - MutableClassDescriptor(packageFragment, ClassKind.CLASS, false, Name.identifier(name), SourceElement.NO_SOURCE).apply { + MutableClassDescriptor(packageFragment, ClassKind.CLASS, /* isInner = */ false, /* isExternal = */ false, + Name.identifier(name), SourceElement.NO_SOURCE).apply { modality = Modality.FINAL visibility = Visibilities.PUBLIC setTypeParameterDescriptors(emptyList()) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java index 7245d09df33..c3fa3936c5c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java @@ -47,10 +47,11 @@ public class MutableClassDescriptor extends ClassDescriptorBase implements Class @NotNull DeclarationDescriptor containingDeclaration, @NotNull ClassKind kind, boolean isInner, + boolean isExternal, @NotNull Name name, @NotNull SourceElement source ) { - super(LockBasedStorageManager.NO_LOCKS, containingDeclaration, name, source); + super(LockBasedStorageManager.NO_LOCKS, containingDeclaration, name, source, isExternal); assert kind != ClassKind.OBJECT : "Fix isCompanionObject()"; this.kind = kind; diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java index 83b24d6ecf1..2e539b7047f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java @@ -84,7 +84,8 @@ public class SamWrapperCodegen { Modality.FINAL, ClassKind.CLASS, Collections.singleton(samType.getType()), - SourceElement.NO_SOURCE + SourceElement.NO_SOURCE, + /* isExternal = */ false ); // e.g. compare(T, T) SimpleFunctionDescriptor erasedInterfaceFunction = samType.getAbstractMethod().getOriginal().copy( diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/SyntheticClassDescriptorForLambda.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/SyntheticClassDescriptorForLambda.kt index e181deb3ba8..fe4fb2b05c4 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/SyntheticClassDescriptorForLambda.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/SyntheticClassDescriptorForLambda.kt @@ -31,7 +31,8 @@ class SyntheticClassDescriptorForLambda( name: Name, supertypes: Collection, element: KtElement -) : ClassDescriptorImpl(containingDeclaration, name, Modality.FINAL, ClassKind.CLASS, supertypes, element.toSourceElement()) { +) : ClassDescriptorImpl(containingDeclaration, name, Modality.FINAL, ClassKind.CLASS, supertypes, element.toSourceElement(), + /* isExternal = */ false) { init { initialize(MemberScope.Empty, emptySet(), null) } 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 c531dcda8de..f162e6a530e 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,7 @@ class JavaSyntheticPropertiesScope(storageManager: StorageManager, private val l source: SourceElement ) : SyntheticJavaPropertyDescriptor, PropertyDescriptorImpl( containingDeclaration, original, annotations, modality, visibility, isVar, name, kind, source, - /* lateInit = */ false, /* isConst = */ false, /* isPlatform = */ false, /* isImpl = */ false + /* lateInit = */ false, /* isConst = */ false, /* isPlatform = */ false, /* isImpl = */ false, /* isExternal = */ false ) { override var getMethod: FunctionDescriptor by Delegates.notNull() diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java index c1f1418643b..1356a21af6c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java @@ -811,7 +811,8 @@ public class DescriptorResolver { modifierList != null && modifierList.hasModifier(KtTokens.CONST_KEYWORD), modifierList != null && modifierList.hasModifier(KtTokens.PLATFORM_KEYWORD) || containingDeclaration instanceof ClassDescriptor && ((ClassDescriptor) containingDeclaration).isPlatform(), - modifierList != null && modifierList.hasModifier(KtTokens.IMPL_KEYWORD) + modifierList != null && modifierList.hasModifier(KtTokens.IMPL_KEYWORD), + modifierList != null && modifierList.hasModifier(KtTokens.EXTERNAL_KEYWORD) ); wrapper.setDescriptor(propertyDescriptor); @@ -1128,7 +1129,8 @@ public class DescriptorResolver { /* lateInit = */ false, /* isConst = */ false, /* isPlatform = */ false, - /* isImpl = */ false + /* isImpl = */ false, + /* isExternal = */ 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 df710d28600..bbe39457788 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( /* lateInit = */ false, /* isConst = */ false, /* isPlatform = */ false, - /* isImpl = */ false + /* isImpl = */ false, + /* isExternal = */ false ) // 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 8ce403423bc..579b611b05c 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 @@ -99,7 +99,8 @@ class DynamicCallableDescriptors(storageManager: StorageManager, builtIns: Kotli /* lateInit = */ false, /* isConst = */ false, /* isPlatform = */ false, - /* isImpl = */ false + /* isImpl = */ false, + /* isExternal = */ false ) propertyDescriptor.setType( dynamicType, diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt index 7f719c04817..2812ee4bb51 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.resolve.lazy.descriptors import com.google.common.collect.Sets import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.incremental.components.LookupLocation +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingTrace @@ -53,8 +54,10 @@ protected constructor( return declarationProvider.getClassOrObjectDeclarations(name).map { if (it is KtScriptInfo) LazyScriptDescriptor(c as ResolveSession, thisDescriptor, name, it) - else - LazyClassDescriptor(c, thisDescriptor, name, it) + else { + val isExternal = it.modifierList?.hasModifier(KtTokens.EXTERNAL_KEYWORD) ?: false + LazyClassDescriptor(c, thisDescriptor, name, it, isExternal) + } }.toReadOnlyList() } 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 536f477ac20..cc1913e06f5 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 @@ -111,10 +111,12 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes @NotNull final LazyClassContext c, @NotNull DeclarationDescriptor containingDeclaration, @NotNull Name name, - @NotNull final KtClassLikeInfo classLikeInfo + @NotNull final KtClassLikeInfo classLikeInfo, + boolean isExternal ) { super(c.getStorageManager(), containingDeclaration, name, - KotlinSourceElementKt.toSourceElement(classLikeInfo.getCorrespondingClassOrObject()) + KotlinSourceElementKt.toSourceElement(classLikeInfo.getCorrespondingClassOrObject()), + isExternal ); this.c = c; diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt index 15db4a7e5ea..70c3bd80b86 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt @@ -43,7 +43,8 @@ class LazyScriptDescriptor( resolveSession, containingDeclaration, name, - scriptInfo + scriptInfo, + /* isExternal = */ false ) { init { resolveSession.trace.record(BindingContext.SCRIPT, scriptInfo.script, this) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt index a42458820cd..2ae61fcb77f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.descriptors.SupertypeLoopChecker import org.jetbrains.kotlin.frontend.di.createContainerForLazyLocalClassifierAnalyzer import org.jetbrains.kotlin.incremental.components.LookupLocation import org.jetbrains.kotlin.incremental.components.LookupTracker +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtFile @@ -152,7 +153,8 @@ class LocalClassDescriptorHolder( , containingDeclaration, classOrObject.getNameAsSafeName(), - KtClassInfoUtil.createClassLikeInfo(classOrObject) + KtClassInfoUtil.createClassLikeInfo(classOrObject), + classOrObject.hasModifier(KtTokens.EXTERNAL_KEYWORD) ) writableScope?.addClassifierDescriptor(classDescriptor!!) } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/DefaultImplsClassDescriptor.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/DefaultImplsClassDescriptor.kt index 223f4c8abb7..33af0f4817a 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/DefaultImplsClassDescriptor.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/DefaultImplsClassDescriptor.kt @@ -33,4 +33,6 @@ class DefaultImplsClassDescriptorImpl( init { initialize(emptyList(), listOf(correspondingInterface.module.builtIns.anyType)) } + + override fun isExternal() = false } \ No newline at end of file diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/FileClassDescriptor.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/FileClassDescriptor.kt index dccd7bd7fd5..36bd241d3ec 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/FileClassDescriptor.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/FileClassDescriptor.kt @@ -37,4 +37,6 @@ class FileClassDescriptorImpl( init { initialize(emptyList(), supertypes) } + + override fun isExternal() = false } \ No newline at end of file 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 4527ec0af6e..ed844a3c4fe 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 @@ -44,7 +44,7 @@ class JvmPropertyDescriptorImpl( isImpl: Boolean ) : JvmDescriptorWithExtraFlags, PropertyDescriptorImpl( containingDeclaration, original, annotations, modality, visibility, isVar, - name, kind, source, isLateInit, isConst, isPlatform, isImpl + name, kind, source, isLateInit, isConst, isPlatform, isImpl, /* isExternal = */ false ) { override fun createSubstitutedCopy( newOwner: DeclarationDescriptor, diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/KnownDescriptors.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/KnownDescriptors.kt index 6b00320b97d..080e1e6bd7c 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/KnownDescriptors.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/KnownDescriptors.kt @@ -140,6 +140,7 @@ open class KnownClassDescriptor( override fun isInner(): Boolean = false override fun isPlatform(): Boolean = false override fun isImpl(): Boolean = false + override fun isExternal(): Boolean = false override fun accept(visitor: DeclarationDescriptorVisitor, data: D): R { return visitor.visitClassDescriptor(this, data) 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 5ea59789264..cab50bb2a1a 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 @@ -59,7 +59,8 @@ class JvmSharedVariablesManager(val builtIns: KotlinBuiltIns) : SharedVariablesM PropertyDescriptorImpl.create( refClass, Annotations.EMPTY, Modality.FINAL, Visibilities.PUBLIC, true, Name.identifier("element"), CallableMemberDescriptor.Kind.DECLARATION, SourceElement.NO_SOURCE, - false, false, false, false + /* lateInit = */ false, /* isConst = */ false, /* isPlatform = */ false, /* isImpl = */ false, + /* isExternal = */ false ).initialize(type, dispatchReceiverParameter = refClass.thisAsReceiverParameter) } @@ -99,7 +100,8 @@ class JvmSharedVariablesManager(val builtIns: KotlinBuiltIns) : SharedVariablesM PropertyDescriptorImpl.create( genericRefClass, Annotations.EMPTY, Modality.FINAL, Visibilities.PUBLIC, true, Name.identifier("element"), CallableMemberDescriptor.Kind.DECLARATION, SourceElement.NO_SOURCE, - false, false, false, false + /* lateInit = */ false, /* isConst = */ false, /* isPlatform = */ false, /* isImpl = */ false, + /* isExternal = */ 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 5f3c9a8101e..8be81b5c1c9 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 @@ -128,7 +128,8 @@ class SpecialDescriptorsFactory( objectDescriptor, Annotations.EMPTY, Modality.FINAL, Visibilities.PUBLIC, false, Name.identifier("INSTANCE"), - CallableMemberDescriptor.Kind.SYNTHESIZED, SourceElement.NO_SOURCE, false, false, false, false + CallableMemberDescriptor.Kind.SYNTHESIZED, SourceElement.NO_SOURCE, /* lateInit = */ false, /* isConst = */ false, + /* isPlatform = */ false, /* isImpl = */ false, /* isExternal = */ false ).initialize(objectDescriptor.defaultType) return instanceFieldDescriptor 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 2c20d9008b2..ac91c1f80b9 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 @@ -61,7 +61,8 @@ abstract class IrDelegateDescriptorBase( /* lateInit = */ false, /* isConst = */ false, /* isPlatform = */ false, - /* isImpl = */ false + /* isImpl = */ false, + /* isExternal = */ false ) { init { setOutType(delegateType) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/builtins/JvmBuiltInClassDescriptorFactory.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/builtins/JvmBuiltInClassDescriptorFactory.kt index f03cdce1302..de6b96e803e 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/builtins/JvmBuiltInClassDescriptorFactory.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/builtins/JvmBuiltInClassDescriptorFactory.kt @@ -33,7 +33,7 @@ class JvmBuiltInClassDescriptorFactory( ClassDescriptorImpl( moduleDescriptor.getPackage(KOTLIN_FQ_NAME).fragments.filterIsInstance().first(), CLONEABLE_NAME, Modality.ABSTRACT, ClassKind.INTERFACE, listOf(moduleDescriptor.builtIns.anyType), - SourceElement.NO_SOURCE + SourceElement.NO_SOURCE, /* isExternal = */ false ).apply { initialize(CloneableClassScope(storageManager, this), emptySet(), null) } 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 d19934e305b..992bf22d0e5 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 @@ -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, /* isPlatform = */ false, /* isImpl = */ false); + /* lateInit = */ false, /* isConst = */ false, /* isPlatform = */ false, /* isImpl = */ false, /* isExternal = */ false); this.isStaticFinal = isStaticFinal; } 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 a1bc06cbb6d..9c128f6620b 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 @@ -55,7 +55,8 @@ class LazyJavaClassDescriptor( private val jClass: JavaClass, private val additionalSupertypeClassDescriptor: ClassDescriptor? = null ) : ClassDescriptorBase(outerContext.storageManager, containingDeclaration, jClass.name, - outerContext.components.sourceElementFactory.source(jClass)), JavaClassDescriptor { + outerContext.components.sourceElementFactory.source(jClass), + /* isExternal = */ false), JavaClassDescriptor { private val c: LazyJavaResolverContext = outerContext.child(this, jClass) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JvmBuiltInsSettings.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JvmBuiltInsSettings.kt index ab4279dafe9..fa88fb743bc 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JvmBuiltInsSettings.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JvmBuiltInsSettings.kt @@ -87,9 +87,9 @@ open class JvmBuiltInsSettings( // - Otherwise error will be reported because of Deprecated annotation with Error level val lowPriorityAnnotation = ClassDescriptorImpl( - moduleDescriptor.getPackage(LOW_PRIORITY_IN_OVERLOAD_RESOLUTION_FQ_NAME.parent()), - LOW_PRIORITY_IN_OVERLOAD_RESOLUTION_FQ_NAME.shortName(), Modality.FINAL, ClassKind.ANNOTATION_CLASS, - moduleDescriptor.builtIns.anyType.singletonList(), SourceElement.NO_SOURCE + moduleDescriptor.getPackage(LOW_PRIORITY_IN_OVERLOAD_RESOLUTION_FQ_NAME.parent()), LOW_PRIORITY_IN_OVERLOAD_RESOLUTION_FQ_NAME.shortName(), + Modality.FINAL, ClassKind.ANNOTATION_CLASS, moduleDescriptor.builtIns.anyType.singletonList(), + SourceElement.NO_SOURCE, /* isExternal = */ false ).run { initialize(MemberScope.Empty, emptySet(), null) AnnotationDescriptorImpl(defaultType, emptyMap(), SourceElement.NO_SOURCE) @@ -112,7 +112,8 @@ open class JvmBuiltInsSettings( val superTypes = listOf(LazyWrappedType(this) { moduleDescriptor.builtIns.anyType }) val mockSerializableClass = ClassDescriptorImpl( - mockJavaIoPackageFragment, Name.identifier("Serializable"), Modality.ABSTRACT, ClassKind.INTERFACE, superTypes, SourceElement.NO_SOURCE + mockJavaIoPackageFragment, Name.identifier("Serializable"), Modality.ABSTRACT, ClassKind.INTERFACE, superTypes, + SourceElement.NO_SOURCE, /* isExternal = */ false ) mockSerializableClass.initialize(MemberScope.Empty, emptySet(), null) 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 06fd32b01c5..3ee8f248fe6 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt @@ -104,6 +104,7 @@ class FunctionClassDescriptor( override fun isData() = false override fun isPlatform() = false override fun isImpl() = false + override fun isExternal() = false override val annotations: Annotations get() = Annotations.EMPTY override fun getSource() = SourceElement.NO_SOURCE diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java index 8c98ca1f183..75bbda81cf6 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java @@ -75,8 +75,6 @@ public interface FunctionDescriptor extends CallableMemberDescriptor { boolean isTailrec(); - boolean isExternal(); - boolean isHiddenForResolutionEverywhereBesideSupercalls(); boolean isSuspend(); diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/MemberDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/MemberDescriptor.java index 2a5c174b41b..ddc7d061336 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/MemberDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/MemberDescriptor.java @@ -29,4 +29,6 @@ public interface MemberDescriptor extends DeclarationDescriptorNonRoot, Declarat boolean isPlatform(); boolean isImpl(); + + boolean isExternal(); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractTypeAliasDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractTypeAliasDescriptor.kt index ee091062c61..b5d989754e5 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractTypeAliasDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractTypeAliasDescriptor.kt @@ -69,6 +69,8 @@ abstract class AbstractTypeAliasDescriptor( override fun isImpl(): Boolean = false + override fun isExternal() = false + override fun getTypeConstructor(): TypeConstructor = typeConstructor diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorBase.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorBase.java index a1b4764b974..f4b4c75f8b2 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorBase.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorBase.java @@ -26,16 +26,24 @@ public abstract class ClassDescriptorBase extends AbstractClassDescriptor { private final DeclarationDescriptor containingDeclaration; private final SourceElement source; + private final boolean isExternal; protected ClassDescriptorBase( @NotNull StorageManager storageManager, @NotNull DeclarationDescriptor containingDeclaration, @NotNull Name name, - @NotNull SourceElement source + @NotNull SourceElement source, + boolean isExternal ) { super(storageManager, name); this.containingDeclaration = containingDeclaration; this.source = source; + this.isExternal = isExternal; + } + + @Override + public boolean isExternal() { + return isExternal; } @NotNull 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 4e7cd829b40..e34c9ea9173 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorImpl.java @@ -47,9 +47,10 @@ public class ClassDescriptorImpl extends ClassDescriptorBase { @NotNull Modality modality, @NotNull ClassKind kind, @NotNull Collection supertypes, - @NotNull SourceElement source + @NotNull SourceElement source, + boolean isExternal ) { - super(LockBasedStorageManager.NO_LOCKS, containingDeclaration, name, source); + super(LockBasedStorageManager.NO_LOCKS, containingDeclaration, name, source, isExternal); this.modality = modality; this.kind = kind; 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 0fd2b125948..2e46fc628ed 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java @@ -75,7 +75,7 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { @NotNull Annotations annotations, @NotNull SourceElement source ) { - super(storageManager, containingClass, name, source); + super(storageManager, containingClass, name, source, /* isExternal = */ false); assert containingClass.getKind() == ClassKind.ENUM_CLASS; this.annotations = annotations; 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 54697a54cdc..ae222c1db5f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazySubstitutingClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazySubstitutingClassDescriptor.java @@ -216,6 +216,11 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor { return original.isData(); } + @Override + public boolean isExternal() { + return original.isExternal(); + } + @Override public boolean isCompanionObject() { return original.isCompanionObject(); 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 42e32a150c9..8cd0d497183 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java @@ -46,6 +46,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp private final boolean isConst; private final boolean isPlatform; private final boolean isImpl; + private final boolean isExternal; private ReceiverParameterDescriptor dispatchReceiverParameter; private ReceiverParameterDescriptor extensionReceiverParameter; @@ -67,7 +68,8 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp boolean lateInit, boolean isConst, boolean isPlatform, - boolean isImpl + boolean isImpl, + boolean isExternal ) { super(containingDeclaration, annotations, name, null, isVar, source); this.modality = modality; @@ -78,6 +80,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp this.isConst = isConst; this.isPlatform = isPlatform; this.isImpl = isImpl; + this.isExternal = isExternal; } @NotNull @@ -93,10 +96,12 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp boolean lateInit, boolean isConst, boolean isPlatform, - boolean isImpl + boolean isImpl, + boolean isExternal ) { return new PropertyDescriptorImpl(containingDeclaration, null, annotations, - modality, visibility, isVar, name, kind, source, lateInit, isConst, isPlatform, isImpl); + modality, visibility, isVar, name, kind, source, lateInit, isConst, + isPlatform, isImpl, isExternal); } public void setType( @@ -199,6 +204,11 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp return isConst; } + @Override + public boolean isExternal() { + return isExternal; + } + @Override @NotNull public List getAccessors() { @@ -342,7 +352,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp ) { return new PropertyDescriptorImpl( newOwner, original, getAnnotations(), newModality, newVisibility, isVar(), getName(), kind, SourceElement.NO_SOURCE, - isLateInit(), isConst(), isPlatform(), isImpl() + isLateInit(), isConst(), isPlatform(), isImpl(), isExternal() ); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java index d518386dfde..5aaee03eff1 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java @@ -286,7 +286,9 @@ public class ErrorUtils { private static class ErrorClassDescriptor extends ClassDescriptorImpl { public ErrorClassDescriptor(@Nullable String name) { super(getErrorModule(), Name.special(name == null ? "" : ""), - Modality.OPEN, ClassKind.CLASS, Collections.emptyList(), SourceElement.NO_SOURCE); + Modality.OPEN, ClassKind.CLASS, Collections.emptyList(), SourceElement.NO_SOURCE, + /* isExternal = */ false + ); ClassConstructorDescriptorImpl errorConstructor = ClassConstructorDescriptorImpl.create(this, Annotations.Companion.getEMPTY(), true, SourceElement.NO_SOURCE); @@ -367,7 +369,8 @@ public class ErrorUtils { /* lateInit = */ false, /* isConst = */ false, /* isPlatform = */ false, - /* isImpl = */ false + /* isImpl = */ false, + /* isExternal = */ false ); descriptor.setType(ERROR_PROPERTY_TYPE, Collections.emptyList(), diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java b/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java index d5dc9fcae27..f2391ad2e42 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java @@ -35,6 +35,7 @@ public class Flags { public static final FlagField CLASS_KIND = FlagField.after(MODALITY, ProtoBuf.Class.Kind.values()); public static final BooleanFlagField IS_INNER = FlagField.booleanAfter(CLASS_KIND); public static final BooleanFlagField IS_DATA = FlagField.booleanAfter(IS_INNER); + public static final BooleanFlagField IS_EXTERNAL_CLASS = FlagField.booleanAfter(IS_DATA); // Constructors @@ -61,6 +62,7 @@ public class Flags { public static final BooleanFlagField IS_CONST = FlagField.booleanAfter(HAS_SETTER); 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); // Parameters 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 ed0a5275020..36f7fc24e35 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt @@ -46,6 +46,7 @@ class MemberDeserializer(private val c: DeserializationContext) { Deserialization.memberKind(Flags.MEMBER_KIND.get(flags)), Flags.IS_LATEINIT.get(flags), Flags.IS_CONST.get(flags), + Flags.IS_EXTERNAL_PROPERTY.get(flags), proto, c.nameResolver, c.typeTable, diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/NotFoundClasses.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/NotFoundClasses.kt index 556e1bb84d5..0fe9b620281 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/NotFoundClasses.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/NotFoundClasses.kt @@ -86,7 +86,7 @@ class NotFoundClasses(private val storageManager: StorageManager, private val mo name: Name, private val isInner: Boolean, numberOfDeclaredTypeParameters: Int - ) : ClassDescriptorBase(storageManager, container, name, SourceElement.NO_SOURCE) { + ) : ClassDescriptorBase(storageManager, container, name, SourceElement.NO_SOURCE, /* isExternal = */ false) { private val typeParameters = createTypeParameters(this, numberOfDeclaredTypeParameters) private val typeConstructor = ClassTypeConstructorImpl(this, /* isFinal = */ true, typeParameters, setOf(module.builtIns.anyType)) @@ -102,6 +102,7 @@ class NotFoundClasses(private val storageManager: StorageManager, private val mo override fun isData() = false override fun isPlatform() = false override fun isImpl() = false + override fun isExternal() = false override val annotations: Annotations get() = Annotations.EMPTY override fun getUnsubstitutedMemberScope() = MemberScope.Empty 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 562a9e2ca3b..a68d904d20f 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 @@ -99,6 +99,8 @@ class DeserializedClassDescriptor( override fun isImpl() = false + override fun isExternal() = Flags.IS_EXTERNAL_CLASS.get(classProto.flags) + override fun getUnsubstitutedMemberScope(): MemberScope = memberScope override fun getStaticScope() = staticScope 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 292281bcbf6..feb15fb2b6f 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 @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.impl.* import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.protobuf.MessageLite +import org.jetbrains.kotlin.serialization.Flags import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.deserialization.NameResolver import org.jetbrains.kotlin.serialization.deserialization.TypeTable @@ -87,13 +88,15 @@ class DeserializedPropertyDescriptor( kind: CallableMemberDescriptor.Kind, isLateInit: Boolean, isConst: Boolean, + isExternal: Boolean, override val proto: ProtoBuf.Property, override val nameResolver: NameResolver, override val typeTable: TypeTable, override val containerSource: DeserializedContainerSource? ) : DeserializedCallableMemberDescriptor, PropertyDescriptorImpl(containingDeclaration, original, annotations, - modality, visibility, isVar, name, kind, SourceElement.NO_SOURCE, isLateInit, isConst, false, false) { + modality, visibility, isVar, name, kind, SourceElement.NO_SOURCE, isLateInit, isConst, false, false, + isExternal) { override fun createSubstitutedCopy( newOwner: DeclarationDescriptor, @@ -103,10 +106,12 @@ class DeserializedPropertyDescriptor( kind: CallableMemberDescriptor.Kind ): PropertyDescriptorImpl { return DeserializedPropertyDescriptor( - newOwner, original, annotations, newModality, newVisibility, isVar, name, kind, isLateInit, isConst, + newOwner, original, annotations, newModality, newVisibility, isVar, name, kind, isLateInit, isConst, isExternal, proto, nameResolver, typeTable, containerSource ) } + + override fun isExternal() = Flags.IS_EXTERNAL_PROPERTY.get(proto.flags) } class DeserializedClassConstructorDescriptor( 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 60461267c9e..6cfabccf46b 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 @@ -101,7 +101,11 @@ private fun genProperty( Name.identifier(id.name), CallableMemberDescriptor.Kind.SYNTHESIZED, sourceElement, - false, false, false, false + /* lateinit = */ false, + /* isConst = */ false, + /* isPlatform = */ false, + /* isImpl = */ false, + /* isExternal = */ false ) { override val errorType = errorType override val cacheView = cacheView