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);
|
return markElement(nameIdentifier);
|
||||||
}
|
}
|
||||||
if (element instanceof JetObjectDeclaration) {
|
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);
|
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.JetParameter
|
||||||
import org.jetbrains.jet.lang.psi.JetClass
|
import org.jetbrains.jet.lang.psi.JetClass
|
||||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticFactory
|
import org.jetbrains.jet.lang.diagnostics.DiagnosticFactory
|
||||||
|
import org.jetbrains.jet.lang.psi.JetClassObject
|
||||||
|
|
||||||
public fun getJvmSignatureDiagnostics(element: PsiElement, otherDiagnostics: Diagnostics): Diagnostics? {
|
public fun getJvmSignatureDiagnostics(element: PsiElement, otherDiagnostics: Diagnostics): Diagnostics? {
|
||||||
fun doGetDiagnostics(): Diagnostics? {
|
fun doGetDiagnostics(): Diagnostics? {
|
||||||
@@ -46,19 +47,20 @@ public fun getJvmSignatureDiagnostics(element: PsiElement, otherDiagnostics: Dia
|
|||||||
return getDiagnosticsForClass(parentClass)
|
return getDiagnosticsForClass(parentClass)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (element is JetClassOrObject) {
|
||||||
if (parent is JetFile) {
|
return getDiagnosticsForClass(element)
|
||||||
if (element is JetClassOrObject) {
|
|
||||||
return getDiagnosticsForClass(element)
|
|
||||||
}
|
|
||||||
return getDiagnosticsForPackage(parent as JetFile)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parent is JetClassBody) {
|
when (parent) {
|
||||||
val parentsParent = parent?.getParent()
|
is JetFile -> {
|
||||||
|
return getDiagnosticsForPackage(parent as JetFile)
|
||||||
|
}
|
||||||
|
is JetClassBody -> {
|
||||||
|
val parentsParent = parent?.getParent()
|
||||||
|
|
||||||
if (parentsParent is JetClassOrObject) {
|
if (parentsParent is JetClassOrObject) {
|
||||||
return getDiagnosticsForClass(parentsParent)
|
return getDiagnosticsForClass(parentsParent)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
@@ -125,7 +127,6 @@ class FilteredJvmDiagnostics(val jvmDiagnostics: Diagnostics, val otherDiagnosti
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun ConflictingJvmDeclarationsData.higherThan(other: ConflictingJvmDeclarationsData): Boolean {
|
private fun ConflictingJvmDeclarationsData.higherThan(other: ConflictingJvmDeclarationsData): Boolean {
|
||||||
return when (other.classOrigin.originKind) {
|
return when (other.classOrigin.originKind) {
|
||||||
PACKAGE_PART -> this.classOrigin.originKind == PACKAGE_FACADE
|
PACKAGE_PART -> this.classOrigin.originKind == PACKAGE_FACADE
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
class C {
|
class C {
|
||||||
class object {}
|
<!CONFLICTING_JVM_DECLARATIONS!>class object<!> {}
|
||||||
|
|
||||||
<!CONFLICTING_JVM_DECLARATIONS!>val `object$`<!> = C
|
<!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
|
||||||
|
}
|
||||||
@@ -7,7 +7,7 @@ trait B {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class C {
|
class C {
|
||||||
class <!CANNOT_INFER_VISIBILITY!>object<!> : A, B {
|
<!CANNOT_INFER_VISIBILITY!>class object<!> : A, B {
|
||||||
fun bar() = null
|
fun bar() = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2855,6 +2855,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
|
|||||||
doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/classObjectCopiedField.kt");
|
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")
|
@TestMetadata("dataClassCopy.kt")
|
||||||
public void testDataClassCopy() throws Exception {
|
public void testDataClassCopy() throws Exception {
|
||||||
doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/specialNames/dataClassCopy.kt");
|
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")
|
@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 static class DuplicateJvmSignature extends AbstractJetPsiCheckerTest {
|
||||||
public void testAllFilesPresentInDuplicateJvmSignature() throws Exception {
|
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);
|
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")
|
@TestMetadata("idea/testData/checker/duplicateJvmSignature/functionAndProperty")
|
||||||
public static class FunctionAndProperty extends AbstractJetPsiCheckerTest {
|
public static class FunctionAndProperty extends AbstractJetPsiCheckerTest {
|
||||||
public void testAllFilesPresentInFunctionAndProperty() throws Exception {
|
public void testAllFilesPresentInFunctionAndProperty() throws Exception {
|
||||||
@@ -510,6 +523,7 @@ public class JetPsiCheckerTestGenerated extends AbstractJetPsiCheckerTest {
|
|||||||
public static Test innerSuite() {
|
public static Test innerSuite() {
|
||||||
TestSuite suite = new TestSuite("DuplicateJvmSignature");
|
TestSuite suite = new TestSuite("DuplicateJvmSignature");
|
||||||
suite.addTestSuite(DuplicateJvmSignature.class);
|
suite.addTestSuite(DuplicateJvmSignature.class);
|
||||||
|
suite.addTestSuite(Fields.class);
|
||||||
suite.addTestSuite(FunctionAndProperty.class);
|
suite.addTestSuite(FunctionAndProperty.class);
|
||||||
suite.addTestSuite(TraitImpl.class);
|
suite.addTestSuite(TraitImpl.class);
|
||||||
return suite;
|
return suite;
|
||||||
|
|||||||
Reference in New Issue
Block a user