Support reporting errors on class objects and any classes or objects contained anywhere
This commit is contained in:
@@ -99,7 +99,14 @@ public class PositioningStrategies {
|
||||
return markElement(nameIdentifier);
|
||||
}
|
||||
if (element instanceof JetObjectDeclaration) {
|
||||
return markElement(((JetObjectDeclaration) element).getObjectKeyword());
|
||||
PsiElement objectKeyword = ((JetObjectDeclaration) element).getObjectKeyword();
|
||||
PsiElement parent = element.getParent();
|
||||
if (parent instanceof JetClassObject) {
|
||||
PsiElement classKeyword = ((JetClassObject) parent).getClassKeywordNode();
|
||||
PsiElement start = classKeyword == null ? objectKeyword : classKeyword;
|
||||
return markRange(new TextRange(start.getTextRange().getStartOffset(), objectKeyword.getTextRange().getEndOffset()));
|
||||
}
|
||||
return markElement(objectKeyword);
|
||||
}
|
||||
return markElement(element);
|
||||
}
|
||||
|
||||
+12
-11
@@ -32,6 +32,7 @@ import org.jetbrains.jet.lang.diagnostics.DiagnosticFactory.*
|
||||
import org.jetbrains.jet.lang.psi.JetParameter
|
||||
import org.jetbrains.jet.lang.psi.JetClass
|
||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticFactory
|
||||
import org.jetbrains.jet.lang.psi.JetClassObject
|
||||
|
||||
public fun getJvmSignatureDiagnostics(element: PsiElement, otherDiagnostics: Diagnostics): Diagnostics? {
|
||||
fun doGetDiagnostics(): Diagnostics? {
|
||||
@@ -46,19 +47,20 @@ public fun getJvmSignatureDiagnostics(element: PsiElement, otherDiagnostics: Dia
|
||||
return getDiagnosticsForClass(parentClass)
|
||||
}
|
||||
}
|
||||
|
||||
if (parent is JetFile) {
|
||||
if (element is JetClassOrObject) {
|
||||
return getDiagnosticsForClass(element)
|
||||
}
|
||||
return getDiagnosticsForPackage(parent as JetFile)
|
||||
if (element is JetClassOrObject) {
|
||||
return getDiagnosticsForClass(element)
|
||||
}
|
||||
|
||||
if (parent is JetClassBody) {
|
||||
val parentsParent = parent?.getParent()
|
||||
when (parent) {
|
||||
is JetFile -> {
|
||||
return getDiagnosticsForPackage(parent as JetFile)
|
||||
}
|
||||
is JetClassBody -> {
|
||||
val parentsParent = parent?.getParent()
|
||||
|
||||
if (parentsParent is JetClassOrObject) {
|
||||
return getDiagnosticsForClass(parentsParent)
|
||||
if (parentsParent is JetClassOrObject) {
|
||||
return getDiagnosticsForClass(parentsParent)
|
||||
}
|
||||
}
|
||||
}
|
||||
return null
|
||||
@@ -125,7 +127,6 @@ class FilteredJvmDiagnostics(val jvmDiagnostics: Diagnostics, val otherDiagnosti
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun ConflictingJvmDeclarationsData.higherThan(other: ConflictingJvmDeclarationsData): Boolean {
|
||||
return when (other.classOrigin.originKind) {
|
||||
PACKAGE_PART -> this.classOrigin.originKind == PACKAGE_FACADE
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
class C {
|
||||
class object {}
|
||||
<!CONFLICTING_JVM_DECLARATIONS!>class object<!> {}
|
||||
|
||||
<!CONFLICTING_JVM_DECLARATIONS!>val `object$`<!> = C
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
class C {
|
||||
<!CONFLICTING_JVM_DECLARATIONS!>class object<!> {
|
||||
<!CONFLICTING_JVM_DECLARATIONS!>val `object$`<!> = this
|
||||
}
|
||||
|
||||
val `object$` = C
|
||||
}
|
||||
@@ -10,4 +10,4 @@ object Impl : D, E {
|
||||
override fun foo() {}
|
||||
}
|
||||
|
||||
val obj: D = <!MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>object<!> : D by Impl, E by Impl {}
|
||||
val obj: D = <!MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>object<!> : D by Impl, E by Impl {}
|
||||
@@ -7,7 +7,7 @@ trait B {
|
||||
}
|
||||
|
||||
class C {
|
||||
class <!CANNOT_INFER_VISIBILITY!>object<!> : A, B {
|
||||
<!CANNOT_INFER_VISIBILITY!>class object<!> : A, B {
|
||||
fun bar() = null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2855,6 +2855,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
|
||||
doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/classObjectCopiedField.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("classObjectCopiedFieldObject.kt")
|
||||
public void testClassObjectCopiedFieldObject() throws Exception {
|
||||
doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/classObjectCopiedFieldObject.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("dataClassCopy.kt")
|
||||
public void testDataClassCopy() throws Exception {
|
||||
doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/dataClassCopy.kt");
|
||||
|
||||
Reference in New Issue
Block a user