Preserve JavaPropertyDescriptor type in substitution/copy
JavaPropertyDescriptor.substitute should return JavaPropertyDescriptor, similarly to what's happening in JavaMethodDescriptor
This commit is contained in:
+36
-2
@@ -32,7 +32,8 @@ import java.util.List;
|
|||||||
|
|
||||||
public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements JavaCallableMemberDescriptor {
|
public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements JavaCallableMemberDescriptor {
|
||||||
private final boolean isStaticFinal;
|
private final boolean isStaticFinal;
|
||||||
public JavaPropertyDescriptor(
|
|
||||||
|
protected JavaPropertyDescriptor(
|
||||||
@NotNull DeclarationDescriptor containingDeclaration,
|
@NotNull DeclarationDescriptor containingDeclaration,
|
||||||
@NotNull Annotations annotations,
|
@NotNull Annotations annotations,
|
||||||
@NotNull Modality modality,
|
@NotNull Modality modality,
|
||||||
@@ -41,14 +42,46 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja
|
|||||||
@NotNull Name name,
|
@NotNull Name name,
|
||||||
@NotNull SourceElement source,
|
@NotNull SourceElement source,
|
||||||
@Nullable PropertyDescriptor original,
|
@Nullable PropertyDescriptor original,
|
||||||
|
@NotNull Kind kind,
|
||||||
boolean isStaticFinal
|
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);
|
/* lateInit = */ false, /* isConst = */ false);
|
||||||
|
|
||||||
this.isStaticFinal = isStaticFinal;
|
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
|
@Override
|
||||||
public boolean hasSynthesizedParameterNames() {
|
public boolean hasSynthesizedParameterNames() {
|
||||||
return false;
|
return false;
|
||||||
@@ -70,6 +103,7 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja
|
|||||||
getName(),
|
getName(),
|
||||||
getSource(),
|
getSource(),
|
||||||
getOriginal(),
|
getOriginal(),
|
||||||
|
getKind(),
|
||||||
isStaticFinal
|
isStaticFinal
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
+4
-5
@@ -385,9 +385,9 @@ class LazyJavaClassMemberScope(
|
|||||||
): JavaPropertyDescriptor {
|
): JavaPropertyDescriptor {
|
||||||
val annotations = c.resolveAnnotations(method)
|
val annotations = c.resolveAnnotations(method)
|
||||||
|
|
||||||
val propertyDescriptor = JavaPropertyDescriptor(
|
val propertyDescriptor = JavaPropertyDescriptor.create(
|
||||||
ownerDescriptor, annotations, modality, method.getVisibility(),
|
ownerDescriptor, annotations, modality, method.visibility,
|
||||||
/* isVar = */ false, method.name, c.components.sourceElementFactory.source(method), /* original */ null,
|
/* isVar = */ false, method.name, c.components.sourceElementFactory.source(method),
|
||||||
/* isStaticFinal = */ false
|
/* isStaticFinal = */ false
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -419,10 +419,9 @@ class LazyJavaClassMemberScope(
|
|||||||
"for getter is ${getterMethod.modality}, but for setter is ${setterMethod?.modality}"
|
"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,
|
ownerDescriptor, Annotations.EMPTY, getterMethod.modality, getterMethod.visibility,
|
||||||
/* isVar = */ setterMethod != null, overriddenProperty.name, getterMethod.source,
|
/* isVar = */ setterMethod != null, overriddenProperty.name, getterMethod.source,
|
||||||
/* original */ null,
|
|
||||||
/* isStaticFinal = */ false
|
/* isStaticFinal = */ false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -265,12 +265,12 @@ abstract class LazyJavaScope(protected val c: LazyJavaResolverContext) : MemberS
|
|||||||
|
|
||||||
private fun createPropertyDescriptor(field: JavaField): PropertyDescriptorImpl {
|
private fun createPropertyDescriptor(field: JavaField): PropertyDescriptorImpl {
|
||||||
val isVar = !field.isFinal
|
val isVar = !field.isFinal
|
||||||
val visibility = field.visibility
|
|
||||||
val annotations = c.resolveAnnotations(field)
|
val annotations = c.resolveAnnotations(field)
|
||||||
val propertyName = field.name
|
|
||||||
|
|
||||||
return JavaPropertyDescriptor(ownerDescriptor, annotations, Modality.FINAL, visibility, isVar, propertyName,
|
return JavaPropertyDescriptor.create(
|
||||||
c.components.sourceElementFactory.source(field), /* original = */ null, /*isConst= */ field.isFinalStatic)
|
ownerDescriptor, annotations, Modality.FINAL, field.visibility, isVar, field.name,
|
||||||
|
c.components.sourceElementFactory.source(field), /* isConst = */ field.isFinalStatic
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val JavaField.isFinalStatic: Boolean
|
private val JavaField.isFinalStatic: Boolean
|
||||||
|
|||||||
+9
-15
@@ -29,7 +29,10 @@ import org.jetbrains.kotlin.types.TypeSubstitutor;
|
|||||||
import org.jetbrains.kotlin.types.Variance;
|
import org.jetbrains.kotlin.types.Variance;
|
||||||
import org.jetbrains.kotlin.utils.SmartSet;
|
import org.jetbrains.kotlin.utils.SmartSet;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt.getBuiltIns;
|
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt.getBuiltIns;
|
||||||
|
|
||||||
@@ -210,7 +213,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private PropertyDescriptor doSubstitute(
|
protected PropertyDescriptor doSubstitute(
|
||||||
@NotNull TypeSubstitutor originalSubstitutor,
|
@NotNull TypeSubstitutor originalSubstitutor,
|
||||||
@NotNull DeclarationDescriptor newOwner,
|
@NotNull DeclarationDescriptor newOwner,
|
||||||
@NotNull Modality newModality,
|
@NotNull Modality newModality,
|
||||||
@@ -322,19 +325,10 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
|
|||||||
@Nullable PropertyDescriptor original,
|
@Nullable PropertyDescriptor original,
|
||||||
@NotNull Kind kind
|
@NotNull Kind kind
|
||||||
) {
|
) {
|
||||||
return new PropertyDescriptorImpl(newOwner, original,
|
return new PropertyDescriptorImpl(
|
||||||
getAnnotations(), newModality, newVisibility,
|
newOwner, original, getAnnotations(), newModality, newVisibility, isVar(), getName(), kind, SourceElement.NO_SOURCE,
|
||||||
isVar(), getName(), kind, SourceElement.NO_SOURCE, isLateInit(), isConst());
|
isLateInit(), isConst()
|
||||||
}
|
);
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private static Visibility convertVisibility(Visibility orig, Visibility candidate) {
|
|
||||||
if (candidate == Visibilities.INHERITED) {
|
|
||||||
return candidate;
|
|
||||||
}
|
|
||||||
|
|
||||||
Integer result = Visibilities.compare(orig, candidate);
|
|
||||||
return result != null && result < 0 ? candidate : orig;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user