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 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 parent = element.getParent();
if (parent instanceof JetClassObject) {
PsiElement classKeyword = ((JetClassObject) parent).getClassKeywordNode();
PsiElement classKeyword = ((JetClassObject) parent).getClassKeyword();
PsiElement start = classKeyword == null ? objectKeyword : classKeyword;
return markRange(start, objectKeyword);
}
@@ -43,9 +43,8 @@ public class JetClassObject extends JetDeclarationStub<KotlinPlaceHolderStub<Jet
return getRequiredStubOrPsiChild(JetStubElementTypes.OBJECT_DECLARATION);
}
@Nullable @IfNotParsed
public PsiElement getClassKeywordNode() {
ASTNode keywordNode = getNode().findChildByType(JetTokens.CLASS_KEYWORD);
return keywordNode != null ? keywordNode.getPsi() : null;
@NotNull
public PsiElement getClassKeyword() {
return findChildByType(JetTokens.CLASS_KEYWORD);
}
}
@@ -1,13 +1,12 @@
package Jet86
class A {
class object {
val x = 1
}
<!MANY_CLASS_OBJECTS!>class object { // error
<!MANY_CLASS_OBJECTS!>class object<!> { // error
val x = 1
}<!>
}
}
class B() {
@@ -15,9 +14,9 @@ class B() {
}
object b {
<!CLASS_OBJECT_NOT_ALLOWED!>class object {
<!CLASS_OBJECT_NOT_ALLOWED!>class object<!> {
val x = 1
} // error<!>
} // error
}
val a = A.x
@@ -2,7 +2,7 @@
class A {
inner class B {
<!CLASS_OBJECT_NOT_ALLOWED!>class object { }<!>
<!CLASS_OBJECT_NOT_ALLOWED!>class object<!> { }
}
}
@@ -1,9 +1,9 @@
fun test() {
class A {
<!CLASS_OBJECT_NOT_ALLOWED!>class object {}<!>
<!CLASS_OBJECT_NOT_ALLOWED!>class object<!> {}
}
object {
<!CLASS_OBJECT_NOT_ALLOWED!>class object {}<!>
<!CLASS_OBJECT_NOT_ALLOWED!>class object<!> {}
}
}
@@ -2,9 +2,9 @@ enum class E {
FIRST
SECOND {
<!CLASS_OBJECT_NOT_ALLOWED!>class object {
<!CLASS_OBJECT_NOT_ALLOWED!>class object<!> {
fun foo() = 42
}<!>
}
}
}
@@ -4,8 +4,8 @@ class A<T> {
class B {
fun test() {
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<!>>
}
@@ -61,8 +61,7 @@ public class JetDeclarationMover extends AbstractJetUpDownMover {
@Override
public void visitClassObject(@NotNull JetClassObject classObject) {
PsiElement classKeyword = classObject.getClassKeywordNode();
if (classKeyword != null) memberSuspects.add(classKeyword);
memberSuspects.add(classObject.getClassKeyword());
}
@Override
+4 -4
View File
@@ -4,9 +4,9 @@ class A {
class object {
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
}</error>
}
}
class B() {
@@ -14,9 +14,9 @@ class 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
}</error>
}
// error
}