Fixed highlighting range for errors in class object

This commit is contained in:
Valentin Kipyatkov
2014-10-31 14:11:01 +03:00
parent 65f66de597
commit f0b93f3de3
9 changed files with 29 additions and 24 deletions
@@ -51,7 +51,15 @@ public class PositioningStrategies {
} }
return markRange(objectKeyword, delegationSpecifierList); return markRange(objectKeyword, delegationSpecifierList);
} }
return super.mark(element); else if (element instanceof JetClassObject) {
JetClassObject classObject = (JetClassObject) element;
PsiElement classKeyword = classObject.getClassKeyword();
PsiElement objectKeyword = classObject.getObjectDeclaration().getObjectKeyword();
return markRange(classKeyword, objectKeyword);
}
else {
return super.mark(element);
}
} }
}; };
@@ -130,7 +138,7 @@ public class PositioningStrategies {
PsiElement objectKeyword = ((JetObjectDeclaration) element).getObjectKeyword(); PsiElement objectKeyword = ((JetObjectDeclaration) element).getObjectKeyword();
PsiElement parent = element.getParent(); PsiElement parent = element.getParent();
if (parent instanceof JetClassObject) { if (parent instanceof JetClassObject) {
PsiElement classKeyword = ((JetClassObject) parent).getClassKeywordNode(); PsiElement classKeyword = ((JetClassObject) parent).getClassKeyword();
PsiElement start = classKeyword == null ? objectKeyword : classKeyword; PsiElement start = classKeyword == null ? objectKeyword : classKeyword;
return markRange(start, objectKeyword); return markRange(start, objectKeyword);
} }
@@ -43,9 +43,8 @@ public class JetClassObject extends JetDeclarationStub<KotlinPlaceHolderStub<Jet
return getRequiredStubOrPsiChild(JetStubElementTypes.OBJECT_DECLARATION); return getRequiredStubOrPsiChild(JetStubElementTypes.OBJECT_DECLARATION);
} }
@Nullable @IfNotParsed @NotNull
public PsiElement getClassKeywordNode() { public PsiElement getClassKeyword() {
ASTNode keywordNode = getNode().findChildByType(JetTokens.CLASS_KEYWORD); return findChildByType(JetTokens.CLASS_KEYWORD);
return keywordNode != null ? keywordNode.getPsi() : null;
} }
} }
@@ -1,13 +1,12 @@
package Jet86 package Jet86
class A { class A {
class object { class object {
val x = 1 val x = 1
} }
<!MANY_CLASS_OBJECTS!>class object { // error <!MANY_CLASS_OBJECTS!>class object<!> { // error
val x = 1 val x = 1
}<!> }
} }
class B() { class B() {
@@ -15,9 +14,9 @@ class B() {
} }
object b { object b {
<!CLASS_OBJECT_NOT_ALLOWED!>class object { <!CLASS_OBJECT_NOT_ALLOWED!>class object<!> {
val x = 1 val x = 1
} // error<!> } // error
} }
val a = A.x val a = A.x
@@ -2,7 +2,7 @@
class A { class A {
inner class B { inner class B {
<!CLASS_OBJECT_NOT_ALLOWED!>class object { }<!> <!CLASS_OBJECT_NOT_ALLOWED!>class object<!> { }
} }
} }
@@ -1,9 +1,9 @@
fun test() { fun test() {
class A { class A {
<!CLASS_OBJECT_NOT_ALLOWED!>class object {}<!> <!CLASS_OBJECT_NOT_ALLOWED!>class object<!> {}
} }
object { object {
<!CLASS_OBJECT_NOT_ALLOWED!>class object {}<!> <!CLASS_OBJECT_NOT_ALLOWED!>class object<!> {}
} }
} }
@@ -2,9 +2,9 @@ enum class E {
FIRST FIRST
SECOND { SECOND {
<!CLASS_OBJECT_NOT_ALLOWED!>class object { <!CLASS_OBJECT_NOT_ALLOWED!>class object<!> {
fun foo() = 42 fun foo() = 42
}<!> }
} }
} }
@@ -4,8 +4,8 @@ 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<!>> {
<!CLASS_OBJECT_NOT_ALLOWED!>class object : P<<!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>W<!>, <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>T<!>> { <!CLASS_OBJECT_NOT_ALLOWED!>class 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<!>>
} }
@@ -61,8 +61,7 @@ public class JetDeclarationMover extends AbstractJetUpDownMover {
@Override @Override
public void visitClassObject(@NotNull JetClassObject classObject) { public void visitClassObject(@NotNull JetClassObject classObject) {
PsiElement classKeyword = classObject.getClassKeywordNode(); memberSuspects.add(classObject.getClassKeyword());
if (classKeyword != null) memberSuspects.add(classKeyword);
} }
@Override @Override
+4 -4
View File
@@ -4,9 +4,9 @@ class A {
class object { class object {
val x = 1 val x = 1
} }
<error>class object { // error <error descr="[MANY_CLASS_OBJECTS] Only one class object is allowed per class">class object</error> { // error
val x = 1 val x = 1
}</error> }
} }
class B() { class B() {
@@ -14,9 +14,9 @@ class B() {
} }
object b { object b {
<error>class object { <error descr="[CLASS_OBJECT_NOT_ALLOWED] A class object is not allowed here">class object</error> {
val x = 1 val x = 1
}</error> }
// error // error
} }