diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmFieldApplicabilityChecker.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmFieldApplicabilityChecker.kt index 4a85fc80d59..caa749c8a7a 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmFieldApplicabilityChecker.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmFieldApplicabilityChecker.kt @@ -16,10 +16,7 @@ package org.jetbrains.kotlin.resolve.jvm.checkers -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.descriptors.PropertyDescriptor -import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.diagnostics.DiagnosticSink import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil import org.jetbrains.kotlin.fileClasses.isInsideJvmMultifileClassFile @@ -58,7 +55,7 @@ class JvmFieldApplicabilityChecker : DeclarationChecker { val problem = when { descriptor !is PropertyDescriptor -> NOT_A_PROPERTY - descriptor.modality.isOverridable -> NOT_FINAL + descriptor.isOverridable -> NOT_FINAL Visibilities.isPrivate(descriptor.visibility) -> PRIVATE !descriptor.hasBackingField(bindingContext) -> NO_BACKING_FIELD descriptor.hasCustomAccessor() -> CUSTOM_ACCESSOR diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt index 8f7a27836e8..e904ca7858b 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt @@ -115,7 +115,7 @@ public class JvmNameAnnotationChecker : DeclarationChecker { if (descriptor is CallableMemberDescriptor) { val callableMemberDescriptor = descriptor - if (DescriptorUtils.isOverride(callableMemberDescriptor) || callableMemberDescriptor.modality.isOverridable) { + if (DescriptorUtils.isOverride(callableMemberDescriptor) || callableMemberDescriptor.isOverridable) { diagnosticHolder.report(ErrorsJvm.INAPPLICABLE_JVM_NAME.on(annotationEntry)) } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/KotlinFlowInformationProvider.java b/compiler/frontend/src/org/jetbrains/kotlin/cfg/KotlinFlowInformationProvider.java index 4fbcb9310de..356b71c927e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/KotlinFlowInformationProvider.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/KotlinFlowInformationProvider.java @@ -612,7 +612,7 @@ public class KotlinFlowInformationProvider { FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor; String functionName = functionDescriptor.getName().asString(); if (isMain - || functionDescriptor.getModality().isOverridable() + || ModalityKt.isOverridable(functionDescriptor) || !functionDescriptor.getOverriddenDescriptors().isEmpty() || "getValue".equals(functionName) || "setValue".equals(functionName) || "propertyDelegated".equals(functionName) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegationResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegationResolver.kt index 67b0f23403a..4966553cbb1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegationResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegationResolver.kt @@ -84,7 +84,7 @@ class DelegationResolver private constructor( memberExtractor.getMembersByType(it) } ?: emptyList() return memberExtractor.getMembersByType(interfaceType).filter { descriptor -> - descriptor.modality.isOverridable && !classSupertypeMembers.any { isOverridableBy(it, descriptor) } + descriptor.isOverridable && !classSupertypeMembers.any { isOverridableBy(it, descriptor) } } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java index a12795889a4..2ff4533fbc2 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java @@ -884,7 +884,7 @@ public class OverrideResolver { for (CallableMemberDescriptor overridden : overriddenDescriptors) { if (overridden == null) continue; - if (!overridden.getModality().isOverridable()) { + if (!ModalityKt.isOverridable(overridden)) { reportError.overridingFinalMember(memberDescriptor, overridden); } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueFactory.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueFactory.java index bb961621551..d7081559ac8 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueFactory.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueFactory.java @@ -447,10 +447,10 @@ public class DataFlowValueFactory { DeclarationDescriptor containingDeclaration = propertyDescriptor.getContainingDeclaration(); if (containingDeclaration instanceof ClassDescriptor) { ClassDescriptor classDescriptor = (ClassDescriptor) containingDeclaration; - if (classDescriptor.getModality().isOverridable() && propertyDescriptor.getModality().isOverridable()) return false; + if (classDescriptor.getModality().isOverridable() && ModalityKt.isOverridable(propertyDescriptor)) return false; } else { - if (propertyDescriptor.getModality().isOverridable()) { + if (ModalityKt.isOverridable(propertyDescriptor)) { throw new IllegalStateException("Property outside a class must not be overridable: " + propertyDescriptor.getName()); } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt index a06c890c11d..a90fefc57c6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt @@ -531,7 +531,7 @@ private class ConstantExpressionEvaluatorVisitor( if (resolvedCall != null) { val callableDescriptor = resolvedCall.resultingDescriptor if (callableDescriptor is VariableDescriptor) { - if (callableDescriptor is PropertyDescriptor && callableDescriptor.modality.isOverridable) return null + if (callableDescriptor is PropertyDescriptor && callableDescriptor.isOverridable) return null val variableInitializer = callableDescriptor.compileTimeInitializer ?: return null diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Modality.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/Modality.kt index 711034d9806..ab3fad4b6b7 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Modality.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/Modality.kt @@ -35,3 +35,7 @@ enum class Modality private constructor(val isOverridable: Boolean) { } } } + +val CallableMemberDescriptor.isOverridable: Boolean + get() = modality != Modality.FINAL + diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt index a981bcf10b1..6bf7d31cd3f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt @@ -180,7 +180,7 @@ class ChangeMemberFunctionSignatureFix private constructor( val name = functionDescriptor.name return containingClass.defaultType.supertypes() .flatMap { supertype -> supertype.memberScope.getContributedFunctions(name, NoLookupLocation.FROM_IDE) } - .filter { it.kind.isReal && it.modality.isOverridable } + .filter { it.kind.isReal && it.isOverridable } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt index b20bf53e569..e22b13c809b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DECLARATIO import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DELEGATION import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.FAKE_OVERRIDE import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED +import org.jetbrains.kotlin.descriptors.isOverridable import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil @@ -110,7 +111,7 @@ public class MakeOverriddenMemberOpenFix(declaration: KtDeclaration) : KotlinQui private fun retainNonOverridableMembers( callableMemberDescriptors: Collection): Collection { - return callableMemberDescriptors.filter { !it.modality.isOverridable } + return callableMemberDescriptors.filter { !it.isOverridable } } override fun createAction(diagnostic: Diagnostic): IntentionAction? { diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java index f141643a3a3..448c6d4667f 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java @@ -151,7 +151,7 @@ public final class JsDescriptorUtils { return !isExtension(propertyDescriptor) && isDefaultAccessor(propertyDescriptor.getGetter()) && isDefaultAccessor(propertyDescriptor.getSetter()) && - !propertyDescriptor.getModality().isOverridable(); + !ModalityKt.isOverridable(propertyDescriptor); } public static boolean isBuiltin(@NotNull DeclarationDescriptor descriptor) { diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java index 521285470a9..f2d2979e760 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java @@ -67,7 +67,7 @@ public final class TranslationUtils { @NotNull private static JsPropertyInitializer translateExtensionFunctionAsEcma5DataDescriptor(@NotNull JsFunction function, @NotNull FunctionDescriptor descriptor, @NotNull TranslationContext context) { - JsObjectLiteral meta = createDataDescriptor(function, descriptor.getModality().isOverridable(), false); + JsObjectLiteral meta = createDataDescriptor(function, ModalityKt.isOverridable(descriptor), false); return new JsPropertyInitializer(context.getNameForDescriptor(descriptor).makeRef(), meta); }