From 930402d9100ea7cd3f417e21ccced3b312645d2f Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 29 Sep 2015 15:22:14 +0300 Subject: [PATCH] Incorrect 'inner' usage is diagnosed by parent, not by target --- .../src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt | 3 ++- .../diagnostics/tests/dataClasses/innerOuterDataClass.kt | 2 +- .../testData/diagnostics/tests/inner/illegalModifier.kt | 8 ++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt index b56fd3f2688..9829b6790de 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt @@ -53,7 +53,8 @@ public object ModifierCheckerCore { OPEN_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, INNER_CLASS, INTERFACE, MEMBER_PROPERTY, MEMBER_FUNCTION), FINAL_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, INNER_CLASS, ENUM_CLASS, OBJECT, MEMBER_PROPERTY, MEMBER_FUNCTION), SEALED_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, INNER_CLASS), - INNER_KEYWORD to EnumSet.of(INNER_CLASS), + // We should have also CLASS_ONLY here because INNER_CLASS is not always perfectly identified + INNER_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS), OVERRIDE_KEYWORD to EnumSet.of(MEMBER_PROPERTY, MEMBER_FUNCTION), PRIVATE_KEYWORD to EnumSet.of(CLASS, MEMBER_FUNCTION, TOP_LEVEL_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, MEMBER_PROPERTY, TOP_LEVEL_PROPERTY, CONSTRUCTOR), diff --git a/compiler/testData/diagnostics/tests/dataClasses/innerOuterDataClass.kt b/compiler/testData/diagnostics/tests/dataClasses/innerOuterDataClass.kt index 0bdee110e0a..9105efa3ea0 100644 --- a/compiler/testData/diagnostics/tests/dataClasses/innerOuterDataClass.kt +++ b/compiler/testData/diagnostics/tests/dataClasses/innerOuterDataClass.kt @@ -1 +1 @@ -inner data class Outer(val x: Int) \ No newline at end of file +inner data class Outer(val x: Int) \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inner/illegalModifier.kt b/compiler/testData/diagnostics/tests/inner/illegalModifier.kt index a98607e2ed9..f4282b6bf84 100644 --- a/compiler/testData/diagnostics/tests/inner/illegalModifier.kt +++ b/compiler/testData/diagnostics/tests/inner/illegalModifier.kt @@ -1,7 +1,7 @@ inner fun foo() {} inner val prop = 42 -inner class A +inner class A inner interface B inner object C @@ -23,16 +23,16 @@ enum class H { } interface K { - inner class L + inner class L } object N { - inner class O + inner class O } class P { companion object { - inner class Q + inner class Q } }