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:
Alexander Udalov
2014-11-26 18:50:04 +03:00
parent 6b8da062a4
commit a7b88e9485
159 changed files with 265 additions and 313 deletions
@@ -1,19 +1,18 @@
package kt939
//KT-939 CommonSupertypes erases scopes associated to types
fun compare(o1 : String?, o2 : String?) : Int {
val l1 = o1?.length ?: 0
val l2 = o2?.length ?: 0
val l1 = o1?.length() ?: 0
val l2 = o2?.length() ?: 0
return l1 - l2 // '-' is unresolved, because the type of l1 is Int with an empty member scope
}
//KT-1117 Unresolved reference to multiply sign
fun test() {
(System.getProperty("path.separator")?.length ?: 4) * 55 + 5
(System.getProperty("path.separator")?.length() ?: 4) * 55 + 5
val x = System.getProperty("path.separator")?.length ?: 4
val x = System.getProperty("path.separator")?.length() ?: 4
x * 55 + 5
}
@@ -4507,7 +4507,7 @@ package java {
public open fun insert(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.String!): java.lang.AbstractStringBuilder!
public open fun lastIndexOf(/*0*/ p0: kotlin.String!): kotlin.Int
public open fun lastIndexOf(/*0*/ p0: kotlin.String!, /*1*/ p1: kotlin.Int): kotlin.Int
public open fun length(): kotlin.Int
public open override /*1*/ fun length(): kotlin.Int
public open fun offsetByCodePoints(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int): kotlin.Int
public open fun replace(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int, /*2*/ p2: kotlin.String!): java.lang.AbstractStringBuilder!
public open fun reverse(): java.lang.AbstractStringBuilder!
@@ -8009,7 +8009,7 @@ package java {
public open fun lastIndexOf(/*0*/ p0: kotlin.String!): kotlin.Int
public open fun lastIndexOf(/*0*/ p0: kotlin.String!, /*1*/ p1: kotlin.Int): kotlin.Int
private open fun lastIndexOfSupplementary(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int): kotlin.Int
public open fun length(): kotlin.Int
public open override /*1*/ fun length(): kotlin.Int
public open fun matches(/*0*/ p0: kotlin.String!): kotlin.Boolean
public open fun offsetByCodePoints(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int): kotlin.Int
public open fun regionMatches(/*0*/ p0: kotlin.Boolean, /*1*/ p1: kotlin.Int, /*2*/ p2: kotlin.String!, /*3*/ p3: kotlin.Int, /*4*/ p4: kotlin.Int): kotlin.Boolean
@@ -8118,7 +8118,7 @@ package java {
public open override /*1*/ fun insert(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.String!): java.lang.StringBuffer!
public open override /*1*/ fun lastIndexOf(/*0*/ p0: kotlin.String!): kotlin.Int
public open override /*1*/ fun lastIndexOf(/*0*/ p0: kotlin.String!, /*1*/ p1: kotlin.Int): kotlin.Int
public open override /*1*/ fun length(): kotlin.Int
public open override /*2*/ fun length(): kotlin.Int
public open override /*1*/ fun offsetByCodePoints(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int): kotlin.Int
private open fun readObject(/*0*/ p0: java.io.ObjectInputStream!): kotlin.Unit
public open override /*1*/ fun replace(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int, /*2*/ p2: kotlin.String!): java.lang.StringBuffer!
@@ -8189,7 +8189,7 @@ package java {
public open override /*1*/ fun insert(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.String!): java.lang.StringBuilder!
public open override /*1*/ fun lastIndexOf(/*0*/ p0: kotlin.String!): kotlin.Int
public open override /*1*/ fun lastIndexOf(/*0*/ p0: kotlin.String!, /*1*/ p1: kotlin.Int): kotlin.Int
public open override /*1*/ /*fake_override*/ fun length(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun length(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun offsetByCodePoints(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int): kotlin.Int
private open fun readObject(/*0*/ p0: java.io.ObjectInputStream!): kotlin.Unit
public open override /*1*/ fun replace(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int, /*2*/ p2: kotlin.String!): java.lang.StringBuilder!