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<KtParameter> VALUE_PARAMETER_WITH_NO_TYPE_ANNOTATION = DiagnosticFactory0.create(ERROR);
|
||||||
|
|
||||||
DiagnosticFactory0<KtNamedFunction> NO_TAIL_CALLS_FOUND = DiagnosticFactory0.create(WARNING, DECLARATION_SIGNATURE);
|
DiagnosticFactory0<KtNamedFunction> NO_TAIL_CALLS_FOUND = DiagnosticFactory0.create(WARNING, TAILREC_MODIFIER);
|
||||||
DiagnosticFactoryForDeprecation0<KtNamedFunction> TAILREC_ON_VIRTUAL_MEMBER = DiagnosticFactoryForDeprecation0.create(LanguageFeature.ProhibitTailrecOnVirtualMember, DECLARATION_SIGNATURE);
|
DiagnosticFactoryForDeprecation0<KtNamedFunction> TAILREC_ON_VIRTUAL_MEMBER = DiagnosticFactoryForDeprecation0.create(LanguageFeature.ProhibitTailrecOnVirtualMember, TAILREC_MODIFIER);
|
||||||
|
|
||||||
DiagnosticFactory0<KtParameter>
|
DiagnosticFactory0<KtParameter>
|
||||||
ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE = DiagnosticFactory0.create(ERROR, PARAMETER_DEFAULT_VALUE);
|
ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE = DiagnosticFactory0.create(ERROR, PARAMETER_DEFAULT_VALUE);
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ open class A {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class B : 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()
|
return if (s == "OK") s else foo()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
class C {
|
class C {
|
||||||
companion object {
|
companion object {
|
||||||
<!NO_TAIL_CALLS_FOUND!>tailrec fun rec(i: Int)<!> {
|
<!NO_TAIL_CALLS_FOUND!>tailrec<!> fun rec(i: Int) {
|
||||||
if (i <= 0) return
|
if (i <= 0) return
|
||||||
C.<!NON_TAIL_RECURSIVE_CALL!>rec<!>(i - 1)
|
C.<!NON_TAIL_RECURSIVE_CALL!>rec<!>(i - 1)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// WITH_STDLIB
|
// WITH_STDLIB
|
||||||
|
|
||||||
<!NO_TAIL_CALLS_FOUND!>tailrec fun foo1()<!> {
|
<!NO_TAIL_CALLS_FOUND!>tailrec<!> fun foo1() {
|
||||||
run {
|
run {
|
||||||
<!NON_TAIL_RECURSIVE_CALL!>foo1<!>()
|
<!NON_TAIL_RECURSIVE_CALL!>foo1<!>()
|
||||||
}
|
}
|
||||||
@@ -9,13 +9,13 @@
|
|||||||
fun myRun(f: () -> Unit) = f()
|
fun myRun(f: () -> Unit) = f()
|
||||||
|
|
||||||
|
|
||||||
<!NO_TAIL_CALLS_FOUND!>tailrec fun foo2()<!> {
|
<!NO_TAIL_CALLS_FOUND!>tailrec<!> fun foo2() {
|
||||||
myRun {
|
myRun {
|
||||||
<!NON_TAIL_RECURSIVE_CALL!>foo2<!>()
|
<!NON_TAIL_RECURSIVE_CALL!>foo2<!>()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<!NO_TAIL_CALLS_FOUND!>tailrec fun foo3()<!> {
|
<!NO_TAIL_CALLS_FOUND!>tailrec<!> fun foo3() {
|
||||||
fun bar() {
|
fun bar() {
|
||||||
<!NON_TAIL_RECURSIVE_CALL!>foo3<!>()
|
<!NON_TAIL_RECURSIVE_CALL!>foo3<!>()
|
||||||
}
|
}
|
||||||
@@ -23,7 +23,7 @@ fun myRun(f: () -> Unit) = f()
|
|||||||
}
|
}
|
||||||
|
|
||||||
class A {
|
class A {
|
||||||
<!NO_TAIL_CALLS_FOUND!>tailrec fun foo4()<!> {
|
<!NO_TAIL_CALLS_FOUND!>tailrec<!> fun foo4() {
|
||||||
with(this) {
|
with(this) {
|
||||||
<!NON_TAIL_RECURSIVE_CALL!>foo4<!>()
|
<!NON_TAIL_RECURSIVE_CALL!>foo4<!>()
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-15
@@ -1,15 +1,15 @@
|
|||||||
//!LANGUAGE: -ProhibitTailrecOnVirtualMember
|
//!LANGUAGE: -ProhibitTailrecOnVirtualMember
|
||||||
|
|
||||||
open class A {
|
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)
|
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)
|
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)
|
baz(y)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,15 +38,15 @@ open class B : A() {
|
|||||||
|
|
||||||
|
|
||||||
open class C : 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)
|
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)
|
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)
|
baz(y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -66,15 +66,15 @@ object D : A() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sealed class E : 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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
baz(y)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,15 +134,15 @@ enum class G {
|
|||||||
|
|
||||||
G1;
|
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)
|
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)
|
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)
|
baz(y)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,11 +6,11 @@ open class A {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class B: 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()
|
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)
|
gav(y)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -22,7 +22,7 @@ class Bar {
|
|||||||
this.bar2()
|
this.bar2()
|
||||||
}
|
}
|
||||||
|
|
||||||
<!NO_TAIL_CALLS_FOUND!>tailrec fun bar3()<!> {
|
<!NO_TAIL_CALLS_FOUND!>tailrec<!> fun bar3() {
|
||||||
Bar.<!NON_TAIL_RECURSIVE_CALL!>bar3<!>()
|
Bar.<!NON_TAIL_RECURSIVE_CALL!>bar3<!>()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@ enum class E {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
C {
|
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`.
|
C.rec() // resolution goes to `E.rec`. Hence the resolved symbol is considered different from `C.rec`.
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user