Refactoring: CallableMemberDescriptor.isOverridable
This commit is contained in:
+2
-5
@@ -16,10 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.resolve.jvm.checkers
|
package org.jetbrains.kotlin.resolve.jvm.checkers
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
|
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.fileClasses.isInsideJvmMultifileClassFile
|
import org.jetbrains.kotlin.fileClasses.isInsideJvmMultifileClassFile
|
||||||
@@ -58,7 +55,7 @@ class JvmFieldApplicabilityChecker : DeclarationChecker {
|
|||||||
|
|
||||||
val problem = when {
|
val problem = when {
|
||||||
descriptor !is PropertyDescriptor -> NOT_A_PROPERTY
|
descriptor !is PropertyDescriptor -> NOT_A_PROPERTY
|
||||||
descriptor.modality.isOverridable -> NOT_FINAL
|
descriptor.isOverridable -> NOT_FINAL
|
||||||
Visibilities.isPrivate(descriptor.visibility) -> PRIVATE
|
Visibilities.isPrivate(descriptor.visibility) -> PRIVATE
|
||||||
!descriptor.hasBackingField(bindingContext) -> NO_BACKING_FIELD
|
!descriptor.hasBackingField(bindingContext) -> NO_BACKING_FIELD
|
||||||
descriptor.hasCustomAccessor() -> CUSTOM_ACCESSOR
|
descriptor.hasCustomAccessor() -> CUSTOM_ACCESSOR
|
||||||
|
|||||||
+1
-1
@@ -115,7 +115,7 @@ public class JvmNameAnnotationChecker : DeclarationChecker {
|
|||||||
|
|
||||||
if (descriptor is CallableMemberDescriptor) {
|
if (descriptor is CallableMemberDescriptor) {
|
||||||
val callableMemberDescriptor = descriptor
|
val callableMemberDescriptor = descriptor
|
||||||
if (DescriptorUtils.isOverride(callableMemberDescriptor) || callableMemberDescriptor.modality.isOverridable) {
|
if (DescriptorUtils.isOverride(callableMemberDescriptor) || callableMemberDescriptor.isOverridable) {
|
||||||
diagnosticHolder.report(ErrorsJvm.INAPPLICABLE_JVM_NAME.on(annotationEntry))
|
diagnosticHolder.report(ErrorsJvm.INAPPLICABLE_JVM_NAME.on(annotationEntry))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -612,7 +612,7 @@ public class KotlinFlowInformationProvider {
|
|||||||
FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor;
|
FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor;
|
||||||
String functionName = functionDescriptor.getName().asString();
|
String functionName = functionDescriptor.getName().asString();
|
||||||
if (isMain
|
if (isMain
|
||||||
|| functionDescriptor.getModality().isOverridable()
|
|| ModalityKt.isOverridable(functionDescriptor)
|
||||||
|| !functionDescriptor.getOverriddenDescriptors().isEmpty()
|
|| !functionDescriptor.getOverriddenDescriptors().isEmpty()
|
||||||
|| "getValue".equals(functionName) || "setValue".equals(functionName)
|
|| "getValue".equals(functionName) || "setValue".equals(functionName)
|
||||||
|| "propertyDelegated".equals(functionName)
|
|| "propertyDelegated".equals(functionName)
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ class DelegationResolver<T : CallableMemberDescriptor> private constructor(
|
|||||||
memberExtractor.getMembersByType(it)
|
memberExtractor.getMembersByType(it)
|
||||||
} ?: emptyList<CallableMemberDescriptor>()
|
} ?: emptyList<CallableMemberDescriptor>()
|
||||||
return memberExtractor.getMembersByType(interfaceType).filter { descriptor ->
|
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) {
|
for (CallableMemberDescriptor overridden : overriddenDescriptors) {
|
||||||
if (overridden == null) continue;
|
if (overridden == null) continue;
|
||||||
|
|
||||||
if (!overridden.getModality().isOverridable()) {
|
if (!ModalityKt.isOverridable(overridden)) {
|
||||||
reportError.overridingFinalMember(memberDescriptor, overridden);
|
reportError.overridingFinalMember(memberDescriptor, overridden);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -447,10 +447,10 @@ public class DataFlowValueFactory {
|
|||||||
DeclarationDescriptor containingDeclaration = propertyDescriptor.getContainingDeclaration();
|
DeclarationDescriptor containingDeclaration = propertyDescriptor.getContainingDeclaration();
|
||||||
if (containingDeclaration instanceof ClassDescriptor) {
|
if (containingDeclaration instanceof ClassDescriptor) {
|
||||||
ClassDescriptor classDescriptor = (ClassDescriptor) containingDeclaration;
|
ClassDescriptor classDescriptor = (ClassDescriptor) containingDeclaration;
|
||||||
if (classDescriptor.getModality().isOverridable() && propertyDescriptor.getModality().isOverridable()) return false;
|
if (classDescriptor.getModality().isOverridable() && ModalityKt.isOverridable(propertyDescriptor)) return false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (propertyDescriptor.getModality().isOverridable()) {
|
if (ModalityKt.isOverridable(propertyDescriptor)) {
|
||||||
throw new IllegalStateException("Property outside a class must not be overridable: " + propertyDescriptor.getName());
|
throw new IllegalStateException("Property outside a class must not be overridable: " + propertyDescriptor.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -531,7 +531,7 @@ private class ConstantExpressionEvaluatorVisitor(
|
|||||||
if (resolvedCall != null) {
|
if (resolvedCall != null) {
|
||||||
val callableDescriptor = resolvedCall.resultingDescriptor
|
val callableDescriptor = resolvedCall.resultingDescriptor
|
||||||
if (callableDescriptor is VariableDescriptor) {
|
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
|
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
|
val name = functionDescriptor.name
|
||||||
return containingClass.defaultType.supertypes()
|
return containingClass.defaultType.supertypes()
|
||||||
.flatMap { supertype -> supertype.memberScope.getContributedFunctions(name, NoLookupLocation.FROM_IDE) }
|
.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.DELEGATION
|
||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.FAKE_OVERRIDE
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.FAKE_OVERRIDE
|
||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED
|
||||||
|
import org.jetbrains.kotlin.descriptors.isOverridable
|
||||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||||
import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil
|
import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil
|
||||||
@@ -110,7 +111,7 @@ public class MakeOverriddenMemberOpenFix(declaration: KtDeclaration) : KotlinQui
|
|||||||
|
|
||||||
private fun retainNonOverridableMembers(
|
private fun retainNonOverridableMembers(
|
||||||
callableMemberDescriptors: Collection<CallableMemberDescriptor>): Collection<CallableMemberDescriptor> {
|
callableMemberDescriptors: Collection<CallableMemberDescriptor>): Collection<CallableMemberDescriptor> {
|
||||||
return callableMemberDescriptors.filter { !it.modality.isOverridable }
|
return callableMemberDescriptors.filter { !it.isOverridable }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
|
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ public final class JsDescriptorUtils {
|
|||||||
return !isExtension(propertyDescriptor) &&
|
return !isExtension(propertyDescriptor) &&
|
||||||
isDefaultAccessor(propertyDescriptor.getGetter()) &&
|
isDefaultAccessor(propertyDescriptor.getGetter()) &&
|
||||||
isDefaultAccessor(propertyDescriptor.getSetter()) &&
|
isDefaultAccessor(propertyDescriptor.getSetter()) &&
|
||||||
!propertyDescriptor.getModality().isOverridable();
|
!ModalityKt.isOverridable(propertyDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isBuiltin(@NotNull DeclarationDescriptor descriptor) {
|
public static boolean isBuiltin(@NotNull DeclarationDescriptor descriptor) {
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public final class TranslationUtils {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private static JsPropertyInitializer translateExtensionFunctionAsEcma5DataDescriptor(@NotNull JsFunction function,
|
private static JsPropertyInitializer translateExtensionFunctionAsEcma5DataDescriptor(@NotNull JsFunction function,
|
||||||
@NotNull FunctionDescriptor descriptor, @NotNull TranslationContext context) {
|
@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);
|
return new JsPropertyInitializer(context.getNameForDescriptor(descriptor).makeRef(), meta);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user