Replace 'addOverriddenDescriptor' with 'setOverriddenDescriptors'
It helps to get rid of redundant SmartSets (e.g. for top-level functions)
This commit is contained in:
@@ -195,7 +195,7 @@ public class ClosureCodegen extends MemberCodegen<KtElement> {
|
||||
erasedInterfaceFunction.getValueParameters(), erasedInterfaceFunction.getReturnType(),
|
||||
Modality.OPEN, erasedInterfaceFunction.getVisibility());
|
||||
|
||||
descriptorForBridges.addOverriddenDescriptor(erasedInterfaceFunction);
|
||||
DescriptorUtilsKt.setSingleOverridden(descriptorForBridges, erasedInterfaceFunction);
|
||||
functionCodegen.generateBridges(descriptorForBridges);
|
||||
}
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.psi.KtFile;
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt;
|
||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKt;
|
||||
import org.jetbrains.kotlin.types.KotlinType;
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions;
|
||||
@@ -165,7 +166,7 @@ public class SamWrapperCodegen {
|
||||
originalInterfaceErased.getValueParameters(), originalInterfaceErased.getReturnType(),
|
||||
Modality.OPEN, originalInterfaceErased.getVisibility());
|
||||
|
||||
descriptorForBridges.addOverriddenDescriptor(originalInterfaceErased);
|
||||
DescriptorUtilsKt.setSingleOverridden(descriptorForBridges, originalInterfaceErased);
|
||||
codegen.generateBridges(descriptorForBridges);
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl
|
||||
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.setSingleOverridden
|
||||
import org.jetbrains.kotlin.types.TypeSubstitutor
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
import java.util.*
|
||||
@@ -48,7 +49,7 @@ fun createSynthesizedInvokes(functions: Collection<FunctionDescriptor>): Collect
|
||||
CallableMemberDescriptor.Kind.FAKE_OVERRIDE,
|
||||
true
|
||||
)
|
||||
fakeOverride.addOverriddenDescriptor(synthesizedSuperFun)
|
||||
fakeOverride.setSingleOverridden(synthesizedSuperFun)
|
||||
fakeOverride
|
||||
}
|
||||
|
||||
|
||||
+1
-3
@@ -97,9 +97,7 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja
|
||||
enhanced.setCompileTimeInitializer(compileTimeInitializer);
|
||||
}
|
||||
|
||||
for (PropertyDescriptor descriptor : getOverriddenDescriptors()) {
|
||||
enhanced.addOverriddenDescriptor(descriptor);
|
||||
}
|
||||
enhanced.setOverriddenDescriptors(getOverriddenDescriptors());
|
||||
|
||||
enhanced.setType(
|
||||
enhancedReturnType,
|
||||
|
||||
@@ -29,7 +29,7 @@ public interface CallableMemberDescriptor extends CallableDescriptor, MemberDesc
|
||||
@Override
|
||||
CallableMemberDescriptor getOriginal();
|
||||
|
||||
void addOverriddenDescriptor(@NotNull CallableMemberDescriptor overridden);
|
||||
void setOverriddenDescriptors(@NotNull Collection<? extends CallableMemberDescriptor> overriddenDescriptors);
|
||||
|
||||
enum Kind {
|
||||
DECLARATION,
|
||||
|
||||
+2
-2
@@ -123,8 +123,8 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addOverriddenDescriptor(@NotNull CallableMemberDescriptor overriddenFunction) {
|
||||
throw new UnsupportedOperationException("Constructors cannot override anything");
|
||||
public void setOverriddenDescriptors(@NotNull Collection<? extends CallableMemberDescriptor> overriddenDescriptors) {
|
||||
assert overriddenDescriptors.isEmpty() : "Constructors cannot override anything";
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+17
-17
@@ -29,10 +29,7 @@ import org.jetbrains.kotlin.types.Variance;
|
||||
import org.jetbrains.kotlin.utils.CollectionsKt;
|
||||
import org.jetbrains.kotlin.utils.SmartSet;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRootImpl implements FunctionDescriptor {
|
||||
private List<TypeParameterDescriptor> typeParameters;
|
||||
@@ -50,7 +47,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
private boolean isHidden = false;
|
||||
private boolean hasStableParameterNames = true;
|
||||
private boolean hasSynthesizedParameterNames = false;
|
||||
private final Set<FunctionDescriptor> overriddenFunctions = SmartSet.create();
|
||||
private Collection<? extends FunctionDescriptor> overriddenFunctions = null;
|
||||
private final FunctionDescriptor original;
|
||||
private final Kind kind;
|
||||
@Nullable
|
||||
@@ -165,7 +162,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<? extends FunctionDescriptor> getOverriddenDescriptors() {
|
||||
return overriddenFunctions;
|
||||
return overriddenFunctions != null ? overriddenFunctions : Collections.<FunctionDescriptor>emptyList();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -184,7 +181,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
public boolean isOperator() {
|
||||
if (isOperator) return true;
|
||||
|
||||
for (FunctionDescriptor descriptor : overriddenFunctions) {
|
||||
for (FunctionDescriptor descriptor : getOverriddenDescriptors()) {
|
||||
if (descriptor.isOperator()) return true;
|
||||
}
|
||||
|
||||
@@ -195,7 +192,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
public boolean isInfix() {
|
||||
if (isInfix) return true;
|
||||
|
||||
for (FunctionDescriptor descriptor : overriddenFunctions) {
|
||||
for (FunctionDescriptor descriptor : getOverriddenDescriptors()) {
|
||||
if (descriptor.isInfix()) return true;
|
||||
}
|
||||
|
||||
@@ -223,8 +220,9 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addOverriddenDescriptor(@NotNull CallableMemberDescriptor overriddenFunction) {
|
||||
overriddenFunctions.add((FunctionDescriptor) overriddenFunction);
|
||||
public void setOverriddenDescriptors(@NotNull Collection<? extends CallableMemberDescriptor> overriddenDescriptors) {
|
||||
//noinspection unchecked
|
||||
overriddenFunctions = (Collection<? extends FunctionDescriptor>) overriddenDescriptors;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -522,14 +520,16 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
substitutedDescriptor.setInitialSignatureDescriptor(initialSignatureSubstituted);
|
||||
}
|
||||
|
||||
if (configuration.copyOverrides) {
|
||||
for (FunctionDescriptor overriddenFunction : overriddenFunctions) {
|
||||
if (configuration.originalSubstitutor.isEmpty()) {
|
||||
substitutedDescriptor.addOverriddenDescriptor(overriddenFunction);
|
||||
}
|
||||
else {
|
||||
substitutedDescriptor.addOverriddenDescriptor(overriddenFunction.substitute(substitutor));
|
||||
if (configuration.copyOverrides && !getOverriddenDescriptors().isEmpty()) {
|
||||
if (configuration.originalSubstitutor.isEmpty()) {
|
||||
substitutedDescriptor.setOverriddenDescriptors(getOverriddenDescriptors());
|
||||
}
|
||||
else {
|
||||
Collection<CallableMemberDescriptor> substitutedOverridden = SmartSet.create();
|
||||
for (FunctionDescriptor overriddenFunction : getOverriddenDescriptors()) {
|
||||
substitutedOverridden.add(overriddenFunction.substitute(substitutor));
|
||||
}
|
||||
substitutedDescriptor.setOverriddenDescriptors(substitutedOverridden);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -184,8 +184,8 @@ public abstract class PropertyAccessorDescriptorImpl extends DeclarationDescript
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addOverriddenDescriptor(@NotNull CallableMemberDescriptor overridden) {
|
||||
throw new IllegalStateException();
|
||||
public void setOverriddenDescriptors(@NotNull Collection<? extends CallableMemberDescriptor> overriddenDescriptors) {
|
||||
assert overriddenDescriptors.isEmpty() : "Overridden accessors should be empty";
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+9
-6
@@ -36,7 +36,7 @@ import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt.getB
|
||||
public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImpl implements PropertyDescriptor {
|
||||
private final Modality modality;
|
||||
private Visibility visibility;
|
||||
private final Set<PropertyDescriptor> overriddenProperties = SmartSet.create();
|
||||
private Collection<? extends PropertyDescriptor> overriddenProperties = null;
|
||||
private final PropertyDescriptor original;
|
||||
private final Kind kind;
|
||||
private final boolean lateInit;
|
||||
@@ -295,9 +295,11 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
|
||||
substitutedDescriptor.initialize(newGetter, newSetter);
|
||||
|
||||
if (copyOverrides) {
|
||||
for (PropertyDescriptor propertyDescriptor : overriddenProperties) {
|
||||
substitutedDescriptor.addOverriddenDescriptor(propertyDescriptor.substitute(substitutor));
|
||||
Collection<CallableMemberDescriptor> overridden = SmartSet.create();
|
||||
for (PropertyDescriptor propertyDescriptor : getOverriddenDescriptors()) {
|
||||
overridden.add(propertyDescriptor.substitute(substitutor));
|
||||
}
|
||||
substitutedDescriptor.setOverriddenDescriptors(overridden);
|
||||
}
|
||||
|
||||
return substitutedDescriptor;
|
||||
@@ -353,14 +355,15 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addOverriddenDescriptor(@NotNull CallableMemberDescriptor overridden) {
|
||||
overriddenProperties.add((PropertyDescriptorImpl) overridden);
|
||||
public void setOverriddenDescriptors(@NotNull Collection<? extends CallableMemberDescriptor> overriddenDescriptors) {
|
||||
//noinspection unchecked
|
||||
this.overriddenProperties = (Collection<? extends PropertyDescriptor>) overriddenDescriptors;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<? extends PropertyDescriptor> getOverriddenDescriptors() {
|
||||
return overriddenProperties;
|
||||
return overriddenProperties != null ? overriddenProperties : Collections.<PropertyDescriptor>emptyList();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -230,3 +230,7 @@ fun CallableMemberDescriptor.firstOverridden(
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun CallableMemberDescriptor.setSingleOverridden(overridden: CallableMemberDescriptor) {
|
||||
overriddenDescriptors = listOf(overridden)
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.types.FlexibleTypesKt;
|
||||
import org.jetbrains.kotlin.types.KotlinType;
|
||||
import org.jetbrains.kotlin.types.TypeConstructor;
|
||||
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker;
|
||||
import org.jetbrains.kotlin.utils.SmartSet;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@@ -293,6 +294,7 @@ public class OverridingUtil {
|
||||
@NotNull DescriptorSink sink
|
||||
) {
|
||||
Collection<CallableMemberDescriptor> bound = new ArrayList<CallableMemberDescriptor>(descriptorsFromSuper.size());
|
||||
Collection<CallableMemberDescriptor> overridden = SmartSet.create();
|
||||
for (CallableMemberDescriptor fromSupertype : descriptorsFromSuper) {
|
||||
OverrideCompatibilityInfo.Result result = DEFAULT.isOverridableBy(fromSupertype, fromCurrent, current).getResult();
|
||||
|
||||
@@ -300,7 +302,7 @@ public class OverridingUtil {
|
||||
switch (result) {
|
||||
case OVERRIDABLE:
|
||||
if (isVisible) {
|
||||
fromCurrent.addOverriddenDescriptor(fromSupertype);
|
||||
overridden.add(fromSupertype);
|
||||
}
|
||||
bound.add(fromSupertype);
|
||||
break;
|
||||
@@ -314,6 +316,9 @@ public class OverridingUtil {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fromCurrent.setOverriddenDescriptors(overridden);
|
||||
|
||||
return bound;
|
||||
}
|
||||
|
||||
@@ -496,9 +501,7 @@ public class OverridingUtil {
|
||||
});
|
||||
CallableMemberDescriptor fakeOverride =
|
||||
mostSpecific.copy(current, modality, visibility, CallableMemberDescriptor.Kind.FAKE_OVERRIDE, false);
|
||||
for (CallableMemberDescriptor descriptor : effectiveOverridden) {
|
||||
fakeOverride.addOverriddenDescriptor(descriptor);
|
||||
}
|
||||
fakeOverride.setOverriddenDescriptors(effectiveOverridden);
|
||||
sink.addFakeOverride(fakeOverride);
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.types.ErrorUtils;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class ErrorSimpleFunctionDescriptorImpl extends SimpleFunctionDescriptorImpl {
|
||||
@@ -80,7 +81,7 @@ public class ErrorSimpleFunctionDescriptorImpl extends SimpleFunctionDescriptorI
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addOverriddenDescriptor(@NotNull CallableMemberDescriptor overriddenFunction) {
|
||||
public void setOverriddenDescriptors(@NotNull Collection<? extends CallableMemberDescriptor> overriddenDescriptors) {
|
||||
// nop
|
||||
}
|
||||
}
|
||||
|
||||
+4
-3
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.idea.core.util.DescriptorMemberChooserObject
|
||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.renderer.*
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.setSingleOverridden
|
||||
|
||||
interface OverrideMemberChooserObject : ClassMember {
|
||||
enum class BodyType {
|
||||
@@ -108,7 +109,7 @@ private val OVERRIDE_RENDERER = DescriptorRenderer.withOptions {
|
||||
private fun generateProperty(project: Project, descriptor: PropertyDescriptor, bodyType: OverrideMemberChooserObject.BodyType): KtProperty {
|
||||
val newDescriptor = descriptor.copy(descriptor.containingDeclaration, Modality.OPEN, descriptor.visibility,
|
||||
descriptor.kind, /* copyOverrides = */ true) as PropertyDescriptor
|
||||
newDescriptor.addOverriddenDescriptor(descriptor)
|
||||
newDescriptor.setSingleOverridden(descriptor)
|
||||
|
||||
val body = buildString {
|
||||
append("\nget()")
|
||||
@@ -124,14 +125,14 @@ private fun generateProperty(project: Project, descriptor: PropertyDescriptor, b
|
||||
private fun generateConstructorParameter(project: Project, descriptor: PropertyDescriptor): KtParameter {
|
||||
val newDescriptor = descriptor.copy(descriptor.containingDeclaration, Modality.OPEN, descriptor.visibility,
|
||||
descriptor.kind, /* copyOverrides = */ true) as PropertyDescriptor
|
||||
newDescriptor.addOverriddenDescriptor(descriptor)
|
||||
newDescriptor.setSingleOverridden(descriptor)
|
||||
return KtPsiFactory(project).createParameter(OVERRIDE_RENDERER.render(newDescriptor))
|
||||
}
|
||||
|
||||
private fun generateFunction(project: Project, descriptor: FunctionDescriptor, bodyType: OverrideMemberChooserObject.BodyType): KtNamedFunction {
|
||||
val newDescriptor = descriptor.copy(descriptor.containingDeclaration, Modality.OPEN, descriptor.visibility,
|
||||
descriptor.kind, /* copyOverrides = */ true)
|
||||
newDescriptor.addOverriddenDescriptor(descriptor)
|
||||
newDescriptor.setSingleOverridden(descriptor)
|
||||
|
||||
val returnType = descriptor.returnType
|
||||
val returnsNotUnit = returnType != null && !KotlinBuiltIns.isUnit(returnType)
|
||||
|
||||
@@ -40,6 +40,7 @@ import org.jetbrains.kotlin.psi.KtPsiFactory
|
||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||
import org.jetbrains.kotlin.renderer.NameShortness
|
||||
import org.jetbrains.kotlin.resolve.FunctionDescriptorUtil
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.setSingleOverridden
|
||||
import org.jetbrains.kotlin.resolve.findMemberWithMaxVisibility
|
||||
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
||||
import org.jetbrains.kotlin.types.typeUtil.supertypes
|
||||
@@ -129,7 +130,7 @@ class ChangeMemberFunctionSignatureFix private constructor(
|
||||
CallableMemberDescriptor.Kind.DELEGATION,
|
||||
/* copyOverrides = */ true),
|
||||
newParameters)
|
||||
newFunction.addOverriddenDescriptor(superFunction)
|
||||
newFunction.setSingleOverridden(superFunction)
|
||||
|
||||
return Signature(newFunction)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user