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
DiagnosticFactory0<JetObjectDeclaration> MANY_DEFAULT_OBJECTS = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<JetObjectDeclaration> DEFAULT_OBJECT_NOT_ALLOWED = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<JetObjectDeclaration> MANY_DEFAULT_OBJECTS = DiagnosticFactory0.create(ERROR, DEFAULT_OBJECT);
DiagnosticFactory0<JetObjectDeclaration> DEFAULT_OBJECT_NOT_ALLOWED = DiagnosticFactory0.create(ERROR, DEFAULT_OBJECT);
// Objects
@@ -364,4 +364,13 @@ public object PositioningStrategies {
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<!> {
val x = 1
}
default <!MANY_DEFAULT_OBJECTS, REDECLARATION!>object<!> {
<!MANY_DEFAULT_OBJECTS!>default<!> <!REDECLARATION!>object<!> {
val x = 1
}
}
@@ -13,10 +13,10 @@ class AA {
default object {
val x = 1
}
default <!MANY_DEFAULT_OBJECTS!>object A<!> {
<!MANY_DEFAULT_OBJECTS!>default<!> object A {
val x = 1
}
default <!MANY_DEFAULT_OBJECTS!>object AA<!> {
<!MANY_DEFAULT_OBJECTS!>default<!> object AA {
val x = 1
}
}
@@ -26,7 +26,7 @@ class B() {
}
object b {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!> {
<!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object {
val x = 1
} // error
}
@@ -2,7 +2,7 @@
class A {
inner class B {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!> { }
<!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object { }
}
}
@@ -1,9 +1,9 @@
fun test() {
class A {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!> {}
<!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object {}
}
object {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!> {}
<!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object {}
}
}
@@ -1,17 +1,17 @@
class A {
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 {
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
SECOND {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!> {
<!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object {
fun foo() = 42
}
}
@@ -4,7 +4,7 @@ class A<T> {
class B {
fun test() {
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<!>>
@@ -18,13 +18,13 @@ class C {
class D {
default object A {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!> {
<!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object {
}
}
}
<!ILLEGAL_MODIFIER!>default<!> object G {
default <!DEFAULT_OBJECT_NOT_ALLOWED!>object<!>
<!DEFAULT_OBJECT_NOT_ALLOWED!>default<!> object
}
<!ILLEGAL_MODIFIER!>default<!> trait H {
@@ -33,7 +33,7 @@ class D {
class J {
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 {
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
}
}
@@ -14,7 +14,7 @@ class 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
}
// error