Fixing failed tests: do not report anything on casts that can never succeed

This commit is contained in:
Andrey Breslav
2013-09-04 16:32:47 +04:00
parent e3079ac667
commit e3175c66e8
11 changed files with 26 additions and 26 deletions
@@ -221,21 +221,21 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
if (!CastDiagnosticsUtil.isCastPossible(actualType, targetType, platformToKotlinClassMap)) {
context.trace.report(CAST_NEVER_SUCCEEDS.on(expression.getOperationReference()));
}
JetTypeChecker typeChecker = JetTypeChecker.INSTANCE;
if (!typeChecker.isSubtypeOf(targetType, actualType)) {
if (typeChecker.isSubtypeOf(actualType, targetType)) {
context.trace.report(USELESS_CAST_STATIC_ASSERT_IS_FINE.on(expression.getOperationReference()));
}
}
else {
JetTypeChecker typeChecker = JetTypeChecker.INSTANCE;
// Upcast?
if (typeChecker.isSubtypeOf(actualType, targetType)) {
context.trace.report(USELESS_CAST.on(expression.getOperationReference()));
}
else {
if (CastDiagnosticsUtil.isCastErased(actualType, targetType, typeChecker)) {
context.trace.report(Errors.UNCHECKED_CAST.on(expression, actualType, targetType));
if (!typeChecker.isSubtypeOf(targetType, actualType)) {
// proper upcast: String as Any
context.trace.report(USELESS_CAST_STATIC_ASSERT_IS_FINE.on(expression.getOperationReference()));
}
else {
// cast to itself: String as String
context.trace.report(USELESS_CAST.on(expression.getOperationReference()));
}
}
else if (CastDiagnosticsUtil.isCastErased(actualType, targetType, typeChecker)) {
context.trace.report(Errors.UNCHECKED_CAST.on(expression, actualType, targetType));
}
}
}
@@ -29,7 +29,7 @@ fun test(<!UNUSED_PARAMETER!>l<!> : <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>java.util
<!UNRESOLVED_REFERENCE!>List<!><Int>
val <!UNUSED_VARIABLE!>o<!> = "sdf" <!CAST_NEVER_SUCCEEDS!>as<!> <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>Object<!>
val <!UNUSED_VARIABLE!>o<!> = "sdf" as <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>Object<!>
try {
// ...
@@ -1,2 +1,2 @@
fun ff(c: MutableCollection<String>) = c <!CAST_NEVER_SUCCEEDS!>as<!> MutableList<Int>
fun ff(c: MutableCollection<String>) = <!UNCHECKED_CAST!>c as MutableList<Int><!>
@@ -23,7 +23,7 @@ class MyProperty<R, T> {
public fun get(thisRef: R, desc: PropertyMetadata): T {
println("get $thisRef ${desc.name}")
return null <!CAST_NEVER_SUCCEEDS!>as<!> T
return null as T
}
public fun set(thisRef: R, desc: PropertyMetadata, value: T) {
@@ -1,11 +1,11 @@
// For KT-3491
fun <T: Any?> test1(t: Any?): Any {
return t as T ?: ""
return <!UNCHECKED_CAST!>t as T<!> ?: ""
}
fun <T: Any> test2(t: Any?): Any {
return <!USELESS_ELVIS!>t as T<!> ?: ""
return <!UNCHECKED_CAST, USELESS_ELVIS!>t as T<!> ?: ""
}
fun <T: Any?> test3(t: Any?): Any {
@@ -6,6 +6,6 @@ open class AL {
trait ALE<T> : AL {
fun getOrNull(index: Int, value: T) : T {
return get(index) as? T ?: value
}
return <!UNCHECKED_CAST!>get(index) as? T<!> ?: value
}
}
@@ -1,11 +1,11 @@
// KT-398 Internal error when property initializes with function
class X<T>() {
val check = { (a : Any) -> a is T }
val check = { (a : Any) -> a is <!CANNOT_CHECK_FOR_ERASED!>T<!> }
}
fun box() : String {
if(X<String>().check(10)) return "fail"
if(!X<String>().check("lala")) return "fail"
return "OK"
}
}
@@ -1,11 +1,11 @@
// KT-399 Type argument inference not implemented for CALL_EXPRESSION
fun <T> getSameTypeChecker(<!UNUSED_PARAMETER!>obj<!>: T) : Function1<Any,Boolean> {
return { (a : Any) -> a is T }
return { (a : Any) -> a is <!CANNOT_CHECK_FOR_ERASED!>T<!> }
}
fun box() : String {
if(getSameTypeChecker<String>("lala")(10)) return "fail"
if(!getSameTypeChecker<String>("mama")("lala")) return "fail"
return "OK"
}
}
@@ -3,5 +3,5 @@
class IdUnavailableException() : Exception() {}
fun <T : Any> T.getJavaClass() : Class<T> {
return <!UNCHECKED_CAST!>((this <!CAST_NEVER_SUCCEEDS!>as<!> <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>Object<!>).getClass()) as Class<T><!> // Some error here, because of Exception() used above. ?!!!
return <!UNCHECKED_CAST!>((this as <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>Object<!>).getClass()) as Class<T><!> // Some error here, because of Exception() used above. ?!!!
}
@@ -5,7 +5,7 @@ class TypeInfo<T>
fun <T> typeinfo() : TypeInfo<T> = null <!CAST_NEVER_SUCCEEDS!>as<!> TypeInfo<T>
fun <T> TypeInfo<T>.getJavaClass() : java.lang.Class<T> {
val t : <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>java.lang.Object<!> = this <!CAST_NEVER_SUCCEEDS!>as<!> <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>java.lang.Object<!>
val t : <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>java.lang.Object<!> = this as <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>java.lang.Object<!>
return <!UNCHECKED_CAST!>t.getClass() as java.lang.Class<T><!> // inferred type is Object but Serializable was expected
}
+1 -1
View File
@@ -27,7 +27,7 @@ fun test(<warning>l</warning> : List<Int>) {
<error>List</error><Int>
val <warning>o</warning> = "sdf" <warning>as</warning> <warning>Object</warning>
val <warning>o</warning> = "sdf" as <warning>Object</warning>
try {
// ...