Obtain type parameters of constructor from containing class

Effectively this commit is just inlining of 'typeParameters' parameter
This commit is contained in:
Denis Zharkov
2015-11-02 11:24:03 +03:00
parent c9aa75259b
commit d614adcd2a
9 changed files with 10 additions and 16 deletions
@@ -227,7 +227,7 @@ public class SingleAbstractMethodUtils {
@NotNull List<ValueParameterDescriptor> valueParameters, @NotNull List<ValueParameterDescriptor> valueParameters,
@NotNull KotlinType returnType @NotNull KotlinType returnType
) { ) {
result.initialize(typeParameters, valueParameters, original.getVisibility()); result.initialize(valueParameters, original.getVisibility());
result.setReturnType(returnType); result.setReturnType(returnType);
} }
}); });
@@ -241,7 +241,6 @@ class FunctionDescriptorResolver(
true, true,
classElement.getPrimaryConstructorModifierList(), classElement.getPrimaryConstructorModifierList(),
classElement.getPrimaryConstructor() ?: classElement, classElement.getPrimaryConstructor() ?: classElement,
classDescriptor.getTypeConstructor().getParameters(),
classElement.getPrimaryConstructorParameters(), classElement.getPrimaryConstructorParameters(),
trace trace
) )
@@ -259,7 +258,6 @@ class FunctionDescriptorResolver(
false, false,
constructor.getModifierList(), constructor.getModifierList(),
constructor, constructor,
classDescriptor.getTypeConstructor().getParameters(),
constructor.getValueParameters(), constructor.getValueParameters(),
trace trace
) )
@@ -271,7 +269,6 @@ class FunctionDescriptorResolver(
isPrimary: Boolean, isPrimary: Boolean,
modifierList: KtModifierList?, modifierList: KtModifierList?,
declarationToTrace: KtDeclaration, declarationToTrace: KtDeclaration,
typeParameters: List<TypeParameterDescriptor>,
valueParameters: List<KtParameter>, valueParameters: List<KtParameter>,
trace: BindingTrace trace: BindingTrace
): ConstructorDescriptorImpl { ): ConstructorDescriptorImpl {
@@ -291,7 +288,6 @@ class FunctionDescriptorResolver(
) )
parameterScope.changeLockLevel(LexicalWritableScope.LockLevel.BOTH) parameterScope.changeLockLevel(LexicalWritableScope.LockLevel.BOTH)
val constructor = constructorDescriptor.initialize( val constructor = constructorDescriptor.initialize(
typeParameters,
resolveValueParameters(constructorDescriptor, parameterScope, valueParameters, trace, null), resolveValueParameters(constructorDescriptor, parameterScope, valueParameters, trace, null),
resolveVisibilityFromModifiers( resolveVisibilityFromModifiers(
modifierList, modifierList,
@@ -118,7 +118,6 @@ public class LazyScriptClassMemberScope protected constructor(
true, true,
SourceElement.NO_SOURCE SourceElement.NO_SOURCE
).initialize( ).initialize(
listOf(),
valueParameters, valueParameters,
Visibilities.PUBLIC Visibilities.PUBLIC
) )
@@ -480,7 +480,6 @@ public class LazyJavaClassMemberScope(
constructor, false, null, null, valueParameters.descriptors, Collections.emptyList(), false) constructor, false, null, null, valueParameters.descriptors, Collections.emptyList(), false)
constructorDescriptor.initialize( constructorDescriptor.initialize(
classDescriptor.getTypeConstructor().getParameters(),
effectiveSignature.getValueParameters(), effectiveSignature.getValueParameters(),
constructor.getVisibility() constructor.getVisibility()
) )
@@ -508,12 +507,11 @@ public class LazyJavaClassMemberScope(
val constructorDescriptor = JavaConstructorDescriptor.createJavaConstructor( val constructorDescriptor = JavaConstructorDescriptor.createJavaConstructor(
classDescriptor, Annotations.EMPTY, /* isPrimary = */ true, c.components.sourceElementFactory.source(jClass) classDescriptor, Annotations.EMPTY, /* isPrimary = */ true, c.components.sourceElementFactory.source(jClass)
) )
val typeParameters = classDescriptor.getTypeConstructor().getParameters()
val valueParameters = if (isAnnotation) createAnnotationConstructorParameters(constructorDescriptor) val valueParameters = if (isAnnotation) createAnnotationConstructorParameters(constructorDescriptor)
else Collections.emptyList<ValueParameterDescriptor>() else Collections.emptyList<ValueParameterDescriptor>()
constructorDescriptor.setHasSynthesizedParameterNames(false) constructorDescriptor.setHasSynthesizedParameterNames(false)
constructorDescriptor.initialize(typeParameters, valueParameters, getConstructorVisibility(classDescriptor)) constructorDescriptor.initialize(valueParameters, getConstructorVisibility(classDescriptor))
constructorDescriptor.setHasStableParameterNames(true) constructorDescriptor.setHasStableParameterNames(true)
constructorDescriptor.setReturnType(classDescriptor.getDefaultType()) constructorDescriptor.setReturnType(classDescriptor.getDefaultType())
c.components.javaResolverCache.recordConstructor(jClass, constructorDescriptor); c.components.javaResolverCache.recordConstructor(jClass, constructorDescriptor);
@@ -55,12 +55,14 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements
} }
public ConstructorDescriptorImpl initialize( public ConstructorDescriptorImpl initialize(
@NotNull List<TypeParameterDescriptor> typeParameters,
@NotNull List<ValueParameterDescriptor> unsubstitutedValueParameters, @NotNull List<ValueParameterDescriptor> unsubstitutedValueParameters,
@NotNull Visibility visibility @NotNull Visibility visibility
) { ) {
super.initialize(null, calculateDispatchReceiverParameter(), typeParameters, unsubstitutedValueParameters, null, super.initialize(
Modality.FINAL, visibility); null, calculateDispatchReceiverParameter(),
getContainingDeclaration().getDeclaredTypeParameters(),
unsubstitutedValueParameters, null,
Modality.FINAL, visibility);
return this; return this;
} }
@@ -37,7 +37,7 @@ public class DescriptorFactory {
private static class DefaultConstructorDescriptor extends ConstructorDescriptorImpl { private static class DefaultConstructorDescriptor extends ConstructorDescriptorImpl {
public DefaultConstructorDescriptor(@NotNull ClassDescriptor containingClass, @NotNull SourceElement source) { public DefaultConstructorDescriptor(@NotNull ClassDescriptor containingClass, @NotNull SourceElement source) {
super(containingClass, null, Annotations.Companion.getEMPTY(), true, Kind.DECLARATION, source); super(containingClass, null, Annotations.Companion.getEMPTY(), true, Kind.DECLARATION, source);
initialize(Collections.<TypeParameterDescriptor>emptyList(), Collections.<ValueParameterDescriptor>emptyList(), initialize(Collections.<ValueParameterDescriptor>emptyList(),
getDefaultConstructorVisibility(containingClass)); getDefaultConstructorVisibility(containingClass));
} }
} }
@@ -269,7 +269,7 @@ public class ErrorUtils {
Modality.OPEN, Collections.<KotlinType>emptyList(), SourceElement.NO_SOURCE); Modality.OPEN, Collections.<KotlinType>emptyList(), SourceElement.NO_SOURCE);
ConstructorDescriptorImpl errorConstructor = ConstructorDescriptorImpl.create(this, Annotations.Companion.getEMPTY(), true, SourceElement.NO_SOURCE); ConstructorDescriptorImpl errorConstructor = ConstructorDescriptorImpl.create(this, Annotations.Companion.getEMPTY(), true, SourceElement.NO_SOURCE);
errorConstructor.initialize(Collections.<TypeParameterDescriptor>emptyList(), Collections.<ValueParameterDescriptor>emptyList(), errorConstructor.initialize(Collections.<ValueParameterDescriptor>emptyList(),
Visibilities.INTERNAL); Visibilities.INTERNAL);
MemberScope memberScope = createErrorScope(getName().asString()); MemberScope memberScope = createErrorScope(getName().asString());
errorConstructor.setReturnType( errorConstructor.setReturnType(
@@ -170,7 +170,6 @@ public class MemberDeserializer(private val c: DeserializationContext) {
) )
val local = c.childContext(descriptor, listOf()) val local = c.childContext(descriptor, listOf())
descriptor.initialize( descriptor.initialize(
classDescriptor.typeConstructor.parameters,
local.memberDeserializer.valueParameters(proto.valueParameterList, proto, AnnotatedCallableKind.FUNCTION), local.memberDeserializer.valueParameters(proto.valueParameterList, proto, AnnotatedCallableKind.FUNCTION),
Deserialization.visibility(Flags.VISIBILITY.get(proto.flags)) Deserialization.visibility(Flags.VISIBILITY.get(proto.flags))
) )
@@ -69,7 +69,7 @@ private class MissingDependencyErrorClassDescriptor(
init { init {
val emptyConstructor = ConstructorDescriptorImpl.create(this, Annotations.EMPTY, true, SourceElement.NO_SOURCE) val emptyConstructor = ConstructorDescriptorImpl.create(this, Annotations.EMPTY, true, SourceElement.NO_SOURCE)
emptyConstructor.initialize(listOf(), listOf(), Visibilities.DEFAULT_VISIBILITY) emptyConstructor.initialize(listOf(), Visibilities.DEFAULT_VISIBILITY)
emptyConstructor.setReturnType(createErrorType("<ERROR RETURN TYPE>")) emptyConstructor.setReturnType(createErrorType("<ERROR RETURN TYPE>"))
initialize(MemberScope.Empty, setOf(emptyConstructor), emptyConstructor) initialize(MemberScope.Empty, setOf(emptyConstructor), emptyConstructor)
} }