Do not report "accidental overrides" when "override" modifier is specified
This commit is contained in:
@@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.diagnostics.Errors.*
|
|||||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticFactory.*
|
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
|
||||||
|
|
||||||
public fun getJvmSignatureDiagnostics(element: PsiElement, otherDiagnostics: Diagnostics): Diagnostics? {
|
public fun getJvmSignatureDiagnostics(element: PsiElement, otherDiagnostics: Diagnostics): Diagnostics? {
|
||||||
fun doGetDiagnostics(): Diagnostics? {
|
fun doGetDiagnostics(): Diagnostics? {
|
||||||
@@ -72,7 +73,7 @@ public fun getJvmSignatureDiagnostics(element: PsiElement, otherDiagnostics: Dia
|
|||||||
class FilteredJvmDiagnostics(val jvmDiagnostics: Diagnostics, val otherDiagnostics: Diagnostics) : Diagnostics by jvmDiagnostics {
|
class FilteredJvmDiagnostics(val jvmDiagnostics: Diagnostics, val otherDiagnostics: Diagnostics) : Diagnostics by jvmDiagnostics {
|
||||||
|
|
||||||
private fun alreadyReported(psiElement: PsiElement): Boolean {
|
private fun alreadyReported(psiElement: PsiElement): Boolean {
|
||||||
return otherDiagnostics.forElement(psiElement).any { it.getFactory() in setOf(CONFLICTING_OVERLOADS, REDECLARATION) }
|
return otherDiagnostics.forElement(psiElement).any { it.getFactory() in setOf<DiagnosticFactory<*>>(CONFLICTING_OVERLOADS, REDECLARATION, NOTHING_TO_OVERRIDE) }
|
||||||
|| psiElement is JetPropertyAccessor && alreadyReported(psiElement.getParent()!!)
|
|| psiElement is JetPropertyAccessor && alreadyReported(psiElement.getParent()!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
trait B {
|
||||||
|
fun getX() = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
class C : B {
|
||||||
|
<!NOTHING_TO_OVERRIDE!>override<!> val x = 1
|
||||||
|
}
|
||||||
@@ -42,7 +42,7 @@ abstract class MyAbstractClass1 : MyTrait<Int>, MyAbstractClass<String>() {
|
|||||||
|
|
||||||
class <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>MyIllegalGenericClass1<!><T> : MyTrait<T>, MyAbstractClass<T>() {}
|
class <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>MyIllegalGenericClass1<!><T> : MyTrait<T>, MyAbstractClass<T>() {}
|
||||||
class <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>MyIllegalGenericClass2<!><T, R>(r : R) : MyTrait<T>, MyAbstractClass<R>() {
|
class <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>MyIllegalGenericClass2<!><T, R>(r : R) : MyTrait<T>, MyAbstractClass<R>() {
|
||||||
<!ACCIDENTAL_OVERRIDE!><!NOTHING_TO_OVERRIDE!>override<!> fun foo(r: R)<!> = r
|
<!NOTHING_TO_OVERRIDE!>override<!> fun foo(r: R) = r
|
||||||
<!CONFLICTING_OVERLOADS!><!NOTHING_TO_OVERRIDE!>override<!> val <T> pr : R<!> = r
|
<!CONFLICTING_OVERLOADS!><!NOTHING_TO_OVERRIDE!>override<!> val <T> pr : R<!> = r
|
||||||
}
|
}
|
||||||
class <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>MyIllegalClass1<!> : MyTrait<Int>, MyAbstractClass<String>() {}
|
class <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>MyIllegalClass1<!> : MyTrait<Int>, MyAbstractClass<String>() {}
|
||||||
|
|||||||
@@ -2593,6 +2593,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
|
|||||||
doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/accidentalOverrides/genericClassFunction.kt");
|
doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/accidentalOverrides/genericClassFunction.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("overridesNothing.kt")
|
||||||
|
public void testOverridesNothing() throws Exception {
|
||||||
|
doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/accidentalOverrides/overridesNothing.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("phantomClashWithSamAdapter.kt")
|
@TestMetadata("phantomClashWithSamAdapter.kt")
|
||||||
public void testPhantomClashWithSamAdapter() throws Exception {
|
public void testPhantomClashWithSamAdapter() throws Exception {
|
||||||
doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/accidentalOverrides/phantomClashWithSamAdapter.kt");
|
doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/accidentalOverrides/phantomClashWithSamAdapter.kt");
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
class <error>MyIllegalGenericClass1</error><T> : MyTrait<T>, MyAbstractClass<T>() {}
|
class <error>MyIllegalGenericClass1</error><T> : MyTrait<T>, MyAbstractClass<T>() {}
|
||||||
class <error>MyIllegalGenericClass2</error><T, R> : MyTrait<T>, MyAbstractClass<R>() {
|
class <error>MyIllegalGenericClass2</error><T, R> : MyTrait<T>, MyAbstractClass<R>() {
|
||||||
<error><error>override</error> fun foo(r: R)</error> = r
|
<error>override</error> fun foo(r: R) = r
|
||||||
}
|
}
|
||||||
class <error>MyIllegalClass1</error> : MyTrait<Int>, MyAbstractClass<String>() {}
|
class <error>MyIllegalClass1</error> : MyTrait<Int>, MyAbstractClass<String>() {}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user