Report default object specific diagnostics on 'default' modifier

This commit is contained in:
Pavel V. Talanov
2015-03-06 16:21:58 +03:00
parent 012d25dbca
commit 5540f09751
10 changed files with 31 additions and 22 deletions
@@ -188,8 +188,8 @@ public interface Errors {
// Default objects // Default objects
DiagnosticFactory0<JetObjectDeclaration> MANY_DEFAULT_OBJECTS = DiagnosticFactory0.create(ERROR); DiagnosticFactory0<JetObjectDeclaration> MANY_DEFAULT_OBJECTS = DiagnosticFactory0.create(ERROR, DEFAULT_OBJECT);
DiagnosticFactory0<JetObjectDeclaration> DEFAULT_OBJECT_NOT_ALLOWED = DiagnosticFactory0.create(ERROR); DiagnosticFactory0<JetObjectDeclaration> DEFAULT_OBJECT_NOT_ALLOWED = DiagnosticFactory0.create(ERROR, DEFAULT_OBJECT);
// Objects // Objects
@@ -364,4 +364,13 @@ public object PositioningStrategies {
return markRange(element.getOperationReference(), element) return markRange(element.getOperationReference(), element)
} }
} }
public val DEFAULT_OBJECT: PositioningStrategy<JetObjectDeclaration> = object : PositioningStrategy<JetObjectDeclaration>() {
override fun mark(element: JetObjectDeclaration): List<TextRange> {
if (element.hasModifier(JetTokens.DEFAULT_KEYWORD)) {
return modifierSetPosition(JetTokens.DEFAULT_KEYWORD).mark(element)
}
return DEFAULT.mark(element)
}
}
} }
@@ -4,7 +4,7 @@ class A {
default <!REDECLARATION!>object<!> { default <!REDECLARATION!>object<!> {
val x = 1 val x = 1
} }
default <!MANY_DEFAULT_OBJECTS, REDECLARATION!>object<!> { <!MANY_DEFAULT_OBJECTS!>default<!> <!REDECLARATION!>object<!> {
val x = 1 val x = 1
} }
} }
@@ -13,10 +13,10 @@ class AA {
default object { default object {
val x = 1 val x = 1
} }
default <!MANY_DEFAULT_OBJECTS!>object A<!> { <!MANY_DEFAULT_OBJECTS!>default<!> object A {
val x = 1 val x = 1
} }
default <!MANY_DEFAULT_OBJECTS!>object AA<!> { <!MANY_DEFAULT_OBJECTS!>default<!> object AA {
val x = 1 val x = 1
} }
} }
@@ -26,7 +26,7 @@ class B() {
} }
object b { object b {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!> { <!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object {
val x = 1 val x = 1
} // error } // error
} }
@@ -2,7 +2,7 @@
class A { class A {
inner class B { inner class B {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!> { } <!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object { }
} }
} }
@@ -1,9 +1,9 @@
fun test() { fun test() {
class A { class A {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!> {} <!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object {}
} }
object { object {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!> {} <!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object {}
} }
} }
@@ -1,17 +1,17 @@
class A { class A {
inner class I { inner class I {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object A<!> <!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object A
default <!MANY_DEFAULT_OBJECTS, MANY_DEFAULT_OBJECTS, DEFAULT_OBJECT_NOT_ALLOWED!>object B<!> <!MANY_DEFAULT_OBJECTS, MANY_DEFAULT_OBJECTS, DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object B
default <!MANY_DEFAULT_OBJECTS, MANY_DEFAULT_OBJECTS, DEFAULT_OBJECT_NOT_ALLOWED!>object C<!> <!MANY_DEFAULT_OBJECTS, MANY_DEFAULT_OBJECTS, DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object C
} }
} }
object O { object O {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object A<!> <!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object A
default <!MANY_DEFAULT_OBJECTS, DEFAULT_OBJECT_NOT_ALLOWED!>object B<!> <!MANY_DEFAULT_OBJECTS, DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object B
default <!MANY_DEFAULT_OBJECTS, DEFAULT_OBJECT_NOT_ALLOWED!>object C<!> <!MANY_DEFAULT_OBJECTS, DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object C
} }
@@ -2,7 +2,7 @@ enum class E {
FIRST FIRST
SECOND { SECOND {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!> { <!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object {
fun foo() = 42 fun foo() = 42
} }
} }
@@ -4,7 +4,7 @@ class A<T> {
class B { class B {
fun test() { fun test() {
class C<W>() : P<W, <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>T<!>> { class C<W>() : P<W, <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>T<!>> {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!> : P<<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>W<!>, <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>T<!>> { <!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object : P<<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>W<!>, <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>T<!>> {
} }
inner class D : P<W, <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>T<!>> inner class D : P<W, <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>T<!>>
@@ -18,13 +18,13 @@ class C {
class D { class D {
default object A { default object A {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!> { <!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object {
} }
} }
} }
<!ILLEGAL_MODIFIER!>default<!> object G { <!ILLEGAL_MODIFIER!>default<!> object G {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!> <!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object
} }
<!ILLEGAL_MODIFIER!>default<!> trait H { <!ILLEGAL_MODIFIER!>default<!> trait H {
@@ -33,7 +33,7 @@ class D {
class J { class J {
default object C { default object C {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!> <!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object
} }
} }
+2 -2
View File
@@ -4,7 +4,7 @@ class A {
default object { default object {
val x = 1 val x = 1
} }
default <error descr="[MANY_DEFAULT_OBJECTS] Only one default object is allowed per class">object Another</error> { // error <error descr="[MANY_DEFAULT_OBJECTS] Only one default object is allowed per class">default</error> object Another { // error
val x = 1 val x = 1
} }
} }
@@ -14,7 +14,7 @@ class B() {
} }
object b { object b {
default <error descr="[DEFAULT_OBJECT_NOT_ALLOWED] A default object is not allowed here">object</error> { <error descr="[DEFAULT_OBJECT_NOT_ALLOWED] A default object is not allowed here">default</error> object {
val x = 1 val x = 1
} }
// error // error