Introduce FunctionDescriptor.initialSignatureDescriptor

Mostly it's needed for backend to extract descriptor with initial signature

For example:
class A implements CharSequence {
        char charAt(int index) {}
}

We see `charAt` this method as `fun get(index: Int): Char`, but in backend it
matters what signature had this descriptor before.
This commit is contained in:
Denis Zharkov
2015-10-29 18:51:24 +03:00
parent 95d12260c1
commit 291f0e57d1
10 changed files with 72 additions and 18 deletions
@@ -147,7 +147,7 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement
isOperator(), isInfix(), isExternal(), isInline(), isTailrec(), getOriginal(),
/* copyOverrides = */ true, getKind(),
enhancedValueParameters, enhancedReceiverType, enhancedReturnType,
null, false);
null, /* preserveSource */false, /* signatureChange = */ false);
assert enhancedMethod != null : "null after substitution while enhancing " + toString();
return enhancedMethod;
@@ -77,6 +77,7 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja
newGetter = new PropertyGetterDescriptorImpl(
enhanced, getter.getAnnotations(), getter.getModality(), getter.getVisibility(),
getter.hasBody(), getter.isDefault(), getter.isExternal(), getKind(), getter, getter.getSource());
newGetter.setInitialSignatureDescriptor(getter.getInitialSignatureDescriptor());
newGetter.initialize(enhancedReturnType);
}
@@ -86,6 +87,7 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja
newSetter = new PropertySetterDescriptorImpl(
enhanced, setter.getAnnotations(), setter.getModality(), setter.getVisibility(),
setter.hasBody(), setter.isDefault(), setter.isExternal(), getKind(), setter, setter.getSource());
newSetter.setInitialSignatureDescriptor(newSetter.getInitialSignatureDescriptor());
newSetter.initialize(setter.getValueParameters().get(0));
}
@@ -396,12 +396,16 @@ public class LazyJavaClassMemberScope(
propertyDescriptor, getterMethod.annotations, /* isDefault = */false,
/* isExternal = */ false, getterMethod.source
).apply {
initialSignatureDescriptor = getterMethod
initialize(propertyDescriptor.type)
}
val setter = setterMethod?.let { setterMethod ->
DescriptorFactory.createSetter(propertyDescriptor, setterMethod.annotations, /* isDefault = */false,
/* isExternal = */ false, setterMethod.visibility, setterMethod.source)
/* isExternal = */ false, setterMethod.visibility, setterMethod.source
).apply {
initialSignatureDescriptor = setterMethod
}
}
return propertyDescriptor.apply { initialize(getter, setter) }