diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt index 9829b6790de..56736f80ded 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt @@ -47,6 +47,10 @@ public object ModifierCheckerCore { COMPATIBLE_FOR_CLASSES_ONLY } + private val defaultVisibilityTargets = EnumSet.of(CLASS_ONLY, OBJECT, INTERFACE, INNER_CLASS, ENUM_CLASS, ANNOTATION_CLASS, + MEMBER_FUNCTION, TOP_LEVEL_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, + MEMBER_PROPERTY, TOP_LEVEL_PROPERTY, CONSTRUCTOR) + private val possibleTargetMap = mapOf>( ENUM_KEYWORD to EnumSet.of(ENUM_CLASS), ABSTRACT_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, INNER_CLASS, INTERFACE, MEMBER_PROPERTY, MEMBER_FUNCTION), @@ -56,13 +60,11 @@ public object ModifierCheckerCore { // 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), - PUBLIC_KEYWORD to EnumSet.of(CLASS, MEMBER_FUNCTION, TOP_LEVEL_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, - MEMBER_PROPERTY, TOP_LEVEL_PROPERTY, CONSTRUCTOR), - INTERNAL_KEYWORD to EnumSet.of(CLASS, MEMBER_FUNCTION, TOP_LEVEL_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, - MEMBER_PROPERTY, TOP_LEVEL_PROPERTY, CONSTRUCTOR), - PROTECTED_KEYWORD to EnumSet.of(CLASS, MEMBER_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, MEMBER_PROPERTY, CONSTRUCTOR), + PRIVATE_KEYWORD to defaultVisibilityTargets, + PUBLIC_KEYWORD to defaultVisibilityTargets, + INTERNAL_KEYWORD to defaultVisibilityTargets, + PROTECTED_KEYWORD to EnumSet.of(CLASS_ONLY, OBJECT, INTERFACE, INNER_CLASS, ENUM_CLASS, ANNOTATION_CLASS, + MEMBER_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, MEMBER_PROPERTY, CONSTRUCTOR), IN_KEYWORD to EnumSet.of(TYPE_PARAMETER, TYPE_PROJECTION), OUT_KEYWORD to EnumSet.of(TYPE_PARAMETER, TYPE_PROJECTION), REIFIED_KEYWORD to EnumSet.of(TYPE_PARAMETER), diff --git a/compiler/testData/diagnostics/tests/modifiers/NoLocalVisibility.kt b/compiler/testData/diagnostics/tests/modifiers/NoLocalVisibility.kt new file mode 100644 index 00000000000..1e4ebc54578 --- /dev/null +++ b/compiler/testData/diagnostics/tests/modifiers/NoLocalVisibility.kt @@ -0,0 +1,6 @@ +fun foo() { + public class A + private class B + protected class C + internal class D +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/modifiers/NoLocalVisibility.txt b/compiler/testData/diagnostics/tests/modifiers/NoLocalVisibility.txt new file mode 100644 index 00000000000..65a6ac47e1f --- /dev/null +++ b/compiler/testData/diagnostics/tests/modifiers/NoLocalVisibility.txt @@ -0,0 +1,3 @@ +package + +public fun foo(): kotlin.Unit diff --git a/compiler/testData/diagnostics/tests/modifiers/repeatedModifiers.kt b/compiler/testData/diagnostics/tests/modifiers/repeatedModifiers.kt index eaefcd60fbc..0c98e10cf6c 100644 --- a/compiler/testData/diagnostics/tests/modifiers/repeatedModifiers.kt +++ b/compiler/testData/diagnostics/tests/modifiers/repeatedModifiers.kt @@ -31,7 +31,7 @@ public public val bar: Int = 1 public public fun foo(): Int = 1 fun test() { - public public class B(public public val z: Int = 1) { + public public class B(public public val z: Int = 1) { public public val y: Int = 2 public val x: Int diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java index 15987b12a4c..4d09ad49912 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -9156,6 +9156,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("NoLocalVisibility.kt") + public void testNoLocalVisibility() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/modifiers/NoLocalVisibility.kt"); + doTest(fileName); + } + @TestMetadata("primaryConstructorMissingKeyword.kt") public void testPrimaryConstructorMissingKeyword() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/modifiers/primaryConstructorMissingKeyword.kt");