J2K: Get nullability from variable initializer when converting call

#KT-11534 In Progress
This commit is contained in:
Natalia Ukhorskaya
2016-03-25 19:49:49 +03:00
parent f3a3c0886f
commit 98c3b39f7e
16 changed files with 257 additions and 9 deletions
+2 -4
View File
@@ -1,5 +1,3 @@
// ERROR: Type mismatch: inferred type is Passenger.PassChild? but Passenger.PassChild was expected
// ERROR: Type mismatch: inferred type is Passenger.PassChild? but Passenger.PassChild was expected
class Passenger {
open class PassParent
@@ -18,9 +16,9 @@ class Passenger {
val pass = provideNullable(1)
if (1 == 2) {
assert(pass != null)
accept2(pass as PassChild?)
accept2((pass as PassChild?)!!)
}
accept2(pass as PassChild?)
accept2((pass as PassChild?)!!)
}
fun accept1(p: PassChild) {
@@ -0,0 +1,24 @@
import org.jetbrains.annotations.Nullable;
public class Test {
public String nullableString(int p) {
return p > 0 ? "response" : null;
}
private String nullableInitializerField = nullableString(3);
private String nullableInitializerFieldFinal = nullableString(3);
public String nullableInitializerPublicField = nullableString(3);
public void testProperty() {
nullableInitializerField = "aaa"
nullableInitializerField.charAt(0);
nullableInitializerFieldFinal.charAt(0);
nullableInitializerPublicField.charAt(0);
}
public void testLocalVariable() {
String nullableInitializerVal = nullableString(3);
nullableInitializerVal.charAt(0);
}
}
@@ -0,0 +1,24 @@
// ERROR: Type mismatch: inferred type is String? but String was expected
// ERROR: Type mismatch: inferred type is String? but String was expected
class Test {
fun nullableString(p: Int): String? {
return if (p > 0) "response" else null
}
private var nullableInitializerField: String = nullableString(3)
private val nullableInitializerFieldFinal = nullableString(3)
var nullableInitializerPublicField: String = nullableString(3)
fun testProperty() {
nullableInitializerField = "aaa"
nullableInitializerField[0]
nullableInitializerFieldFinal!![0]
nullableInitializerPublicField[0]
}
fun testLocalVariable() {
val nullableInitializerVal = nullableString(3)
nullableInitializerVal!![0]
}
}
@@ -0,0 +1,21 @@
import org.jetbrains.annotations.Nullable;
public class TestJava {
public Object nullableObj(int p) {
return p > 0 ? "response" : null;
}
public String nullableInitializerFieldCast = (String) nullableObj(3);
private String nullableInitializerPrivateFieldCast = (String) nullableObj(3);
public void testProperty() {
nullableInitializerFieldCast.charAt(0);
nullableInitializerPrivateFieldCast.charAt(0);
}
public void testLocalVariable() {
String nullableInitializerValCast = (String) nullableObj(3);
nullableInitializerValCast.charAt(0);
}
}
@@ -0,0 +1,20 @@
// ERROR: Type mismatch: inferred type is String? but String was expected
class TestJava {
fun nullableObj(p: Int): Any? {
return if (p > 0) "response" else null
}
var nullableInitializerFieldCast: String = nullableObj(3) as String?
private val nullableInitializerPrivateFieldCast = nullableObj(3) as String?
fun testProperty() {
nullableInitializerFieldCast[0]
nullableInitializerPrivateFieldCast!![0]
}
fun testLocalVariable() {
val nullableInitializerValCast = nullableObj(3) as String?
nullableInitializerValCast!![0]
}
}
@@ -0,0 +1,20 @@
import org.jetbrains.annotations.Nullable;
public class Test {
public String notNullString(int p) {
return "response";
}
private String notNullInitializerField = notNullString(3);
public String notNullInitializerPublicField = notNullString(3);
public void testProperty() {
notNullInitializerField.charAt(0);
notNullInitializerPublicField.charAt(0);
}
public void testLocalVariable() {
String notNullInitializerVal = notNullString(3);
notNullInitializerVal.charAt(0);
}
}
@@ -0,0 +1,18 @@
class Test {
fun notNullString(p: Int): String {
return "response"
}
private val notNullInitializerField = notNullString(3)
var notNullInitializerPublicField = notNullString(3)
fun testProperty() {
notNullInitializerField[0]
notNullInitializerPublicField[0]
}
fun testLocalVariable() {
val notNullInitializerVal = notNullString(3)
notNullInitializerVal[0]
}
}
@@ -0,0 +1,26 @@
import org.jetbrains.annotations.Nullable;
public class TestJava {
private String notNullInitializerFieldNullableUsage = "aaa";
private String notNullInitializerFieldNotNullUsage = "aaa";
private String nullInitializerFieldNullableUsage = null;
private String nullInitializerFieldNotNullUsage = null;
public void testNotNull(@Nullable Object obj) {
if (true) {
notNullInitializerFieldNullableUsage = (String) obj;
notNullInitializerFieldNotNullUsage = "str";
notNullInitializerFieldNullableUsage.charAt(1);
notNullInitializerFieldNotNullUsage.charAt(1);
}
else {
nullInitializerFieldNullableUsage = (String) obj;
nullInitializerFieldNotNullUsage = "str";
nullInitializerFieldNullableUsage.charAt(1);
nullInitializerFieldNotNullUsage.charAt(1);
}
}
}
@@ -0,0 +1,24 @@
// ERROR: Type mismatch: inferred type is String? but String was expected
class TestJava {
private var notNullInitializerFieldNullableUsage = "aaa"
private var notNullInitializerFieldNotNullUsage = "aaa"
private var nullInitializerFieldNullableUsage: String? = null
private var nullInitializerFieldNotNullUsage: String? = null
fun testNotNull(obj: Any?) {
if (true) {
notNullInitializerFieldNullableUsage = obj as String?
notNullInitializerFieldNotNullUsage = "str"
notNullInitializerFieldNullableUsage[1]
notNullInitializerFieldNotNullUsage[1]
} else {
nullInitializerFieldNullableUsage = obj as String?
nullInitializerFieldNotNullUsage = "str"
nullInitializerFieldNullableUsage!![1]
nullInitializerFieldNotNullUsage!![1]
}
}
}