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