diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenContext.java b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenContext.java index f91c55491fa..629d58da1e2 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenContext.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenContext.java @@ -251,12 +251,12 @@ public abstract class CodegenContext { PropertyDescriptor myAccessor = new PropertyDescriptor(contextType, Collections.emptyList(), pd.getModality(), - pd.getVisibility(), pd.isVar(), pd.isObjectDeclaration(), pd.getName() + "$bridge$" + accessors.size(), CallableMemberDescriptor.Kind.DECLARATION ); + myAccessor.setVisibility(pd.getVisibility()); JetType receiverType = pd.getReceiverParameter().exists() ? pd.getReceiverParameter().getType() : null; myAccessor.setType(pd.getType(), Collections.emptyList(), pd.getExpectedThisObject(), receiverType); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 2cc4e9cc3a9..bc7d6827673 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -1150,11 +1150,11 @@ public class JavaDescriptorResolver { owner, resolveAnnotations(anyMember.getMember().psiMember), modality, - resolveVisibilityFromPsiModifiers(anyMember.getMember().psiMember), isVar, false, propertyName, CallableMemberDescriptor.Kind.DECLARATION); + propertyDescriptor.setVisibility(resolveVisibilityFromPsiModifiers(anyMember.getMember().psiMember)); PropertyGetterDescriptor getterDescriptor = null; PropertySetterDescriptor setterDescriptor = null; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ConstructorDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ConstructorDescriptorImpl.java index 9d949bc0982..2a4cc9af5fe 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ConstructorDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ConstructorDescriptorImpl.java @@ -48,7 +48,8 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements //isStatic - for java only public ConstructorDescriptorImpl initialize(@NotNull List typeParameters, @NotNull List unsubstitutedValueParameters, Visibility visibility, boolean isStatic) { - super.initialize(null, isStatic ? ReceiverDescriptor.NO_RECEIVER : getExpectedThisObject(getContainingDeclaration()), typeParameters, unsubstitutedValueParameters, null, Modality.FINAL, visibility); + super.initialize(null, isStatic ? ReceiverDescriptor.NO_RECEIVER : getExpectedThisObject(getContainingDeclaration()), typeParameters, unsubstitutedValueParameters, null, Modality.FINAL); + setVisibility(visibility); return this; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java index 4e865dfb81d..b419258433b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java @@ -78,13 +78,11 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorImpl i @NotNull List typeParameters, @NotNull List unsubstitutedValueParameters, @Nullable JetType unsubstitutedReturnType, - @Nullable Modality modality, - @NotNull Visibility visibility) { + @Nullable Modality modality) { this.typeParameters = typeParameters; this.unsubstitutedValueParameters = unsubstitutedValueParameters; this.unsubstitutedReturnType = unsubstitutedReturnType; this.modality = modality; - this.visibility = visibility; this.receiver = receiverType == null ? NO_RECEIVER : new ExtensionReceiver(this, receiverType); this.expectedThisObject = expectedThisObject; @@ -106,6 +104,10 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorImpl i return this; } + public void setVisibility(@NotNull Visibility visibility) { + this.visibility = visibility; + } + public void setReturnType(@NotNull JetType unsubstitutedReturnType) { this.unsubstitutedReturnType = unsubstitutedReturnType; } @@ -221,9 +223,8 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorImpl i substitutedTypeParameters, substitutedValueParameters, substitutedReturnType, - newModality, - visibility - ); + newModality); + substitutedDescriptor.setVisibility(visibility); if (copyOverrides) { for (FunctionDescriptor overriddenFunction : overriddenFunctions) { substitutedDescriptor.addOverriddenDescriptor(overriddenFunction.substitute(substitutor)); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java index 449261e72fd..5db71933722 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java @@ -126,7 +126,8 @@ public class FunctionDescriptorUtil { Collections.emptyList(), JetStandardClasses.getValueParameters(functionDescriptor, functionType), JetStandardClasses.getReturnTypeFromFunctionType(functionType), - Modality.FINAL, Visibilities.LOCAL); + Modality.FINAL); + functionDescriptor.setVisibility(Visibilities.LOCAL); } public static D alphaConvertTypeParameters(D candidate) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java index 42a37a32945..77192e72b0e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java @@ -39,7 +39,7 @@ import static org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor public class PropertyDescriptor extends VariableDescriptorImpl implements CallableMemberDescriptor { private final Modality modality; - private final Visibility visibility; + private Visibility visibility; private final boolean isVar; private final boolean isObject; private final Set overriddenProperties = Sets.newLinkedHashSet(); @@ -48,7 +48,7 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab private ReceiverDescriptor expectedThisObject; private ReceiverDescriptor receiver; - private List typeParemeters; + private List typeParameters; private PropertyGetterDescriptor getter; private PropertySetterDescriptor setter; @@ -67,7 +67,6 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab @NotNull DeclarationDescriptor containingDeclaration, @NotNull List annotations, @NotNull Modality modality, - @NotNull Visibility visibility, boolean isVar, boolean isObject, @NotNull String name, @@ -76,7 +75,6 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab this.isVar = isVar; this.isObject = isObject; this.modality = modality; - this.visibility = visibility; this.original = original == null ? this : original.getOriginal(); this.kind = kind; } @@ -85,12 +83,11 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab @NotNull DeclarationDescriptor containingDeclaration, @NotNull List annotations, @NotNull Modality modality, - @NotNull Visibility visibility, boolean isVar, boolean isObject, @NotNull String name, Kind kind) { - this(null, containingDeclaration, annotations, modality, visibility, isVar, isObject, name, kind); + this(null, containingDeclaration, annotations, modality, isVar, isObject, name, kind); } public PropertyDescriptor( @@ -106,7 +103,7 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab @NotNull JetType outType, Kind kind ) { - this(containingDeclaration, annotations, modality, visibility, isVar, isObject, name, kind); + this(containingDeclaration, annotations, modality, isVar, isObject, name, kind); setType(outType, Collections.emptyList(), expectedThisObject, receiverType); } @@ -120,7 +117,7 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab public void setType(@NotNull JetType outType, @NotNull List typeParameters, @NotNull ReceiverDescriptor expectedThisObject, @NotNull ReceiverDescriptor receiver) { setOutType(outType); - this.typeParemeters = typeParameters; + this.typeParameters = typeParameters; this.receiver = receiver; this.expectedThisObject = expectedThisObject; @@ -131,10 +128,14 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab this.setter = setter; } + public void setVisibility(@NotNull Visibility visibility) { + this.visibility = visibility; + } + @NotNull @Override public List getTypeParameters() { - return typeParemeters; + return typeParameters; } @NotNull @@ -206,8 +207,16 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab private PropertyDescriptor doSubstitute(TypeSubstitutor originalSubstitutor, DeclarationDescriptor newOwner, Modality newModality, boolean preserveOriginal, boolean copyOverrides, Kind kind) { + final PropertyDescriptor thisProperty = this; PropertyDescriptor substitutedDescriptor = new PropertyDescriptor(preserveOriginal ? getOriginal() : this, newOwner, - getAnnotations(), newModality, getVisibility(), isVar(), isObjectDeclaration(), getName(), kind); + getAnnotations(), newModality, isVar(), isObjectDeclaration(), getName(), kind) { + @NotNull + @Override + public Visibility getVisibility() { + // visibility of property can be not set yet + return thisProperty.getVisibility(); + } + }; List substitutedTypeParameters = Lists.newArrayList(); TypeSubstitutor substitutor = DescriptorSubstitutor.substituteTypeParameters(getTypeParameters(), originalSubstitutor, substitutedDescriptor, substitutedTypeParameters); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/SimpleFunctionDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/SimpleFunctionDescriptorImpl.java index ac23688c067..25e9ccd15d8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/SimpleFunctionDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/SimpleFunctionDescriptorImpl.java @@ -50,18 +50,19 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme super(containingDeclaration, original, annotations, name, kind); } - public SimpleFunctionDescriptorImpl initialize(@Nullable JetType receiverType, - @NotNull ReceiverDescriptor expectedThisObject, - @NotNull List typeParameters, - @NotNull List unsubstitutedValueParameters, - @Nullable JetType unsubstitutedReturnType, - @Nullable Modality modality, - @NotNull Visibility visibility, - boolean isInline) { - SimpleFunctionDescriptorImpl result = (SimpleFunctionDescriptorImpl)super.initialize(receiverType, expectedThisObject, typeParameters, unsubstitutedValueParameters, - unsubstitutedReturnType, modality, visibility); - result.isInline = isInline; - return result; + public SimpleFunctionDescriptorImpl initialize( + @Nullable JetType receiverType, + @NotNull ReceiverDescriptor expectedThisObject, + @NotNull List typeParameters, + @NotNull List unsubstitutedValueParameters, + @Nullable JetType unsubstitutedReturnType, + @Nullable Modality modality, + @NotNull Visibility visibility, + boolean isInline) { + super.initialize(receiverType, expectedThisObject, typeParameters, unsubstitutedValueParameters, unsubstitutedReturnType, modality); + setVisibility(visibility); + this.isInline = isInline; + return this; } @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index 6f5ce199989..7e8f10a329b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -482,17 +482,16 @@ public class DescriptorResolver { @NotNull JetClassOrObject objectDeclaration, @NotNull ClassDescriptor classDescriptor, BindingTrace trace) { JetModifierList modifierList = objectDeclaration.getModifierList(); - Visibility visibility = resolveVisibilityFromModifiers(objectDeclaration.getModifierList()); PropertyDescriptor propertyDescriptor = new PropertyDescriptor( containingDeclaration, annotationResolver.createAnnotationStubs(modifierList, trace), Modality.FINAL, - visibility, false, true, JetPsiUtil.safeName(objectDeclaration.getName()), CallableMemberDescriptor.Kind.DECLARATION ); + propertyDescriptor.setVisibility(resolveVisibilityFromModifiers(modifierList)); propertyDescriptor.setType(classDescriptor.getDefaultType(), Collections.emptyList(), DescriptorUtils.getExpectedThisObjectIfNeeded(containingDeclaration), ReceiverDescriptor.NO_RECEIVER); propertyDescriptor.initialize(createDefaultGetter(propertyDescriptor), null); JetObjectDeclarationName nameAsDeclaration = objectDeclaration.getNameAsDeclaration(); @@ -544,12 +543,12 @@ public class DescriptorResolver { containingDeclaration, annotationResolver.resolveAnnotations(scope, modifierList, trace), resolveModalityFromModifiers(property.getModifierList(), defaultModality), - resolveVisibilityFromModifiers(property.getModifierList()), isVar, false, JetPsiUtil.safeName(property.getName()), CallableMemberDescriptor.Kind.DECLARATION ); + propertyDescriptor.setVisibility(resolveVisibilityFromModifiers(property.getModifierList())); List typeParameterDescriptors; JetScope scopeWithTypeParameters; @@ -683,6 +682,9 @@ public class DescriptorResolver { } return Visibilities.PROTECTED; } + if (modifierList.hasModifier(JetTokens.INTERNAL_KEYWORD)) { + return Visibilities.INTERNAL; + } return defaultVisibility; } @@ -859,12 +861,12 @@ public class DescriptorResolver { classDescriptor, annotationResolver.resolveAnnotations(scope, modifierList, trace), resolveModalityFromModifiers(parameter.getModifierList(), Modality.FINAL), - resolveVisibilityFromModifiers(parameter.getModifierList()), isMutable, false, name == null ? "" : name, CallableMemberDescriptor.Kind.DECLARATION ); + propertyDescriptor.setVisibility(resolveVisibilityFromModifiers(parameter.getModifierList())); propertyDescriptor.setType(type, Collections.emptyList(), DescriptorUtils.getExpectedThisObjectIfNeeded(classDescriptor), ReceiverDescriptor.NO_RECEIVER); PropertyGetterDescriptor getter = createDefaultGetter(propertyDescriptor); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java index 6ed1135cd21..a4400b4a6eb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java @@ -155,7 +155,8 @@ public class JetStandardClasses { Collections.emptyList(), true, Variance.OUT_VARIANCE, "T" + (j + 1), j); parameters.add(typeParameterDescriptor); - PropertyDescriptor propertyDescriptor = new PropertyDescriptor(classDescriptor, Collections.emptyList(), Modality.FINAL, Visibilities.PUBLIC, false, false, "_" + (j + 1), CallableMemberDescriptor.Kind.DECLARATION); + PropertyDescriptor propertyDescriptor = new PropertyDescriptor(classDescriptor, Collections.emptyList(), Modality.FINAL, false, false, "_" + (j + 1), CallableMemberDescriptor.Kind.DECLARATION); + propertyDescriptor.setVisibility(Visibilities.PUBLIC); propertyDescriptor.setType(typeParameterDescriptor.getDefaultType(), Collections.emptyList(), classDescriptor.getImplicitReceiver(), ReceiverDescriptor.NO_RECEIVER); PropertyGetterDescriptor getterDescriptor = new PropertyGetterDescriptor(propertyDescriptor, Collections.emptyList(), Modality.FINAL, Visibilities.PUBLIC, false, true, CallableMemberDescriptor.Kind.DECLARATION); getterDescriptor.initialize(typeParameterDescriptor.getDefaultType());