Preserve JavaPropertyDescriptor type in substitution/copy

JavaPropertyDescriptor.substitute should return JavaPropertyDescriptor,
similarly to what's happening in JavaMethodDescriptor
This commit is contained in:
Alexander Udalov
2016-03-02 13:22:25 +03:00
parent 371051b1d6
commit 6429dd4b04
4 changed files with 53 additions and 26 deletions
@@ -32,7 +32,8 @@ import java.util.List;
public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements JavaCallableMemberDescriptor {
private final boolean isStaticFinal;
public JavaPropertyDescriptor(
protected JavaPropertyDescriptor(
@NotNull DeclarationDescriptor containingDeclaration,
@NotNull Annotations annotations,
@NotNull Modality modality,
@@ -41,14 +42,46 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja
@NotNull Name name,
@NotNull SourceElement source,
@Nullable PropertyDescriptor original,
@NotNull Kind kind,
boolean isStaticFinal
) {
super(containingDeclaration, original, annotations, modality, visibility, isVar, name, Kind.DECLARATION, source,
super(containingDeclaration, original, annotations, modality, visibility, isVar, name, kind, source,
/* lateInit = */ false, /* isConst = */ false);
this.isStaticFinal = isStaticFinal;
}
@NotNull
public static JavaPropertyDescriptor create(
@NotNull DeclarationDescriptor containingDeclaration,
@NotNull Annotations annotations,
@NotNull Modality modality,
@NotNull Visibility visibility,
boolean isVar,
@NotNull Name name,
@NotNull SourceElement source,
boolean isStaticFinal
) {
return new JavaPropertyDescriptor(
containingDeclaration, annotations, modality, visibility, isVar, name, source, null, Kind.DECLARATION, isStaticFinal
);
}
@NotNull
@Override
protected PropertyDescriptorImpl createSubstitutedCopy(
@NotNull DeclarationDescriptor newOwner,
@NotNull Modality newModality,
@NotNull Visibility newVisibility,
@Nullable PropertyDescriptor original,
@NotNull Kind kind
) {
return new JavaPropertyDescriptor(
newOwner, getAnnotations(), newModality, newVisibility, isVar(), getName(), SourceElement.NO_SOURCE, original,
kind, isStaticFinal
);
}
@Override
public boolean hasSynthesizedParameterNames() {
return false;
@@ -70,6 +103,7 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja
getName(),
getSource(),
getOriginal(),
getKind(),
isStaticFinal
);
@@ -385,9 +385,9 @@ class LazyJavaClassMemberScope(
): JavaPropertyDescriptor {
val annotations = c.resolveAnnotations(method)
val propertyDescriptor = JavaPropertyDescriptor(
ownerDescriptor, annotations, modality, method.getVisibility(),
/* isVar = */ false, method.name, c.components.sourceElementFactory.source(method), /* original */ null,
val propertyDescriptor = JavaPropertyDescriptor.create(
ownerDescriptor, annotations, modality, method.visibility,
/* isVar = */ false, method.name, c.components.sourceElementFactory.source(method),
/* isStaticFinal = */ false
)
@@ -419,10 +419,9 @@ class LazyJavaClassMemberScope(
"for getter is ${getterMethod.modality}, but for setter is ${setterMethod?.modality}"
}
val propertyDescriptor = JavaPropertyDescriptor(
val propertyDescriptor = JavaPropertyDescriptor.create(
ownerDescriptor, Annotations.EMPTY, getterMethod.modality, getterMethod.visibility,
/* isVar = */ setterMethod != null, overriddenProperty.name, getterMethod.source,
/* original */ null,
/* isStaticFinal = */ false
)
@@ -265,12 +265,12 @@ abstract class LazyJavaScope(protected val c: LazyJavaResolverContext) : MemberS
private fun createPropertyDescriptor(field: JavaField): PropertyDescriptorImpl {
val isVar = !field.isFinal
val visibility = field.visibility
val annotations = c.resolveAnnotations(field)
val propertyName = field.name
return JavaPropertyDescriptor(ownerDescriptor, annotations, Modality.FINAL, visibility, isVar, propertyName,
c.components.sourceElementFactory.source(field), /* original = */ null, /*isConst= */ field.isFinalStatic)
return JavaPropertyDescriptor.create(
ownerDescriptor, annotations, Modality.FINAL, field.visibility, isVar, field.name,
c.components.sourceElementFactory.source(field), /* isConst = */ field.isFinalStatic
)
}
private val JavaField.isFinalStatic: Boolean