Added 'package member cannot be protected' error

This commit is contained in:
Svetlana Isakova
2012-03-29 20:44:04 +04:00
parent b0e301ae9f
commit aefabd132e
2 changed files with 16 additions and 7 deletions
@@ -125,6 +125,8 @@ public interface Errors {
DiagnosticFactory<JetPropertyAccessor> ABSTRACT_PROPERTY_WITH_GETTER = DiagnosticFactory.create(ERROR, "Property with getter implementation cannot be abstract");
DiagnosticFactory<JetPropertyAccessor> ABSTRACT_PROPERTY_WITH_SETTER = DiagnosticFactory.create(ERROR, "Property with setter implementation cannot be abstract");
DiagnosticFactory<PsiElement> PACKAGE_MEMBER_CANNOT_BE_PROTECTED = DiagnosticFactory.create(ERROR, "Package member cannot be protected");
DiagnosticFactory<PsiElement> GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY = DiagnosticFactory.create(ERROR, "Getter visibility must be the same as property visibility");
DiagnosticFactory<JetProperty> BACKING_FIELD_IN_TRAIT = DiagnosticFactory.create(ERROR, "Property in a trait cannot have a backing field", PositioningStrategies.POSITION_NAME_IDENTIFIER);
DiagnosticFactory<JetProperty> MUST_BE_INITIALIZED = DiagnosticFactory.create(ERROR, "Property must be initialized", PositioningStrategies.POSITION_NAME_IDENTIFIER);
@@ -71,7 +71,7 @@ public class DeclarationsChecker {
if (!context.completeAnalysisNeeded(aClass)) continue;
checkClass(aClass, classDescriptor);
checkModifiers(aClass.getModifierList());
checkModifiers(aClass.getModifierList(), classDescriptor);
}
Map<JetObjectDeclaration, MutableClassDescriptor> objects = context.getObjects();
@@ -90,7 +90,7 @@ public class DeclarationsChecker {
if (!context.completeAnalysisNeeded(function)) continue;
checkFunction(function, functionDescriptor);
checkModifiers(function.getModifierList());
checkModifiers(function.getModifierList(), functionDescriptor);
}
Map<JetProperty, PropertyDescriptor> properties = context.getProperties();
@@ -100,7 +100,7 @@ public class DeclarationsChecker {
if (!context.completeAnalysisNeeded(property)) continue;
checkProperty(property, propertyDescriptor);
checkModifiers(property.getModifierList());
checkModifiers(property.getModifierList(), propertyDescriptor);
}
}
@@ -162,7 +162,7 @@ public class DeclarationsChecker {
JetFunction function = (JetFunction) member;
hasDeferredType = function.getReturnTypeRef() == null && function.getBodyExpression() != null && !function.hasBlockBody();
}
if ((memberDescriptor.getVisibility() == Visibility.PUBLIC || memberDescriptor.getVisibility() == Visibility.PROTECTED) && hasDeferredType) {
if ((memberDescriptor.getVisibility().isPublicAPI()) && hasDeferredType) {
trace.report(PUBLIC_MEMBER_SHOULD_SPECIFY_TYPE.on(member));
}
}
@@ -297,9 +297,9 @@ public class DeclarationsChecker {
}
}
private void checkModifiers(@Nullable JetModifierList modifierList) {
private void checkModifiers(@Nullable JetModifierList modifierList, @NotNull DeclarationDescriptor descriptor) {
checkModalityModifiers(modifierList);
checkVisibilityModifiers(modifierList);
checkVisibilityModifiers(modifierList, descriptor);
}
private void checkModalityModifiers(@Nullable JetModifierList modifierList) {
@@ -310,9 +310,16 @@ public class DeclarationsChecker {
Lists.<JetToken>newArrayList(JetTokens.ABSTRACT_KEYWORD, JetTokens.OPEN_KEYWORD));
}
private void checkVisibilityModifiers(@Nullable JetModifierList modifierList) {
private void checkVisibilityModifiers(@Nullable JetModifierList modifierList, @NotNull DeclarationDescriptor descriptor) {
if (modifierList == null) return;
DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration();
if (containingDeclaration instanceof NamespaceDescriptor) {
if (modifierList.hasModifier(JetTokens.PROTECTED_KEYWORD)) {
trace.report(Errors.PACKAGE_MEMBER_CANNOT_BE_PROTECTED.on(modifierList.getModifierNode(JetTokens.PROTECTED_KEYWORD).getPsi()));
}
}
checkCompatibility(modifierList, Lists.newArrayList(JetTokens.PRIVATE_KEYWORD, JetTokens.PROTECTED_KEYWORD, JetTokens.PUBLIC_KEYWORD, JetTokens.INTERNAL_KEYWORD),
Lists.<JetToken>newArrayList(JetTokens.PROTECTED_KEYWORD, JetTokens.INTERNAL_KEYWORD));
}