Make FE1.0 report tailrec diagnostics on the keyword
This commit is contained in:
committed by
teamcityserver
parent
5252effb10
commit
a5435c0efc
@@ -644,8 +644,8 @@ public interface Errors {
|
||||
|
||||
DiagnosticFactory0<KtParameter> VALUE_PARAMETER_WITH_NO_TYPE_ANNOTATION = DiagnosticFactory0.create(ERROR);
|
||||
|
||||
DiagnosticFactory0<KtNamedFunction> NO_TAIL_CALLS_FOUND = DiagnosticFactory0.create(WARNING, DECLARATION_SIGNATURE);
|
||||
DiagnosticFactoryForDeprecation0<KtNamedFunction> TAILREC_ON_VIRTUAL_MEMBER = DiagnosticFactoryForDeprecation0.create(LanguageFeature.ProhibitTailrecOnVirtualMember, DECLARATION_SIGNATURE);
|
||||
DiagnosticFactory0<KtNamedFunction> NO_TAIL_CALLS_FOUND = DiagnosticFactory0.create(WARNING, TAILREC_MODIFIER);
|
||||
DiagnosticFactoryForDeprecation0<KtNamedFunction> TAILREC_ON_VIRTUAL_MEMBER = DiagnosticFactoryForDeprecation0.create(LanguageFeature.ProhibitTailrecOnVirtualMember, TAILREC_MODIFIER);
|
||||
|
||||
DiagnosticFactory0<KtParameter>
|
||||
ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE = DiagnosticFactory0.create(ERROR, PARAMETER_DEFAULT_VALUE);
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ open class A {
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
<!NO_TAIL_CALLS_FOUND!>override tailrec fun foo(s: String): String<!> {
|
||||
override <!NO_TAIL_CALLS_FOUND!>tailrec<!> fun foo(s: String): String {
|
||||
return if (s == "OK") s else foo()
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@
|
||||
|
||||
class C {
|
||||
companion object {
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec fun rec(i: Int)<!> {
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec<!> fun rec(i: Int) {
|
||||
if (i <= 0) return
|
||||
C.<!NON_TAIL_RECURSIVE_CALL!>rec<!>(i - 1)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// WITH_STDLIB
|
||||
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec fun foo1()<!> {
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec<!> fun foo1() {
|
||||
run {
|
||||
<!NON_TAIL_RECURSIVE_CALL!>foo1<!>()
|
||||
}
|
||||
@@ -9,13 +9,13 @@
|
||||
fun myRun(f: () -> Unit) = f()
|
||||
|
||||
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec fun foo2()<!> {
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec<!> fun foo2() {
|
||||
myRun {
|
||||
<!NON_TAIL_RECURSIVE_CALL!>foo2<!>()
|
||||
}
|
||||
}
|
||||
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec fun foo3()<!> {
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec<!> fun foo3() {
|
||||
fun bar() {
|
||||
<!NON_TAIL_RECURSIVE_CALL!>foo3<!>()
|
||||
}
|
||||
@@ -23,7 +23,7 @@ fun myRun(f: () -> Unit) = f()
|
||||
}
|
||||
|
||||
class A {
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec fun foo4()<!> {
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec<!> fun foo4() {
|
||||
with(this) {
|
||||
<!NON_TAIL_RECURSIVE_CALL!>foo4<!>()
|
||||
}
|
||||
|
||||
+15
-15
@@ -1,15 +1,15 @@
|
||||
//!LANGUAGE: -ProhibitTailrecOnVirtualMember
|
||||
|
||||
open class A {
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec open fun foo(x: Int)<!> {
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec<!> open fun foo(x: Int) {
|
||||
foo(x)
|
||||
}
|
||||
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>internal tailrec open fun bar(y: Int)<!> {
|
||||
internal <!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec<!> open fun bar(y: Int) {
|
||||
bar(y)
|
||||
}
|
||||
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>protected tailrec open fun baz(y: Int)<!> {
|
||||
protected <!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec<!> open fun baz(y: Int) {
|
||||
baz(y)
|
||||
}
|
||||
|
||||
@@ -38,15 +38,15 @@ open class B : A() {
|
||||
|
||||
|
||||
open class C : A() {
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec override fun foo(x: Int)<!> {
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec<!> override fun foo(x: Int) {
|
||||
foo(x)
|
||||
}
|
||||
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec override fun bar(y: Int)<!> {
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec<!> override fun bar(y: Int) {
|
||||
bar(y)
|
||||
}
|
||||
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec override fun baz(y: Int)<!> {
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec<!> override fun baz(y: Int) {
|
||||
baz(y)
|
||||
}
|
||||
}
|
||||
@@ -66,15 +66,15 @@ object D : A() {
|
||||
}
|
||||
|
||||
sealed class E : A() {
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec override fun foo(x: Int)<!> {
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec<!> override fun foo(x: Int) {
|
||||
foo(x)
|
||||
}
|
||||
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec override fun bar(y: Int)<!> {
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec<!> override fun bar(y: Int) {
|
||||
bar(y)
|
||||
}
|
||||
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec override fun baz(y: Int)<!> {
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec<!> override fun baz(y: Int) {
|
||||
baz(y)
|
||||
}
|
||||
|
||||
@@ -109,15 +109,15 @@ enum class F {
|
||||
}
|
||||
};
|
||||
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec open fun foo(x: Int)<!> {
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec<!> open fun foo(x: Int) {
|
||||
foo(x)
|
||||
}
|
||||
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>internal tailrec open fun bar(y: Int)<!> {
|
||||
internal <!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec<!> open fun bar(y: Int) {
|
||||
bar(y)
|
||||
}
|
||||
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>protected tailrec open fun baz(y: Int)<!> {
|
||||
protected <!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec<!> open fun baz(y: Int) {
|
||||
baz(y)
|
||||
}
|
||||
|
||||
@@ -134,15 +134,15 @@ enum class G {
|
||||
|
||||
G1;
|
||||
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec open fun foo(x: Int)<!> {
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec<!> open fun foo(x: Int) {
|
||||
foo(x)
|
||||
}
|
||||
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>internal tailrec open fun bar(y: Int)<!> {
|
||||
internal <!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec<!> open fun bar(y: Int) {
|
||||
bar(y)
|
||||
}
|
||||
|
||||
<!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>protected tailrec open fun baz(y: Int)<!> {
|
||||
protected <!TAILREC_ON_VIRTUAL_MEMBER_WARNING!>tailrec<!> open fun baz(y: Int) {
|
||||
baz(y)
|
||||
}
|
||||
|
||||
|
||||
@@ -6,11 +6,11 @@ open class A {
|
||||
}
|
||||
|
||||
class B: A() {
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec override fun foo(x: Int)<!> {
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec<!> override fun foo(x: Int) {
|
||||
foo()
|
||||
}
|
||||
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec override fun gav(y: Int, z: Int)<!> {
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec<!> override fun gav(y: Int, z: Int) {
|
||||
gav(y)
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -22,7 +22,7 @@ class Bar {
|
||||
this.bar2()
|
||||
}
|
||||
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec fun bar3()<!> {
|
||||
<!NO_TAIL_CALLS_FOUND!>tailrec<!> fun bar3() {
|
||||
Bar.<!NON_TAIL_RECURSIVE_CALL!>bar3<!>()
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ enum class E {
|
||||
}
|
||||
},
|
||||
C {
|
||||
<!NO_TAIL_CALLS_FOUND!>override tailrec fun rec()<!> {
|
||||
override <!NO_TAIL_CALLS_FOUND!>tailrec<!> fun rec() {
|
||||
C.rec() // resolution goes to `E.rec`. Hence the resolved symbol is considered different from `C.rec`.
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user