Prohibit non-inner classes in enum entries since 1.3
This commit is contained in:
@@ -20,6 +20,7 @@ import com.google.common.collect.Maps;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.config.LanguageFeature;
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory1;
|
||||
@@ -202,6 +203,17 @@ public class ModifiersChecker {
|
||||
return;
|
||||
}
|
||||
|
||||
// Since 1.3, enum entries can contain inner classes only.
|
||||
// Companion objects are reported in ModifierCheckerCore.
|
||||
if (DescriptorUtils.isEnumEntry(containingClass) && !classDescriptor.isInner() && kind != DetailedClassKind.COMPANION_OBJECT) {
|
||||
DiagnosticFactory1<KtClassOrObject, String> diagnostic =
|
||||
languageVersionSettings.supportsFeature(LanguageFeature.NestedClassesInEnumEntryShouldBeInner)
|
||||
? NESTED_CLASS_NOT_ALLOWED
|
||||
: NESTED_CLASS_NOT_ALLOWED_SINCE_1_3;
|
||||
trace.report(diagnostic.on(ktClassOrObject, kind.withCapitalFirstLetter));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!classDescriptor.isInner() && (containingClass.isInner() || DescriptorUtils.isLocal(containingClass))) {
|
||||
trace.report(NESTED_CLASS_NOT_ALLOWED.on(ktClassOrObject, kind.withCapitalFirstLetter));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user