IR: Make sure that symbols refer to original descriptors only

If a descriptor is a WrappedDeclarationDescriptor, it SHOULD NOT be
substituted.
This commit is contained in:
Dmitry Petrov
2019-03-28 14:35:45 +03:00
parent cd6c88fa2c
commit 8be7f7f1f7
14 changed files with 74 additions and 57 deletions
@@ -102,6 +102,7 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja
@NotNull KotlinType enhancedReturnType,
@Nullable Pair<UserDataKey<?>, ?> additionalUserData
) {
PropertyDescriptor enhancedOriginal = getOriginal() == this ? null : getOriginal();
JavaPropertyDescriptor enhanced = new JavaPropertyDescriptor(
getContainingDeclaration(),
getAnnotations(),
@@ -110,7 +111,7 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja
isVar(),
getName(),
getSource(),
getOriginal() == this ? null : getOriginal(),
enhancedOriginal,
getKind(),
isStaticFinal,
additionalUserData);
@@ -120,7 +121,9 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja
if (getter != null) {
newGetter = new PropertyGetterDescriptorImpl(
enhanced, getter.getAnnotations(), getter.getModality(), getter.getVisibility(),
getter.isDefault(), getter.isExternal(), getter.isInline(), getKind(), getter, getter.getSource()
getter.isDefault(), getter.isExternal(), getter.isInline(), getKind(),
enhancedOriginal == null ? null : enhancedOriginal.getGetter(),
getter.getSource()
);
newGetter.setInitialSignatureDescriptor(getter.getInitialSignatureDescriptor());
newGetter.initialize(enhancedReturnType);
@@ -131,7 +134,9 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja
if (setter != null) {
newSetter = new PropertySetterDescriptorImpl(
enhanced, setter.getAnnotations(), setter.getModality(), setter.getVisibility(),
setter.isDefault(), setter.isExternal(), setter.isInline(), getKind(), setter, setter.getSource()
setter.isDefault(), setter.isExternal(), setter.isInline(), getKind(),
enhancedOriginal == null ? null : enhancedOriginal.getSetter(),
setter.getSource()
);
newSetter.setInitialSignatureDescriptor(newSetter.getInitialSignatureDescriptor());
newSetter.initialize(setter.getValueParameters().get(0));
@@ -334,6 +334,16 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
public PropertyDescriptor build() {
return doSubstitute(this);
}
PropertyGetterDescriptor getOriginalGetter() {
if (original == null) return null;
return original.getGetter();
}
PropertySetterDescriptor getOriginalSetter() {
if (original == null) return null;
return original.getSetter();
}
}
@NotNull
@@ -389,7 +399,8 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
PropertyGetterDescriptorImpl newGetter = getter == null ? null : new PropertyGetterDescriptorImpl(
substitutedDescriptor, getter.getAnnotations(), copyConfiguration.modality, normalizeVisibility(getter.getVisibility(), copyConfiguration.kind),
getter.isDefault(), getter.isExternal(), getter.isInline(), copyConfiguration.kind, copyConfiguration.original == null ? null : copyConfiguration.original.getGetter(),
getter.isDefault(), getter.isExternal(), getter.isInline(), copyConfiguration.kind,
copyConfiguration.getOriginalGetter(),
SourceElement.NO_SOURCE
);
if (newGetter != null) {
@@ -399,7 +410,8 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
}
PropertySetterDescriptorImpl newSetter = setter == null ? null : new PropertySetterDescriptorImpl(
substitutedDescriptor, setter.getAnnotations(), copyConfiguration.modality, normalizeVisibility(setter.getVisibility(), copyConfiguration.kind),
setter.isDefault(), setter.isExternal(), setter.isInline(), copyConfiguration.kind, copyConfiguration.original == null ? null : copyConfiguration.original.getSetter(),
setter.isDefault(), setter.isExternal(), setter.isInline(), copyConfiguration.kind,
copyConfiguration.getOriginalSetter(),
SourceElement.NO_SOURCE
);
if (newSetter != null) {