Refactoring: CallableMemberDescriptor.isOverridable

This commit is contained in:
Mikhail Glukhikh
2015-12-08 17:55:21 +03:00
parent c73f01927a
commit fb406bfc24
12 changed files with 18 additions and 16 deletions
@@ -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
@@ -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))
}
}
@@ -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)
@@ -84,7 +84,7 @@ class DelegationResolver<T : CallableMemberDescriptor> private constructor(
memberExtractor.getMembersByType(it)
} ?: emptyList<CallableMemberDescriptor>()
return memberExtractor.getMembersByType(interfaceType).filter { descriptor ->
descriptor.modality.isOverridable && !classSupertypeMembers.any { isOverridableBy(it, descriptor) }
descriptor.isOverridable && !classSupertypeMembers.any { isOverridableBy(it, descriptor) }
}
}
@@ -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);
}
@@ -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());
}
}
@@ -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
@@ -35,3 +35,7 @@ enum class Modality private constructor(val isOverridable: Boolean) {
}
}
}
val CallableMemberDescriptor.isOverridable: Boolean
get() = modality != Modality.FINAL
@@ -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 }
}
}
@@ -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<CallableMemberDescriptor>): Collection<CallableMemberDescriptor> {
return callableMemberDescriptors.filter { !it.modality.isOverridable }
return callableMemberDescriptors.filter { !it.isOverridable }
}
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
@@ -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) {
@@ -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);
}