diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index 40b7d0f7004..78639a42e48 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -188,8 +188,8 @@ public interface Errors { // Default objects - DiagnosticFactory0 MANY_DEFAULT_OBJECTS = DiagnosticFactory0.create(ERROR); - DiagnosticFactory0 DEFAULT_OBJECT_NOT_ALLOWED = DiagnosticFactory0.create(ERROR); + DiagnosticFactory0 MANY_DEFAULT_OBJECTS = DiagnosticFactory0.create(ERROR, DEFAULT_OBJECT); + DiagnosticFactory0 DEFAULT_OBJECT_NOT_ALLOWED = DiagnosticFactory0.create(ERROR, DEFAULT_OBJECT); // Objects diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt index 9e17d56173a..79e4ac441d2 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt @@ -364,4 +364,13 @@ public object PositioningStrategies { return markRange(element.getOperationReference(), element) } } + + public val DEFAULT_OBJECT: PositioningStrategy = object : PositioningStrategy() { + override fun mark(element: JetObjectDeclaration): List { + if (element.hasModifier(JetTokens.DEFAULT_KEYWORD)) { + return modifierSetPosition(JetTokens.DEFAULT_KEYWORD).mark(element) + } + return DEFAULT.mark(element) + } + } } diff --git a/compiler/testData/diagnostics/tests/classObjects/ClassObjects.kt b/compiler/testData/diagnostics/tests/classObjects/ClassObjects.kt index f22b74f6d02..e4411ab055b 100644 --- a/compiler/testData/diagnostics/tests/classObjects/ClassObjects.kt +++ b/compiler/testData/diagnostics/tests/classObjects/ClassObjects.kt @@ -4,7 +4,7 @@ class A { default object { val x = 1 } - default object { + default object { val x = 1 } } @@ -13,10 +13,10 @@ class AA { default object { val x = 1 } - default object A { + default object A { val x = 1 } - default object AA { + default object AA { val x = 1 } } @@ -26,7 +26,7 @@ class B() { } object b { - default object { + default object { val x = 1 } // error } diff --git a/compiler/testData/diagnostics/tests/classObjects/InnerClassClassObject.kt b/compiler/testData/diagnostics/tests/classObjects/InnerClassClassObject.kt index b2b0a974141..f0c0f89aedd 100644 --- a/compiler/testData/diagnostics/tests/classObjects/InnerClassClassObject.kt +++ b/compiler/testData/diagnostics/tests/classObjects/InnerClassClassObject.kt @@ -2,7 +2,7 @@ class A { inner class B { - default object { } + default object { } } } diff --git a/compiler/testData/diagnostics/tests/classObjects/classObjectInLocalClass.kt b/compiler/testData/diagnostics/tests/classObjects/classObjectInLocalClass.kt index b4f81f9f6c4..396f9b9cb6e 100644 --- a/compiler/testData/diagnostics/tests/classObjects/classObjectInLocalClass.kt +++ b/compiler/testData/diagnostics/tests/classObjects/classObjectInLocalClass.kt @@ -1,9 +1,9 @@ fun test() { class A { - default object {} + default object {} } object { - default object {} + default object {} } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/classObjects/multipleDissallowedDefaultObjects.kt b/compiler/testData/diagnostics/tests/classObjects/multipleDissallowedDefaultObjects.kt index 0f715883c8f..44646856ba5 100644 --- a/compiler/testData/diagnostics/tests/classObjects/multipleDissallowedDefaultObjects.kt +++ b/compiler/testData/diagnostics/tests/classObjects/multipleDissallowedDefaultObjects.kt @@ -1,17 +1,17 @@ class A { inner class I { - default object A + default object A - default object B + default object B - default object C + default object C } } object O { - default object A + default object A - default object B + default object B - default object C + default object C } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/enum/enumEntryCannotHaveClassObject.kt b/compiler/testData/diagnostics/tests/enum/enumEntryCannotHaveClassObject.kt index 11e7cff36f7..c176631cdc7 100644 --- a/compiler/testData/diagnostics/tests/enum/enumEntryCannotHaveClassObject.kt +++ b/compiler/testData/diagnostics/tests/enum/enumEntryCannotHaveClassObject.kt @@ -2,7 +2,7 @@ enum class E { FIRST SECOND { - default object { + default object { fun foo() = 42 } } diff --git a/compiler/testData/diagnostics/tests/inner/deepInnerClass.kt b/compiler/testData/diagnostics/tests/inner/deepInnerClass.kt index b9316d1aa31..80ee5010332 100644 --- a/compiler/testData/diagnostics/tests/inner/deepInnerClass.kt +++ b/compiler/testData/diagnostics/tests/inner/deepInnerClass.kt @@ -4,7 +4,7 @@ class A { class B { fun test() { class C() : PT> { - default object : P<W, T> { + default object : P<W, T> { } inner class D : PT> diff --git a/compiler/testData/diagnostics/tests/modifiers/defaultModifier.kt b/compiler/testData/diagnostics/tests/modifiers/defaultModifier.kt index 6de9e74d10e..b64c14f5e44 100644 --- a/compiler/testData/diagnostics/tests/modifiers/defaultModifier.kt +++ b/compiler/testData/diagnostics/tests/modifiers/defaultModifier.kt @@ -18,13 +18,13 @@ class C { class D { default object A { - default object { + default object { } } } default object G { - default object + default object } default trait H { @@ -33,7 +33,7 @@ class D { class J { default object C { - default object + default object } } diff --git a/idea/testData/checker/ClassObjects.kt b/idea/testData/checker/ClassObjects.kt index 8f3b7a7a751..2243485dbd4 100644 --- a/idea/testData/checker/ClassObjects.kt +++ b/idea/testData/checker/ClassObjects.kt @@ -4,7 +4,7 @@ class A { default object { val x = 1 } - default object Another { // error + default object Another { // error val x = 1 } } @@ -14,7 +14,7 @@ class B() { } object b { - default object { + default object { val x = 1 } // error