Make CharSequence.length a function instead of property
And String.length as well. This is done for JVM interoperability: java.lang.CharSequence is an open class and has a function 'length()' which should be implemented in subclasses somehow. A minor unexpected effect of this is that String.length() is now a compile-time constant (it wasn't such as a property because properties are not supported in compile-time constant evaluation) #KT-3571 Fixed
This commit is contained in:
@@ -5,18 +5,18 @@ package kt244
|
||||
|
||||
fun f(s: String?) {
|
||||
if (s != null) {
|
||||
<!DEBUG_INFO_SMARTCAST!>s<!>.length //ok
|
||||
var <!UNUSED_VARIABLE!>i<!> = <!DEBUG_INFO_SMARTCAST!>s<!>.length //error: Only safe calls are allowed on a nullable receiver
|
||||
System.out.println(<!DEBUG_INFO_SMARTCAST!>s<!>.length) //error
|
||||
<!DEBUG_INFO_SMARTCAST!>s<!>.length() //ok
|
||||
var <!UNUSED_VARIABLE!>i<!> = <!DEBUG_INFO_SMARTCAST!>s<!>.length() //error: Only safe calls are allowed on a nullable receiver
|
||||
System.out.println(<!DEBUG_INFO_SMARTCAST!>s<!>.length()) //error
|
||||
}
|
||||
}
|
||||
|
||||
// more tests
|
||||
class A(a: String?) {
|
||||
val b = if (a != null) <!DEBUG_INFO_SMARTCAST!>a<!>.length else 1
|
||||
val b = if (a != null) <!DEBUG_INFO_SMARTCAST!>a<!>.length() else 1
|
||||
{
|
||||
if (a != null) {
|
||||
val <!UNUSED_VARIABLE!>c<!> = <!DEBUG_INFO_SMARTCAST!>a<!>.length
|
||||
val <!UNUSED_VARIABLE!>c<!> = <!DEBUG_INFO_SMARTCAST!>a<!>.length()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ class A(a: String?) {
|
||||
|
||||
{
|
||||
if (a is String) {
|
||||
i = <!DEBUG_INFO_SMARTCAST!>a<!>.length
|
||||
i = <!DEBUG_INFO_SMARTCAST!>a<!>.length()
|
||||
}
|
||||
else {
|
||||
i = 3
|
||||
|
||||
Reference in New Issue
Block a user