[Invariant fix] Avoid re-resolving declared descriptors in lazy member scopes
It becomes necessary after scopes/types refinement Without it being applied the code might fail with slice-rewrite errors KT-32841
This commit is contained in:
committed by
Dmitry Savvinov
parent
ab9ff786d7
commit
5c2c7e7776
+3
-2
@@ -81,10 +81,11 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja
|
||||
@NotNull Visibility newVisibility,
|
||||
@Nullable PropertyDescriptor original,
|
||||
@NotNull Kind kind,
|
||||
@NotNull Name newName
|
||||
@NotNull Name newName,
|
||||
@NotNull SourceElement source
|
||||
) {
|
||||
return new JavaPropertyDescriptor(
|
||||
newOwner, getAnnotations(), newModality, newVisibility, isVar(), newName, SourceElement.NO_SOURCE, original,
|
||||
newOwner, getAnnotations(), newModality, newVisibility, isVar(), newName, source, original,
|
||||
kind, isStaticFinal,
|
||||
singleUserData);
|
||||
}
|
||||
|
||||
@@ -90,6 +90,9 @@ public interface CallableMemberDescriptor extends CallableDescriptor, MemberDesc
|
||||
@NotNull
|
||||
CopyBuilder<D> setOriginal(@Nullable CallableMemberDescriptor original);
|
||||
|
||||
@NotNull
|
||||
CopyBuilder<D> setPreserveSourceElement();
|
||||
|
||||
@Nullable
|
||||
D build();
|
||||
}
|
||||
|
||||
@@ -122,6 +122,7 @@ public interface FunctionDescriptor extends CallableMemberDescriptor {
|
||||
CopyBuilder<D> setSignatureChange();
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
CopyBuilder<D> setPreserveSourceElement();
|
||||
|
||||
@NotNull
|
||||
|
||||
+20
-3
@@ -252,6 +252,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
|
||||
private Modality modality = getModality();
|
||||
private Visibility visibility = getVisibility();
|
||||
private PropertyDescriptor original = null;
|
||||
private boolean preserveSourceElement = false;
|
||||
private Kind kind = getKind();
|
||||
private TypeSubstitution substitution = TypeSubstitution.EMPTY;
|
||||
private boolean copyOverrides = true;
|
||||
@@ -273,6 +274,13 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
|
||||
return this;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public CopyConfiguration setPreserveSourceElement() {
|
||||
preserveSourceElement = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public CopyConfiguration setModality(@NotNull Modality modality) {
|
||||
@@ -352,11 +360,19 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
|
||||
return new CopyConfiguration();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private SourceElement getSourceToUseForCopy(boolean preserveSource, @Nullable PropertyDescriptor original) {
|
||||
return preserveSource
|
||||
? (original != null ? original : getOriginal()).getSource()
|
||||
: SourceElement.NO_SOURCE;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected PropertyDescriptor doSubstitute(@NotNull CopyConfiguration copyConfiguration) {
|
||||
PropertyDescriptorImpl substitutedDescriptor = createSubstitutedCopy(
|
||||
copyConfiguration.owner, copyConfiguration.modality, copyConfiguration.visibility,
|
||||
copyConfiguration.original, copyConfiguration.kind, copyConfiguration.name);
|
||||
copyConfiguration.original, copyConfiguration.kind, copyConfiguration.name,
|
||||
getSourceToUseForCopy(copyConfiguration.preserveSourceElement, copyConfiguration.original));
|
||||
|
||||
List<TypeParameterDescriptor> originalTypeParameters =
|
||||
copyConfiguration.newTypeParameters == null ? getTypeParameters() : copyConfiguration.newTypeParameters;
|
||||
@@ -486,10 +502,11 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
|
||||
@NotNull Visibility newVisibility,
|
||||
@Nullable PropertyDescriptor original,
|
||||
@NotNull Kind kind,
|
||||
@NotNull Name newName
|
||||
@NotNull Name newName,
|
||||
@NotNull SourceElement source
|
||||
) {
|
||||
return new PropertyDescriptorImpl(
|
||||
newOwner, original, getAnnotations(), newModality, newVisibility, isVar(), newName, kind, SourceElement.NO_SOURCE,
|
||||
newOwner, original, getAnnotations(), newModality, newVisibility, isVar(), newName, kind, source,
|
||||
isLateInit(), isConst(), isExpect(), isActual(), isExternal(), isDelegated()
|
||||
);
|
||||
}
|
||||
|
||||
+2
-1
@@ -164,7 +164,8 @@ class DeserializedPropertyDescriptor(
|
||||
newVisibility: Visibility,
|
||||
original: PropertyDescriptor?,
|
||||
kind: CallableMemberDescriptor.Kind,
|
||||
newName: Name
|
||||
newName: Name,
|
||||
source: SourceElement
|
||||
): PropertyDescriptorImpl {
|
||||
return DeserializedPropertyDescriptor(
|
||||
newOwner, original, annotations, newModality, newVisibility, isVar, newName, kind, isLateInit, isConst, isExternal,
|
||||
|
||||
Reference in New Issue
Block a user