diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java index 2fef3289a97..3fdbefffb4b 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java @@ -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 ); diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt index afc7d048a47..6be223ead3a 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -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 ) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt index 4fc4ec865ec..0488f9390c8 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt @@ -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 diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java index c6792b3c3a7..da70fab8022 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java @@ -29,7 +29,10 @@ import org.jetbrains.kotlin.types.TypeSubstitutor; import org.jetbrains.kotlin.types.Variance; 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; @@ -210,7 +213,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp } @Nullable - private PropertyDescriptor doSubstitute( + protected PropertyDescriptor doSubstitute( @NotNull TypeSubstitutor originalSubstitutor, @NotNull DeclarationDescriptor newOwner, @NotNull Modality newModality, @@ -322,19 +325,10 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp @Nullable PropertyDescriptor original, @NotNull Kind kind ) { - return new PropertyDescriptorImpl(newOwner, original, - getAnnotations(), newModality, newVisibility, - isVar(), getName(), kind, SourceElement.NO_SOURCE, 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; + return new PropertyDescriptorImpl( + newOwner, original, getAnnotations(), newModality, newVisibility, isVar(), getName(), kind, SourceElement.NO_SOURCE, + isLateInit(), isConst() + ); } @Override