Prohibit all modifiers for enum entries

#KT-2679 Fixed
This commit is contained in:
Alexander Udalov
2014-10-16 21:09:32 +04:00
parent 1f87bea78f
commit c071ac854e
4 changed files with 385 additions and 13 deletions
@@ -28,11 +28,13 @@ import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.diagnostics.Errors;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.constants.*;
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
import org.jetbrains.jet.lang.resolve.constants.StringValue;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lexer.JetModifierKeywordToken;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
@@ -66,11 +68,11 @@ public class ModifiersChecker {
@NotNull
private final BindingTrace trace;
@NotNull
private AdditionalCheckerProvider additionalCheckerProvider;
private final AdditionalCheckerProvider additionalCheckerProvider;
public ModifiersChecker(@NotNull BindingTrace trace, @NotNull AdditionalCheckerProvider provider) {
public ModifiersChecker(@NotNull BindingTrace trace, @NotNull AdditionalCheckerProvider additionalCheckerProvider) {
this.trace = trace;
additionalCheckerProvider = provider;
this.additionalCheckerProvider = additionalCheckerProvider;
}
public static ModifiersChecker create(@NotNull BindingTrace trace, @NotNull AdditionalCheckerProvider provider) {
@@ -78,10 +80,14 @@ public class ModifiersChecker {
}
public void checkModifiersForDeclaration(@NotNull JetDeclaration modifierListOwner, @NotNull MemberDescriptor descriptor) {
JetModifierList modifierList = modifierListOwner.getModifierList();
checkModalityModifiers(modifierList);
checkVisibilityModifiers(modifierListOwner, descriptor);
checkInnerModifier(modifierListOwner, descriptor);
if (modifierListOwner instanceof JetEnumEntry) {
checkIllegalInThisContextModifiers(modifierListOwner, Arrays.asList(MODIFIER_KEYWORDS_ARRAY));
}
else {
checkInnerModifier(modifierListOwner, descriptor);
checkModalityModifiers(modifierListOwner.getModifierList());
checkVisibilityModifiers(modifierListOwner, descriptor);
}
checkPlatformNameApplicability(descriptor);
runAnnotationCheckers(modifierListOwner, descriptor);
}
@@ -94,11 +100,11 @@ public class ModifiersChecker {
}
public void checkIllegalModalityModifiers(@NotNull JetModifierListOwner modifierListOwner) {
checkIllegalInThisContextModifiers(modifierListOwner.getModifierList(), MODALITY_MODIFIERS);
checkIllegalInThisContextModifiers(modifierListOwner, MODALITY_MODIFIERS);
}
public void checkIllegalVisibilityModifiers(@NotNull JetModifierListOwner modifierListOwner) {
checkIllegalInThisContextModifiers(modifierListOwner.getModifierList(), VISIBILITY_MODIFIERS);
checkIllegalInThisContextModifiers(modifierListOwner, VISIBILITY_MODIFIERS);
}
private void checkModalityModifiers(@Nullable JetModifierList modifierList) {
@@ -126,7 +132,7 @@ public class ModifiersChecker {
private void checkInnerModifier(@NotNull JetModifierListOwner modifierListOwner, @NotNull DeclarationDescriptor descriptor) {
if (modifierListOwner.hasModifier(INNER_KEYWORD)) {
if (isIllegalInner(descriptor)) {
checkIllegalInThisContextModifiers(modifierListOwner.getModifierList(), Collections.singletonList(INNER_KEYWORD));
checkIllegalInThisContextModifiers(modifierListOwner, Collections.singletonList(INNER_KEYWORD));
}
return;
}
@@ -221,10 +227,10 @@ public class ModifiersChecker {
}
public void checkIllegalInThisContextModifiers(
@Nullable JetModifierList modifierList,
@NotNull JetModifierListOwner modifierListOwner,
@NotNull Collection<JetModifierKeywordToken> illegalModifiers
) {
reportIllegalModifiers(modifierList, illegalModifiers, trace);
reportIllegalModifiers(modifierListOwner.getModifierList(), illegalModifiers, trace);
}
@NotNull