From 6e2ef9b1d2d5834c69ca44567faac77dd5dad476 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 26 Oct 2016 12:24:16 +0300 Subject: [PATCH] Add platform/impl soft keywords, add isPlatform/isImpl to MemberDescriptor --- .../codegen/MutableClassDescriptor.java | 10 +++++++++ .../org/jetbrains/kotlin/lexer/KtTokens.java | 7 ++++-- .../kotlin/psi/stubs/KotlinStubVersions.kt | 4 ++-- .../kotlin/resolve/ModifiersChecker.kt | 8 +++++-- .../lazy/descriptors/LazyClassDescriptor.java | 14 ++++++++++++ .../descriptors/LazyTypeAliasDescriptor.kt | 6 +++++ .../jvm/descriptors/KnownDescriptors.kt | 2 ++ .../IrBuiltinFunctionDescriptor.kt | 2 ++ .../descriptors/LazyJavaClassDescriptor.kt | 5 +++-- .../functions/FunctionClassDescriptor.kt | 2 ++ .../kotlin/descriptors/MemberDescriptor.java | 4 ++++ .../impl/AbstractTypeAliasDescriptor.kt | 4 ++++ .../descriptors/impl/ClassDescriptorImpl.java | 10 +++++++++ .../EnumEntrySyntheticClassDescriptor.java | 10 +++++++++ .../impl/FunctionDescriptorImpl.java | 22 +++++++++++++++++++ .../impl/LazySubstitutingClassDescriptor.java | 10 +++++++++ .../impl/PropertyAccessorDescriptorImpl.java | 10 +++++++++ .../impl/PropertyDescriptorImpl.java | 12 ++++++++++ .../kotlin/renderer/DescriptorRenderer.kt | 5 +++-- .../kotlin/renderer/DescriptorRendererImpl.kt | 22 +++++++++++++++++++ .../deserialization/NotFoundClasses.kt | 2 ++ .../DeserializedClassDescriptor.kt | 4 ++++ .../testData/keywords/AfterClassProperty.kt | 2 ++ .../testData/keywords/AfterClasses.kt | 2 ++ .../testData/keywords/AfterFuns.kt | 2 ++ .../keywords/GlobalPropertyAccessors.kt | 2 ++ .../keywords/InAnnotationClassScope.kt | 2 ++ .../testData/keywords/InClassBeforeFun.kt | 2 ++ .../testData/keywords/InClassScope.kt | 2 ++ .../testData/keywords/InEnumScope2.kt | 2 ++ .../testData/keywords/InInterfaceScope.kt | 2 ++ .../keywords/InModifierListInsideClass.kt | 2 +- .../testData/keywords/InObjectScope.kt | 2 ++ .../InPrimaryConstructorParametersList.kt | 1 + .../keywords/InTopScopeAfterPackage.kt | 2 ++ .../testData/keywords/PrefixMatcher.kt | 1 + .../testData/keywords/PropertyAccessors.kt | 2 ++ .../testData/keywords/PropertyAccessors2.kt | 2 ++ .../testData/keywords/PropertySetter.kt | 2 ++ .../testData/keywords/TopScope.kt | 2 ++ 40 files changed, 198 insertions(+), 11 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java index ae8d8158c65..7245d09df33 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java @@ -110,6 +110,16 @@ public class MutableClassDescriptor extends ClassDescriptorBase implements Class return false; } + @Override + public boolean isPlatform() { + return false; + } + + @Override + public boolean isImpl() { + return false; + } + @NotNull @Override public TypeConstructor getTypeConstructor() { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/lexer/KtTokens.java b/compiler/frontend/src/org/jetbrains/kotlin/lexer/KtTokens.java index 3545a7cc42c..31339a3b3c9 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/lexer/KtTokens.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/lexer/KtTokens.java @@ -189,6 +189,9 @@ public interface KtTokens { KtModifierKeywordToken COROUTINE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("coroutine"); KtModifierKeywordToken SUSPEND_KEYWORD = KtModifierKeywordToken.softKeywordModifier("suspend"); + KtModifierKeywordToken PLATFORM_KEYWORD = KtModifierKeywordToken.softKeywordModifier("platform"); + KtModifierKeywordToken IMPL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("impl"); + TokenSet KEYWORDS = TokenSet.create(PACKAGE_KEYWORD, AS_KEYWORD, TYPE_ALIAS_KEYWORD, CLASS_KEYWORD, INTERFACE_KEYWORD, THIS_KEYWORD, SUPER_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, FOR_KEYWORD, NULL_KEYWORD, @@ -209,7 +212,7 @@ public interface KtTokens { LATEINIT_KEYWORD, DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD, ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD, CONST_KEYWORD, OPERATOR_KEYWORD, INFIX_KEYWORD, - COROUTINE_KEYWORD, SUSPEND_KEYWORD + COROUTINE_KEYWORD, SUSPEND_KEYWORD, PLATFORM_KEYWORD, IMPL_KEYWORD ); /* @@ -223,7 +226,7 @@ public interface KtTokens { PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, REIFIED_KEYWORD, COMPANION_KEYWORD, SEALED_KEYWORD, LATEINIT_KEYWORD, DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD, ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD, - CONST_KEYWORD, OPERATOR_KEYWORD, INFIX_KEYWORD, COROUTINE_KEYWORD, SUSPEND_KEYWORD + CONST_KEYWORD, OPERATOR_KEYWORD, INFIX_KEYWORD, COROUTINE_KEYWORD, SUSPEND_KEYWORD, PLATFORM_KEYWORD, IMPL_KEYWORD }; TokenSet MODIFIER_KEYWORDS = TokenSet.create(MODIFIER_KEYWORDS_ARRAY); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt index ba059505352..91005fd9456 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt @@ -23,12 +23,12 @@ object KotlinStubVersions { // Though only kotlin declarations (no code in the bodies) are stubbed, please do increase this version // if you are not 100% sure it can be avoided. // Increasing this version will lead to reindexing of all kotlin source files on the first IDE startup with the new version. - const val SOURCE_STUB_VERSION = 119 + const val SOURCE_STUB_VERSION = 120 // Binary stub version should be increased if stub format (org.jetbrains.kotlin.psi.stubs.impl) is changed // or changes are made to the core stub building code (org.jetbrains.kotlin.idea.decompiler.stubBuilder). // Increasing this version will lead to reindexing of all binary files that are potentially kotlin binaries (including all class files). - private const val BINARY_STUB_VERSION = 54 + private const val BINARY_STUB_VERSION = 55 // Classfile stub version should be increased if changes are made to classfile stub building subsystem (org.jetbrains.kotlin.idea.decompiler.classFile) // Increasing this version will lead to reindexing of all classfiles. diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt index 74b2a085526..9e06e05cfd4 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt @@ -89,13 +89,17 @@ object ModifierCheckerCore { CROSSINLINE_KEYWORD to EnumSet.of(VALUE_PARAMETER), CONST_KEYWORD to EnumSet.of(MEMBER_PROPERTY, TOP_LEVEL_PROPERTY), OPERATOR_KEYWORD to EnumSet.of(FUNCTION), - INFIX_KEYWORD to EnumSet.of(FUNCTION) + INFIX_KEYWORD to EnumSet.of(FUNCTION), + PLATFORM_KEYWORD to EnumSet.of(FUNCTION, CLASS_ONLY, OBJECT, INTERFACE, INNER_CLASS, ENUM_CLASS, ANNOTATION_CLASS), // TODO + IMPL_KEYWORD to EnumSet.of(FUNCTION, CLASS_ONLY, OBJECT, INTERFACE, INNER_CLASS, ENUM_CLASS, ANNOTATION_CLASS) // TODO ) val featureDependencies = mapOf( COROUTINE_KEYWORD to LanguageFeature.Coroutines, SUSPEND_KEYWORD to LanguageFeature.Coroutines, - INLINE_KEYWORD to LanguageFeature.InlineProperties + INLINE_KEYWORD to LanguageFeature.InlineProperties, + PLATFORM_KEYWORD to LanguageFeature.MultiPlatformProjects, + IMPL_KEYWORD to LanguageFeature.MultiPlatformProjects ) val featureDependenciesTargets = mapOf( 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 35df06725a5..536f477ac20 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 @@ -88,6 +88,8 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes private final ClassKind kind; private final boolean isInner; private final boolean isData; + private final boolean isPlatform; + private final boolean isImpl; private final Annotations annotations; private final Annotations danglingAnnotations; @@ -155,6 +157,8 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes this.isInner = isInnerClass(modifierList) && !ModifiersChecker.isIllegalInner(this); this.isData = modifierList != null && modifierList.hasModifier(KtTokens.DATA_KEYWORD); + this.isPlatform = modifierList != null && modifierList.hasModifier(KtTokens.PLATFORM_KEYWORD); + this.isImpl = modifierList != null && modifierList.hasModifier(KtTokens.IMPL_KEYWORD); // Annotation entries are taken from both own annotations (if any) and object literal annotations (if any) List annotationEntries = new ArrayList(); @@ -491,6 +495,16 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes return isCompanionObject; } + @Override + public boolean isPlatform() { + return isPlatform; + } + + @Override + public boolean isImpl() { + return isImpl; + } + @NotNull @Override public Annotations getAnnotations() { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyTypeAliasDescriptor.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyTypeAliasDescriptor.kt index 538db9ac813..41f35b9171d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyTypeAliasDescriptor.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyTypeAliasDescriptor.kt @@ -19,8 +19,11 @@ package org.jetbrains.kotlin.resolve.lazy.descriptors import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.impl.AbstractTypeAliasDescriptor +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.psi.KtTypeAlias import org.jetbrains.kotlin.resolve.BindingTrace +import org.jetbrains.kotlin.resolve.source.getPsi import org.jetbrains.kotlin.storage.NotNullLazyValue import org.jetbrains.kotlin.storage.NullableLazyValue import org.jetbrains.kotlin.storage.StorageManager @@ -44,12 +47,15 @@ class LazyTypeAliasDescriptor( private lateinit var expandedTypeImpl: NotNullLazyValue private lateinit var defaultTypeImpl: NotNullLazyValue private lateinit var classDescriptorImpl: NullableLazyValue + private val isImpl = (source.getPsi() as? KtTypeAlias)?.hasModifier(KtTokens.IMPL_KEYWORD) == true override val underlyingType: SimpleType get() = underlyingTypeImpl() override val expandedType: SimpleType get() = expandedTypeImpl() override val classDescriptor: ClassDescriptor? get() = classDescriptorImpl() override fun getDefaultType(): SimpleType = defaultTypeImpl() + override fun isImpl(): Boolean = isImpl + fun initialize( declaredTypeParameters: List, lazyUnderlyingType: NotNullLazyValue, 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 79b8ebae4b4..6b00320b97d 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 @@ -138,6 +138,8 @@ open class KnownClassDescriptor( override fun isCompanionObject(): Boolean = false override fun isData(): Boolean = false override fun isInner(): Boolean = false + override fun isPlatform(): Boolean = false + override fun isImpl(): Boolean = false override fun accept(visitor: DeclarationDescriptorVisitor, data: D): R { return visitor.visitClassDescriptor(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltinFunctionDescriptor.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltinFunctionDescriptor.kt index cc2edde3fce..23954888006 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltinFunctionDescriptor.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltinFunctionDescriptor.kt @@ -54,6 +54,8 @@ abstract class IrBuiltinOperatorDescriptorBase(containingDeclaration: Declaratio override fun isOperator(): Boolean = false override fun isSuspend(): Boolean = false override fun isTailrec(): Boolean = false + override fun isPlatform(): Boolean = false + override fun isImpl(): Boolean = false override fun hasStableParameterNames(): Boolean = true override fun hasSynthesizedParameterNames(): Boolean = false 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 1ff9f5ac5fc..a1bc06cbb6d 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 @@ -95,6 +95,9 @@ class LazyJavaClassDescriptor( override fun isInner() = isInner override fun isData() = false + override fun isCompanionObject() = false + override fun isPlatform() = false + override fun isImpl() = false private val typeConstructor = c.storageManager.createLazyValue { LazyJavaClassTypeConstructor() } override fun getTypeConstructor(): TypeConstructor = typeConstructor() @@ -132,8 +135,6 @@ class LazyJavaClassDescriptor( override fun getFunctionTypeForSamInterface(): SimpleType? = functionTypeForSamInterface() - override fun isCompanionObject() = false - override fun toString() = "Lazy Java class ${this.fqNameUnsafe}" private inner class LazyJavaClassTypeConstructor : AbstractClassTypeConstructor(c.storageManager) { 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 a1a2e90458a..06fd32b01c5 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt @@ -102,6 +102,8 @@ class FunctionClassDescriptor( override fun isCompanionObject() = false override fun isInner() = false override fun isData() = false + override fun isPlatform() = false + override fun isImpl() = false override val annotations: Annotations get() = Annotations.EMPTY override fun getSource() = SourceElement.NO_SOURCE diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/MemberDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/MemberDescriptor.java index 215bda6f15b..2a5c174b41b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/MemberDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/MemberDescriptor.java @@ -25,4 +25,8 @@ public interface MemberDescriptor extends DeclarationDescriptorNonRoot, Declarat @Override @NotNull Visibility getVisibility(); + + boolean isPlatform(); + + boolean isImpl(); } 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 cdf855d8a99..ee091062c61 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractTypeAliasDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractTypeAliasDescriptor.kt @@ -65,6 +65,10 @@ abstract class AbstractTypeAliasDescriptor( override fun getVisibility() = visibilityImpl + override fun isPlatform(): Boolean = false + + override fun isImpl(): Boolean = false + override fun getTypeConstructor(): TypeConstructor = typeConstructor 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 97a2e15529e..4e7cd829b40 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorImpl.java @@ -113,6 +113,16 @@ public class ClassDescriptorImpl extends ClassDescriptorBase { return false; } + @Override + public boolean isPlatform() { + return false; + } + + @Override + public boolean isImpl() { + return false; + } + @Override public ClassConstructorDescriptor getUnsubstitutedPrimaryConstructor() { return primaryConstructor; 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 f91e4e1f85b..0fd2b125948 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java @@ -154,6 +154,16 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { return false; } + @Override + public boolean isPlatform() { + return false; + } + + @Override + public boolean isImpl() { + return false; + } + @Nullable @Override public ClassConstructorDescriptor getUnsubstitutedPrimaryConstructor() { diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java index f15e5d87149..421df1a0d1a 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java @@ -43,6 +43,8 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo private boolean isExternal = false; private boolean isInline = false; private boolean isTailrec = false; + private boolean isPlatform = false; + private boolean isImpl = false; // Difference between these hidden kinds: // 1. isHiddenToOvercomeSignatureClash prohibit calling such functions even in super-call context // 2. isHiddenForResolutionEverywhereBesideSupercalls propagates to it's overrides descriptors while isHiddenToOvercomeSignatureClash does not @@ -134,6 +136,14 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo this.isTailrec = isTailrec; } + public void setPlatform(boolean isPlatform) { + this.isPlatform = isPlatform; + } + + public void setImpl(boolean isImpl) { + this.isImpl = isImpl; + } + public void setHiddenToOvercomeSignatureClash(boolean hiddenToOvercomeSignatureClash) { isHiddenToOvercomeSignatureClash = hiddenToOvercomeSignatureClash; } @@ -247,6 +257,16 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo return isSuspend; } + @Override + public boolean isPlatform() { + return isPlatform; + } + + @Override + public boolean isImpl() { + return isImpl; + } + @Override public V getUserData(UserDataKey key) { if (userDataMap == null) return null; @@ -631,6 +651,8 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo substitutedDescriptor.setInline(isInline); substitutedDescriptor.setTailrec(isTailrec); substitutedDescriptor.setSuspend(isSuspend); + substitutedDescriptor.setPlatform(isPlatform); + substitutedDescriptor.setImpl(isImpl); substitutedDescriptor.setHasStableParameterNames(hasStableParameterNames); substitutedDescriptor.setHiddenToOvercomeSignatureClash(configuration.isHiddenToOvercomeSignatureClash); substitutedDescriptor.setHiddenForResolutionEverywhereBesideSupercalls(configuration.isHiddenForResolutionEverywhereBesideSupercalls); 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 5fc99c2410a..54697a54cdc 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazySubstitutingClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazySubstitutingClassDescriptor.java @@ -221,6 +221,16 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor { return original.isCompanionObject(); } + @Override + public boolean isPlatform() { + return original.isPlatform(); + } + + @Override + public boolean isImpl() { + return original.isImpl(); + } + @Override public R accept(DeclarationDescriptorVisitor visitor, D data) { return visitor.visitClassDescriptor(this, data); diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyAccessorDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyAccessorDescriptorImpl.java index 68655362ac0..55feac40908 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyAccessorDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyAccessorDescriptorImpl.java @@ -102,6 +102,16 @@ public abstract class PropertyAccessorDescriptorImpl extends DeclarationDescript return false; } + @Override + public boolean isPlatform() { + return false; + } + + @Override + public boolean isImpl() { + return false; + } + @NotNull @Override public FunctionDescriptor substitute(@NotNull TypeSubstitutor substitutor) { 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 435bb328f3d..9f0478622ed 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java @@ -355,6 +355,18 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp return kind; } + @Override + public boolean isPlatform() { + // TODO + return false; + } + + @Override + public boolean isImpl() { + // TODO + return false; + } + @Override public void setOverriddenDescriptors(@NotNull Collection overriddenDescriptors) { //noinspection unchecked diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt index c3b70154b93..f26365b45f6 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt @@ -263,8 +263,9 @@ enum class DescriptorRendererModifier(val includeByDefault: Boolean) { ANNOTATIONS(false), INNER(true), MEMBER_KIND(true), - DATA(true) - + DATA(true), + PLATFORM(true), + IMPL(true), ; companion object { diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt index c9f7f66ed79..1cb308aa94c 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt @@ -461,6 +461,20 @@ internal class DescriptorRendererImpl( builder.append(renderKeyword(keyword)).append(" ") } + private fun renderPlatform(isPlatform: Boolean, builder: StringBuilder) { + if (DescriptorRendererModifier.PLATFORM !in modifiers) return + if (isPlatform) { + builder.append(renderKeyword("platform")).append(" ") + } + } + + private fun renderImpl(isImpl: Boolean, builder: StringBuilder) { + if (DescriptorRendererModifier.IMPL !in modifiers) return + if (isImpl) { + builder.append(renderKeyword("impl")).append(" ") + } + } + private fun renderInner(isInner: Boolean, builder: StringBuilder) { if (DescriptorRendererModifier.INNER !in modifiers) return if (isInner) { @@ -526,6 +540,12 @@ internal class DescriptorRendererImpl( if (functionDescriptor.isSuspend) { builder.append("suspend ") } + if (functionDescriptor.isPlatform) { + builder.append("platform ") + } + if (functionDescriptor.isImpl) { + builder.append("impl ") + } } override fun render(declarationDescriptor: DeclarationDescriptor): String { @@ -882,6 +902,8 @@ internal class DescriptorRendererImpl( klass.kind.isSingleton && klass.modality == Modality.FINAL)) { renderModality(klass.modality, builder) } + renderPlatform(klass.isPlatform, builder) + renderImpl(klass.isImpl, builder) renderInner(klass.isInner, builder) renderData(klass.isData, builder) renderClassKindPrefix(klass, builder) 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 08596d0863b..556e1bb84d5 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/NotFoundClasses.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/NotFoundClasses.kt @@ -100,6 +100,8 @@ class NotFoundClasses(private val storageManager: StorageManager, private val mo override fun isCompanionObject() = false override fun isData() = false + override fun isPlatform() = false + override fun isImpl() = 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 80526c5aeb8..562a9e2ca3b 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 @@ -95,6 +95,10 @@ class DeserializedClassDescriptor( override fun isData() = Flags.IS_DATA.get(classProto.flags) + override fun isPlatform() = false + + override fun isImpl() = false + override fun getUnsubstitutedMemberScope(): MemberScope = memberScope override fun getStaticScope() = staticScope diff --git a/idea/idea-completion/testData/keywords/AfterClassProperty.kt b/idea/idea-completion/testData/keywords/AfterClassProperty.kt index 9f499989993..869eee7d84f 100644 --- a/idea/idea-completion/testData/keywords/AfterClassProperty.kt +++ b/idea/idea-completion/testData/keywords/AfterClassProperty.kt @@ -42,4 +42,6 @@ class MouseMovedEventArgs // EXIST: const // EXIST: suspend // EXIST: typealias +// EXIST: platform +// EXIST: impl // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/AfterClasses.kt b/idea/idea-completion/testData/keywords/AfterClasses.kt index 65c95f23820..e999c984ecc 100644 --- a/idea/idea-completion/testData/keywords/AfterClasses.kt +++ b/idea/idea-completion/testData/keywords/AfterClasses.kt @@ -36,4 +36,6 @@ class B { // EXIST: const // EXIST: suspend // EXIST: typealias +// EXIST: platform +// EXIST: impl // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/AfterFuns.kt b/idea/idea-completion/testData/keywords/AfterFuns.kt index a9ba0bfbf51..2931265247e 100644 --- a/idea/idea-completion/testData/keywords/AfterFuns.kt +++ b/idea/idea-completion/testData/keywords/AfterFuns.kt @@ -41,4 +41,6 @@ class A { // EXIST: const // EXIST: suspend // EXIST: typealias +// EXIST: platform +// EXIST: impl // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt b/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt index 430515c65c1..ec62637d5a6 100644 --- a/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt +++ b/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt @@ -40,4 +40,6 @@ var a : Int // EXIST: const // EXIST: suspend // EXIST: typealias +// EXIST: platform +// EXIST: impl // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/InAnnotationClassScope.kt b/idea/idea-completion/testData/keywords/InAnnotationClassScope.kt index 1bdb19250e7..ae951c0dac5 100644 --- a/idea/idea-completion/testData/keywords/InAnnotationClassScope.kt +++ b/idea/idea-completion/testData/keywords/InAnnotationClassScope.kt @@ -27,4 +27,6 @@ annotation class Test { // EXIST: const // EXIST: suspend // EXIST: typealias +// EXIST: platform +// EXIST: impl // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/InClassBeforeFun.kt b/idea/idea-completion/testData/keywords/InClassBeforeFun.kt index 085bb80d564..22c472d250a 100644 --- a/idea/idea-completion/testData/keywords/InClassBeforeFun.kt +++ b/idea/idea-completion/testData/keywords/InClassBeforeFun.kt @@ -39,4 +39,6 @@ public class Test { // EXIST: const // EXIST: suspend // EXIST: typealias +// EXIST: platform +// EXIST: impl // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/InClassScope.kt b/idea/idea-completion/testData/keywords/InClassScope.kt index bc8a7ebbc13..f3171fd58e1 100644 --- a/idea/idea-completion/testData/keywords/InClassScope.kt +++ b/idea/idea-completion/testData/keywords/InClassScope.kt @@ -33,4 +33,6 @@ class TestClass { // EXIST: const // EXIST: suspend // EXIST: typealias +// EXIST: platform +// EXIST: impl // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/InEnumScope2.kt b/idea/idea-completion/testData/keywords/InEnumScope2.kt index 4f80b7af3ac..ff3fa657e33 100644 --- a/idea/idea-completion/testData/keywords/InEnumScope2.kt +++ b/idea/idea-completion/testData/keywords/InEnumScope2.kt @@ -28,6 +28,8 @@ enum class Test { // EXIST: suspend // EXIST: fun // EXIST: typealias +// EXIST: platform +// EXIST: impl /* TODO: items below are not valid here */ // EXIST: class diff --git a/idea/idea-completion/testData/keywords/InInterfaceScope.kt b/idea/idea-completion/testData/keywords/InInterfaceScope.kt index 67e3548e139..fbcd3b4f277 100644 --- a/idea/idea-completion/testData/keywords/InInterfaceScope.kt +++ b/idea/idea-completion/testData/keywords/InInterfaceScope.kt @@ -29,4 +29,6 @@ interface Test { // EXIST: const // EXIST: suspend // EXIST: typealias +// EXIST: platform +// EXIST: impl // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/InModifierListInsideClass.kt b/idea/idea-completion/testData/keywords/InModifierListInsideClass.kt index e4437516cb4..3b04531981a 100644 --- a/idea/idea-completion/testData/keywords/InModifierListInsideClass.kt +++ b/idea/idea-completion/testData/keywords/InModifierListInsideClass.kt @@ -3,5 +3,5 @@ open class Foo { p val foo = 1 } -// EXIST: private, public, protected +// EXIST: private, public, protected, platform // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/InObjectScope.kt b/idea/idea-completion/testData/keywords/InObjectScope.kt index 4043d22ab1b..260299b7a22 100644 --- a/idea/idea-completion/testData/keywords/InObjectScope.kt +++ b/idea/idea-completion/testData/keywords/InObjectScope.kt @@ -30,4 +30,6 @@ object Test { // EXIST: const // EXIST: suspend // EXIST: typealias +// EXIST: platform +// EXIST: impl // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/InPrimaryConstructorParametersList.kt b/idea/idea-completion/testData/keywords/InPrimaryConstructorParametersList.kt index 0f5c3cfe189..42109538110 100644 --- a/idea/idea-completion/testData/keywords/InPrimaryConstructorParametersList.kt +++ b/idea/idea-completion/testData/keywords/InPrimaryConstructorParametersList.kt @@ -15,6 +15,7 @@ class TestSample() // EXIST: protected // EXIST: internal // EXIST: coroutine +// EXIST: impl /* TODO: keywords below should not be here*/ // EXIST: abstract // EXIST: const diff --git a/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt b/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt index 3119a0b3260..e616b6f631a 100644 --- a/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt +++ b/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt @@ -27,4 +27,6 @@ package Test // EXIST: const // EXIST: suspend // EXIST: typealias +// EXIST: platform +// EXIST: impl // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/PrefixMatcher.kt b/idea/idea-completion/testData/keywords/PrefixMatcher.kt index a9c284702b1..d28f55cb408 100644 --- a/idea/idea-completion/testData/keywords/PrefixMatcher.kt +++ b/idea/idea-completion/testData/keywords/PrefixMatcher.kt @@ -5,4 +5,5 @@ p // EXIST: package // EXIST: private // EXIST: public +// EXIST: platform // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/PropertyAccessors.kt b/idea/idea-completion/testData/keywords/PropertyAccessors.kt index 9fae40aceb9..c967f84c986 100644 --- a/idea/idea-completion/testData/keywords/PropertyAccessors.kt +++ b/idea/idea-completion/testData/keywords/PropertyAccessors.kt @@ -41,4 +41,6 @@ class Some { // EXIST: const // EXIST: suspend // EXIST: typealias +// EXIST: platform +// EXIST: impl // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/PropertyAccessors2.kt b/idea/idea-completion/testData/keywords/PropertyAccessors2.kt index ae715ad0b43..8912263137e 100644 --- a/idea/idea-completion/testData/keywords/PropertyAccessors2.kt +++ b/idea/idea-completion/testData/keywords/PropertyAccessors2.kt @@ -41,4 +41,6 @@ class Some { // EXIST: const // EXIST: suspend // EXIST: typealias +// EXIST: platform +// EXIST: impl // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/PropertySetter.kt b/idea/idea-completion/testData/keywords/PropertySetter.kt index a7fbbff4518..af78bbc463f 100644 --- a/idea/idea-completion/testData/keywords/PropertySetter.kt +++ b/idea/idea-completion/testData/keywords/PropertySetter.kt @@ -39,4 +39,6 @@ class Some { // EXIST: const // EXIST: suspend // EXIST: typealias +// EXIST: platform +// EXIST: impl // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/TopScope.kt b/idea/idea-completion/testData/keywords/TopScope.kt index 0b859db8025..f235291323d 100644 --- a/idea/idea-completion/testData/keywords/TopScope.kt +++ b/idea/idea-completion/testData/keywords/TopScope.kt @@ -26,4 +26,6 @@ // EXIST: const // EXIST: suspend // EXIST: typealias +// EXIST: platform +// EXIST: impl // NOTHING_ELSE