Fix substition of inner classes constructors
It should have substituted class as containing declaration
This commit is contained in:
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.TypeSubstitutor
|
||||
|
||||
public class AccessorForConstructorDescriptor(
|
||||
private val calleeDescriptor: ConstructorDescriptor,
|
||||
@@ -38,6 +39,8 @@ public class AccessorForConstructorDescriptor(
|
||||
|
||||
override fun getSuperCallTarget(): ClassDescriptor? = superCallTarget
|
||||
|
||||
override fun substitute(substitutor: TypeSubstitutor) = super.substitute(substitutor) as ConstructorDescriptor
|
||||
|
||||
init {
|
||||
initialize(
|
||||
DescriptorUtils.getReceiverParameterType(extensionReceiverParameter),
|
||||
|
||||
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.descriptors;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.types.KotlinType;
|
||||
import org.jetbrains.kotlin.types.TypeSubstitutor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -39,6 +40,10 @@ public interface ConstructorDescriptor extends FunctionDescriptor {
|
||||
@Override
|
||||
ConstructorDescriptor getOriginal();
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
ConstructorDescriptor substitute(@NotNull TypeSubstitutor substitutor);
|
||||
|
||||
/**
|
||||
* @return "<init>" -- name is not stored for constructors
|
||||
*/
|
||||
@@ -46,5 +51,15 @@ public interface ConstructorDescriptor extends FunctionDescriptor {
|
||||
@Override
|
||||
Name getName();
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
ConstructorDescriptor copy(
|
||||
DeclarationDescriptor newOwner,
|
||||
Modality modality,
|
||||
Visibility visibility,
|
||||
Kind kind,
|
||||
boolean copyOverrides
|
||||
);
|
||||
|
||||
boolean isPrimary();
|
||||
}
|
||||
|
||||
+12
-2
@@ -21,6 +21,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.types.TypeSubstitutor;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
@@ -90,6 +91,12 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements
|
||||
return (ConstructorDescriptor) super.getOriginal();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ConstructorDescriptor substitute(@NotNull TypeSubstitutor originalSubstitutor) {
|
||||
return (ConstructorDescriptor) super.substitute(originalSubstitutor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R, D> R accept(DeclarationDescriptorVisitor<R, D> visitor, D data) {
|
||||
return visitor.visitConstructorDescriptor(this, data);
|
||||
@@ -126,7 +133,6 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements
|
||||
"newOwner: " + newOwner + "\n" +
|
||||
"kind: " + kind);
|
||||
}
|
||||
assert original != null : "Attempt to create copy of constructor without preserving original: " + this;
|
||||
assert newName == null : "Attempt to rename constructor: " + this;
|
||||
return new ConstructorDescriptorImpl(
|
||||
(ClassDescriptor) newOwner,
|
||||
@@ -141,6 +147,10 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements
|
||||
@NotNull
|
||||
@Override
|
||||
public ConstructorDescriptor copy(DeclarationDescriptor newOwner, Modality modality, Visibility visibility, Kind kind, boolean copyOverrides) {
|
||||
throw new UnsupportedOperationException("Constructors should not be copied for overriding");
|
||||
return (ConstructorDescriptor) doSubstitute(
|
||||
TypeSubstitutor.EMPTY, newOwner, modality, visibility,
|
||||
isOperator(), isInfix(), isExternal(), isInline(), isTailrec(),
|
||||
null, copyOverrides, kind
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -247,7 +247,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
}
|
||||
|
||||
@Override
|
||||
public final FunctionDescriptor substitute(@NotNull TypeSubstitutor originalSubstitutor) {
|
||||
public FunctionDescriptor substitute(@NotNull TypeSubstitutor originalSubstitutor) {
|
||||
if (originalSubstitutor.isEmpty()) {
|
||||
return this;
|
||||
}
|
||||
|
||||
+3
-1
@@ -157,7 +157,9 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor {
|
||||
Collection<ConstructorDescriptor> originalConstructors = original.getConstructors();
|
||||
Collection<ConstructorDescriptor> result = new ArrayList<ConstructorDescriptor>(originalConstructors.size());
|
||||
for (ConstructorDescriptor constructor : originalConstructors) {
|
||||
result.add((ConstructorDescriptor) constructor.substitute(getSubstitutor()));
|
||||
ConstructorDescriptor copy =
|
||||
constructor.copy(this, constructor.getModality(), constructor.getVisibility(), constructor.getKind(), false);
|
||||
result.add(copy.substitute(getSubstitutor()));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user