"abstract" modifier on enum class is an error

#KT-3454 Fixed
This commit is contained in:
Pavel V. Talanov
2014-10-09 22:21:03 +04:00
parent 6eae62c235
commit c04b52561e
17 changed files with 29 additions and 10 deletions
@@ -174,6 +174,8 @@ public interface Errors {
DiagnosticFactory0<JetModifierListOwner> OPEN_MODIFIER_IN_ENUM = DiagnosticFactory0
.create(ERROR, modifierSetPosition(JetTokens.OPEN_KEYWORD));
DiagnosticFactory0<JetModifierListOwner> ABSTRACT_MODIFIER_IN_ENUM = DiagnosticFactory0
.create(ERROR, modifierSetPosition(JetTokens.ABSTRACT_KEYWORD));
DiagnosticFactory0<PsiElement> CLASS_IN_SUPERTYPE_FOR_ENUM = DiagnosticFactory0.create(ERROR);
@@ -98,6 +98,7 @@ public class DefaultErrorMessages {
MAP.put(ABSTRACT_MODIFIER_IN_TRAIT, "Modifier ''abstract'' is redundant in trait");
MAP.put(OPEN_MODIFIER_IN_TRAIT, "Modifier ''open'' is redundant in trait");
MAP.put(OPEN_MODIFIER_IN_ENUM, "Modifier ''open'' is not applicable for enum class");
MAP.put(ABSTRACT_MODIFIER_IN_ENUM, "Modifier ''abstract'' is not applicable for enum class");
MAP.put(ILLEGAL_ENUM_ANNOTATION, "Annotation ''enum'' is only applicable for class");
MAP.put(REDUNDANT_MODIFIER_IN_GETTER, "Visibility modifiers are redundant in getter");
MAP.put(TRAIT_CAN_NOT_BE_FINAL, "Trait cannot be final");
@@ -545,6 +545,9 @@ public class DeclarationsChecker {
if (aClass.hasModifier(JetTokens.OPEN_KEYWORD)) {
trace.report(OPEN_MODIFIER_IN_ENUM.on(aClass));
}
if (aClass.hasModifier(JetTokens.ABSTRACT_KEYWORD)) {
trace.report(ABSTRACT_MODIFIER_IN_ENUM.on(aClass));
}
}
private void checkEnumEntry(@NotNull JetEnumEntry enumEntry, @NotNull ClassDescriptor classDescriptor) {
@@ -68,7 +68,7 @@ fun t1() {
b = <!UNUSED_VALUE!>3<!>
}
abstract enum class ProtocolState {
enum class ProtocolState {
WAITING {
override fun signal() = ProtocolState.TALKING
}
@@ -116,7 +116,7 @@ package uninitialized_reassigned_variables {
}
}
internal abstract enum class ProtocolState : kotlin.Enum<uninitialized_reassigned_variables.ProtocolState> {
internal final enum class ProtocolState : kotlin.Enum<uninitialized_reassigned_variables.ProtocolState> {
private constructor ProtocolState()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -1,3 +1,3 @@
package abstract
abstract enum class MyAbstractEnum() {}
<!ABSTRACT_MODIFIER_IN_ENUM!>abstract<!> enum class MyAbstractEnum() {}
@@ -1,4 +1,4 @@
abstract enum class ProtocolState {
enum class ProtocolState {
WAITING {
override fun signal() = ProtocolState.TALKING
}
@@ -2,7 +2,7 @@ package
internal fun box(): kotlin.String
internal abstract enum class ProtocolState : kotlin.Enum<ProtocolState> {
internal final enum class ProtocolState : kotlin.Enum<ProtocolState> {
private constructor ProtocolState()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -1,4 +1,4 @@
abstract enum class ProtocolState {
enum class ProtocolState {
WAITING {
override fun signal() = ProtocolState.TALKING
}
@@ -23,7 +23,7 @@ internal final enum class Foo</*0*/ T> : kotlin.Enum<Foo<T>> {
public final /*synthesized*/ fun values(): kotlin.Array<Foo<T>>
}
internal abstract enum class ProtocolState : kotlin.Enum<ProtocolState> {
internal final enum class ProtocolState : kotlin.Enum<ProtocolState> {
private constructor ProtocolState()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -186,6 +186,7 @@ public class QuickFixRegistrar {
QuickFixes.factories.put(PARAMETER_NAME_CHANGED_ON_OVERRIDE, RenameParameterToMatchOverriddenMethodFix.createFactory());
QuickFixes.factories.put(OPEN_MODIFIER_IN_ENUM, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OPEN_KEYWORD));
QuickFixes.factories.put(ABSTRACT_MODIFIER_IN_ENUM, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(ABSTRACT_KEYWORD));
QuickFixes.factories.put(ILLEGAL_ENUM_ANNOTATION, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(ENUM_KEYWORD));
QuickFixes.factories.put(NESTED_CLASS_NOT_ALLOWED, AddModifierFix.createFactory(INNER_KEYWORD));
+1 -1
View File
@@ -116,7 +116,7 @@ enum class MyEnum() {
<error>abstract</error> fun j() {}
}
abstract enum class MyAbstractEnum() {}
<error>abstract</error> enum class MyAbstractEnum() {}
//properties
<error>val a: Int</error>
+1 -1
View File
@@ -1,4 +1,4 @@
abstract enum class ProtocolState {
enum class ProtocolState {
WAITING {
override fun signal() = ProtocolState.TALKING
}
+1 -1
View File
@@ -1,4 +1,4 @@
abstract enum class ProtocolState {
enum class ProtocolState {
WAITING {
override fun signal() = ProtocolState.TALKING
}
@@ -0,0 +1,3 @@
// "Make 'A' not abstract" "true"
<caret>enum class A() {
}
@@ -0,0 +1,3 @@
// "Make 'A' not abstract" "true"
<caret>abstract enum class A() {
}
@@ -1716,6 +1716,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
@InnerTestClasses({Modifiers.AddOpenToClassDeclaration.class})
@RunWith(org.jetbrains.jet.JUnit3RunnerWithInners.class)
public static class Modifiers extends AbstractQuickFixTest {
@TestMetadata("beforeAbstractModifierInEnum.kt")
public void testAbstractModifierInEnum() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/modifiers/beforeAbstractModifierInEnum.kt");
doTest(fileName);
}
@TestMetadata("beforeAddInnerModifier.kt")
public void testAddInnerModifier() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/modifiers/beforeAddInnerModifier.kt");