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");
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
class C {
|
||||
<error>class object</error> {
|
||||
<error>val `object$`</error> = this
|
||||
}
|
||||
|
||||
val `object$` = C
|
||||
}
|
||||
@@ -440,12 +440,25 @@ public class JetPsiCheckerTestGenerated extends AbstractJetPsiCheckerTest {
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/checker/duplicateJvmSignature")
|
||||
@InnerTestClasses({DuplicateJvmSignature.FunctionAndProperty.class, DuplicateJvmSignature.TraitImpl.class})
|
||||
@InnerTestClasses({DuplicateJvmSignature.Fields.class, DuplicateJvmSignature.FunctionAndProperty.class, DuplicateJvmSignature.TraitImpl.class})
|
||||
public static class DuplicateJvmSignature extends AbstractJetPsiCheckerTest {
|
||||
public void testAllFilesPresentInDuplicateJvmSignature() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/checker/duplicateJvmSignature"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/checker/duplicateJvmSignature/fields")
|
||||
public static class Fields extends AbstractJetPsiCheckerTest {
|
||||
public void testAllFilesPresentInFields() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/checker/duplicateJvmSignature/fields"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("classObjectCopiedFieldObject.kt")
|
||||
public void testClassObjectCopiedFieldObject() throws Exception {
|
||||
doTest("idea/testData/checker/duplicateJvmSignature/fields/classObjectCopiedFieldObject.kt");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/checker/duplicateJvmSignature/functionAndProperty")
|
||||
public static class FunctionAndProperty extends AbstractJetPsiCheckerTest {
|
||||
public void testAllFilesPresentInFunctionAndProperty() throws Exception {
|
||||
@@ -510,6 +523,7 @@ public class JetPsiCheckerTestGenerated extends AbstractJetPsiCheckerTest {
|
||||
public static Test innerSuite() {
|
||||
TestSuite suite = new TestSuite("DuplicateJvmSignature");
|
||||
suite.addTestSuite(DuplicateJvmSignature.class);
|
||||
suite.addTestSuite(Fields.class);
|
||||
suite.addTestSuite(FunctionAndProperty.class);
|
||||
suite.addTestSuite(TraitImpl.class);
|
||||
return suite;
|
||||
|
||||
Reference in New Issue
Block a user