Skip to content

Commit a3baca8

Browse files
committed
Drop KotlinTarget.INNER_CLASS entry
In most of the cases it was used together with CLASS_ONLY and vice versa They only case when CLASS_ONLY was used without INNER_CLASS is possibleParentTargetMap.COMPANION_KEYWORD. But after diagnostic NESTED_OBJECT_NOT_ALLOWED has been introduced, there's no sense in the restriction of exactly the companion's parent For clarification see test data changed
1 parent d1b17f0 commit a3baca8

File tree

7 files changed

+29
-34
lines changed

7 files changed

+29
-34
lines changed

compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ public void checkModifiersForDeclaration(@NotNull KtDeclaration modifierListOwne
228228
private void checkObjectInsideInnerClass(@NotNull KtDeclaration modifierListOwner, @NotNull MemberDescriptor descriptor) {
229229
if (modifierListOwner instanceof KtObjectDeclaration) {
230230
KtObjectDeclaration ktObject = (KtObjectDeclaration) modifierListOwner;
231-
if (!ktObject.isLocal() && !ktObject.isCompanion() && isIllegalNestedClass(descriptor)) {
231+
if (!ktObject.isLocal() && isIllegalNestedClass(descriptor)) {
232232
trace.report(NESTED_OBJECT_NOT_ALLOWED.on(ktObject));
233233
}
234234
}

compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -54,31 +54,30 @@ object ModifierCheckerCore {
5454
COMPATIBLE_FOR_CLASSES_ONLY
5555
}
5656

57-
private val defaultVisibilityTargets = EnumSet.of(CLASS_ONLY, OBJECT, INTERFACE, INNER_CLASS, ENUM_CLASS, ANNOTATION_CLASS,
57+
private val defaultVisibilityTargets = EnumSet.of(CLASS_ONLY, OBJECT, INTERFACE, ENUM_CLASS, ANNOTATION_CLASS,
5858
MEMBER_FUNCTION, TOP_LEVEL_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER,
5959
MEMBER_PROPERTY, TOP_LEVEL_PROPERTY, CONSTRUCTOR, TYPEALIAS)
6060

6161
val possibleTargetMap = mapOf<KtModifierKeywordToken, Set<KotlinTarget>>(
6262
ENUM_KEYWORD to EnumSet.of(ENUM_CLASS),
63-
ABSTRACT_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, INNER_CLASS, INTERFACE, MEMBER_PROPERTY, MEMBER_FUNCTION),
64-
OPEN_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, INNER_CLASS, INTERFACE, MEMBER_PROPERTY, MEMBER_FUNCTION),
65-
FINAL_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, INNER_CLASS, ENUM_CLASS, OBJECT, MEMBER_PROPERTY, MEMBER_FUNCTION),
66-
SEALED_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS),
67-
// We should have also CLASS_ONLY here because INNER_CLASS is not always perfectly identified
68-
INNER_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS),
63+
ABSTRACT_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, INTERFACE, MEMBER_PROPERTY, MEMBER_FUNCTION),
64+
OPEN_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, INTERFACE, MEMBER_PROPERTY, MEMBER_FUNCTION),
65+
FINAL_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, ENUM_CLASS, OBJECT, MEMBER_PROPERTY, MEMBER_FUNCTION),
66+
SEALED_KEYWORD to EnumSet.of(CLASS_ONLY),
67+
INNER_KEYWORD to EnumSet.of(CLASS_ONLY),
6968
OVERRIDE_KEYWORD to EnumSet.of(MEMBER_PROPERTY, MEMBER_FUNCTION),
7069
PRIVATE_KEYWORD to defaultVisibilityTargets,
7170
PUBLIC_KEYWORD to defaultVisibilityTargets,
7271
INTERNAL_KEYWORD to defaultVisibilityTargets,
73-
PROTECTED_KEYWORD to EnumSet.of(CLASS_ONLY, OBJECT, INTERFACE, INNER_CLASS, ENUM_CLASS, ANNOTATION_CLASS,
72+
PROTECTED_KEYWORD to EnumSet.of(CLASS_ONLY, OBJECT, INTERFACE, ENUM_CLASS, ANNOTATION_CLASS,
7473
MEMBER_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, MEMBER_PROPERTY, CONSTRUCTOR, TYPEALIAS),
7574
IN_KEYWORD to EnumSet.of(TYPE_PARAMETER, TYPE_PROJECTION),
7675
OUT_KEYWORD to EnumSet.of(TYPE_PARAMETER, TYPE_PROJECTION),
7776
REIFIED_KEYWORD to EnumSet.of(TYPE_PARAMETER),
7877
VARARG_KEYWORD to EnumSet.of(VALUE_PARAMETER, PROPERTY_PARAMETER),
7978
COMPANION_KEYWORD to EnumSet.of(OBJECT),
8079
LATEINIT_KEYWORD to EnumSet.of(MEMBER_PROPERTY),
81-
DATA_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS, LOCAL_CLASS),
80+
DATA_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS),
8281
INLINE_KEYWORD to EnumSet.of(FUNCTION, PROPERTY, PROPERTY_GETTER, PROPERTY_SETTER),
8382
NOINLINE_KEYWORD to EnumSet.of(VALUE_PARAMETER),
8483
TAILREC_KEYWORD to EnumSet.of(FUNCTION),
@@ -89,8 +88,8 @@ object ModifierCheckerCore {
8988
CONST_KEYWORD to EnumSet.of(MEMBER_PROPERTY, TOP_LEVEL_PROPERTY),
9089
OPERATOR_KEYWORD to EnumSet.of(FUNCTION),
9190
INFIX_KEYWORD to EnumSet.of(FUNCTION),
92-
HEADER_KEYWORD to EnumSet.of(TOP_LEVEL_FUNCTION, TOP_LEVEL_PROPERTY_WITHOUT_FIELD_OR_DELEGATE, CLASS_ONLY, OBJECT, INTERFACE, INNER_CLASS, ENUM_CLASS, ANNOTATION_CLASS),
93-
IMPL_KEYWORD to EnumSet.of(TOP_LEVEL_FUNCTION, MEMBER_FUNCTION, TOP_LEVEL_PROPERTY, MEMBER_PROPERTY, CONSTRUCTOR, CLASS_ONLY, OBJECT, INTERFACE, INNER_CLASS, ENUM_CLASS, ANNOTATION_CLASS, TYPEALIAS)
91+
HEADER_KEYWORD to EnumSet.of(TOP_LEVEL_FUNCTION, TOP_LEVEL_PROPERTY_WITHOUT_FIELD_OR_DELEGATE, CLASS_ONLY, OBJECT, INTERFACE, ENUM_CLASS, ANNOTATION_CLASS),
92+
IMPL_KEYWORD to EnumSet.of(TOP_LEVEL_FUNCTION, MEMBER_FUNCTION, TOP_LEVEL_PROPERTY, MEMBER_PROPERTY, CONSTRUCTOR, CLASS_ONLY, OBJECT, INTERFACE, ENUM_CLASS, ANNOTATION_CLASS, TYPEALIAS)
9493
)
9594

9695
val featureDependencies = mapOf(
@@ -121,16 +120,16 @@ object ModifierCheckerCore {
121120
)
122121

123122
val possibleParentTargetMap = mapOf<KtModifierKeywordToken, Set<KotlinTarget>>(
124-
INNER_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS, LOCAL_CLASS, ENUM_CLASS),
125-
OVERRIDE_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS, LOCAL_CLASS, OBJECT, OBJECT_LITERAL,
123+
INNER_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, ENUM_CLASS),
124+
OVERRIDE_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, OBJECT, OBJECT_LITERAL,
126125
INTERFACE, ENUM_CLASS, ENUM_ENTRY),
127-
PROTECTED_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS, LOCAL_CLASS, ENUM_CLASS, COMPANION_OBJECT),
128-
INTERNAL_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS, LOCAL_CLASS, OBJECT, OBJECT_LITERAL,
126+
PROTECTED_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, ENUM_CLASS, COMPANION_OBJECT),
127+
INTERNAL_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, OBJECT, OBJECT_LITERAL,
129128
ENUM_CLASS, ENUM_ENTRY, FILE),
130-
PRIVATE_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS, LOCAL_CLASS, OBJECT, OBJECT_LITERAL,
129+
PRIVATE_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, OBJECT, OBJECT_LITERAL,
131130
INTERFACE, ENUM_CLASS, ENUM_ENTRY, FILE),
132131
COMPANION_KEYWORD to EnumSet.of(CLASS_ONLY, ENUM_CLASS, INTERFACE),
133-
FINAL_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS, LOCAL_CLASS, OBJECT, OBJECT_LITERAL,
132+
FINAL_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, OBJECT, OBJECT_LITERAL,
134133
ENUM_CLASS, ENUM_ENTRY, ANNOTATION_CLASS, FILE)
135134
)
136135

compiler/testData/diagnostics/tests/classObjects/InnerClassClassObject.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
class A {
44
inner class B {
5-
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>companion<!> object { }
5+
companion <!NESTED_OBJECT_NOT_ALLOWED!>object<!> { }
66
}
77
}
88

@@ -22,4 +22,4 @@ class C {
2222
class D {
2323
companion object { }
2424
}
25-
}
25+
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
class A {
22
inner class I {
3-
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>companion<!> object A
3+
companion <!NESTED_OBJECT_NOT_ALLOWED!>object A<!>
44

5-
<!MANY_COMPANION_OBJECTS, WRONG_MODIFIER_CONTAINING_DECLARATION!>companion<!> object B
5+
<!MANY_COMPANION_OBJECTS!>companion<!> <!NESTED_OBJECT_NOT_ALLOWED!>object B<!>
66

7-
<!MANY_COMPANION_OBJECTS, WRONG_MODIFIER_CONTAINING_DECLARATION!>companion<!> object C
7+
<!MANY_COMPANION_OBJECTS!>companion<!> <!NESTED_OBJECT_NOT_ALLOWED!>object C<!>
88
}
99
}
1010

@@ -14,4 +14,4 @@ object O {
1414
<!MANY_COMPANION_OBJECTS, WRONG_MODIFIER_CONTAINING_DECLARATION!>companion<!> object B
1515

1616
<!MANY_COMPANION_OBJECTS, WRONG_MODIFIER_CONTAINING_DECLARATION!>companion<!> object C
17-
}
17+
}

compiler/testData/diagnostics/tests/inner/nestedObject.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ class Outer {
33
inner class Inner1 {
44
<!NESTED_OBJECT_NOT_ALLOWED!>object Obj1<!>
55

6-
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>companion<!> object Obj2
6+
companion <!NESTED_OBJECT_NOT_ALLOWED!>object Obj2<!>
77

88
inner class Inner2 {
99
<!NESTED_OBJECT_NOT_ALLOWED!>object Obj3<!>

core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/KotlinTarget.kt

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,13 @@ enum class KotlinTarget(val description: String, val isDefault: Boolean = true)
4444
STAR_PROJECTION("star projection", false),
4545
PROPERTY_PARAMETER("property constructor parameter", false),
4646

47-
CLASS_ONLY("class", false), // includes only top level classes and nested classes (but not enums, objects, interfaces, inner or local classes)
47+
CLASS_ONLY("class", false), // includes only top level classes and nested/inner classes (but not enums, objects, interfaces and local classes)
4848
OBJECT("object", false), // does not include OBJECT_LITERAL but DOES include COMPANION_OBJECT
4949
COMPANION_OBJECT("companion object", false),
5050
INTERFACE("interface", false),
5151
ENUM_CLASS("enum class", false),
5252
ENUM_ENTRY("enum entry", false),
5353

54-
INNER_CLASS("inner class", false),
5554
LOCAL_CLASS("local class", false),
5655

5756
LOCAL_FUNCTION("local function", false),
@@ -93,10 +92,8 @@ enum class KotlinTarget(val description: String, val isDefault: Boolean = true)
9392
fun classActualTargets(descriptor: ClassDescriptor): List<KotlinTarget> = when (descriptor.kind) {
9493
ClassKind.ANNOTATION_CLASS -> listOf(ANNOTATION_CLASS, CLASS)
9594
ClassKind.CLASS ->
96-
if (descriptor.isInner) {
97-
listOf(INNER_CLASS, CLASS)
98-
}
99-
else if (DescriptorUtils.isLocal(descriptor)) {
95+
// inner local classes should be CLASS_ONLY, not LOCAL_CLASS
96+
if (!descriptor.isInner && DescriptorUtils.isLocal(descriptor)) {
10097
listOf(LOCAL_CLASS, CLASS)
10198
}
10299
else {
@@ -132,4 +129,4 @@ enum class KotlinTarget(val description: String, val isDefault: Boolean = true)
132129
AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD to FIELD)
133130

134131
}
135-
}
132+
}

idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KeywordCompletion.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ object KeywordCompletion {
321321

322322
is KtEnumEntry -> listOf(ENUM_ENTRY)
323323

324-
is KtClassBody -> listOf(CLASS_ONLY, INTERFACE, OBJECT, ENUM_CLASS, ANNOTATION_CLASS, INNER_CLASS, MEMBER_FUNCTION, MEMBER_PROPERTY, FUNCTION, PROPERTY)
324+
is KtClassBody -> listOf(CLASS_ONLY, INTERFACE, OBJECT, ENUM_CLASS, ANNOTATION_CLASS, MEMBER_FUNCTION, MEMBER_PROPERTY, FUNCTION, PROPERTY)
325325

326326
is KtFile -> listOf(CLASS_ONLY, INTERFACE, OBJECT, ENUM_CLASS, ANNOTATION_CLASS, TOP_LEVEL_FUNCTION, TOP_LEVEL_PROPERTY, FUNCTION, PROPERTY)
327327

@@ -339,7 +339,6 @@ object KeywordCompletion {
339339
ownerDeclaration.isInterface() -> KotlinTarget.INTERFACE
340340
ownerDeclaration.isEnum() -> KotlinTarget.ENUM_CLASS
341341
ownerDeclaration.isAnnotation() -> KotlinTarget.ANNOTATION_CLASS
342-
ownerDeclaration.isInner() -> KotlinTarget.INNER_CLASS
343342
else -> KotlinTarget.CLASS_ONLY
344343
}
345344
}

0 commit comments

Comments
 (0)