[FIR] add tests on external annotations

Tests are excluded in COMPILED_JAVA mode because in this
mode external annotations are not present at all

^KT-62310
This commit is contained in:
Dmitrii Gridin
2023-10-05 11:46:50 +02:00
committed by Space Team
parent e452113a7a
commit 2cac922cd0
45 changed files with 1158 additions and 17 deletions
@@ -0,0 +1,37 @@
// FILE: ClassWithExternalAnnotatedMembers.java
import org.jetbrains.annotations.NotNull;
public class ClassWithExternalAnnotatedMembers {
public ClassWithExternalAnnotatedMembers(Integer i) { // with external annotation on parameter
}
public ClassWithExternalAnnotatedMembers(@NotNull String s) {
}
public ClassWithExternalAnnotatedMembers(Boolean b) {
}
}
// FILE: usage.kt
fun test() {
val i: Int? = null
<!NONE_APPLICABLE!>ClassWithExternalAnnotatedMembers<!>(i)
val s: String? = null
<!NONE_APPLICABLE!>ClassWithExternalAnnotatedMembers<!>(s)
val b: Boolean? = null
ClassWithExternalAnnotatedMembers(b)
ClassWithExternalAnnotatedMembers(null)
}
// FILE: annotations.xml
<root>
<item name='ClassWithExternalAnnotatedMembers ClassWithExternalAnnotatedMembers(java.lang.Integer) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
</root>
@@ -0,0 +1,37 @@
// FILE: ClassWithExternalAnnotatedMembers.java
import org.jetbrains.annotations.NotNull;
public class ClassWithExternalAnnotatedMembers {
public ClassWithExternalAnnotatedMembers(Integer i) { // with external annotation on parameter
}
public ClassWithExternalAnnotatedMembers(@NotNull String s) {
}
public ClassWithExternalAnnotatedMembers(Boolean b) {
}
}
// FILE: usage.kt
fun test() {
val i: Int? = null
ClassWithExternalAnnotatedMembers(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>i<!>)
val s: String? = null
ClassWithExternalAnnotatedMembers(<!TYPE_MISMATCH!>s<!>)
val b: Boolean? = null
ClassWithExternalAnnotatedMembers(b)
<!OVERLOAD_RESOLUTION_AMBIGUITY!>ClassWithExternalAnnotatedMembers<!>(null)
}
// FILE: annotations.xml
<root>
<item name='ClassWithExternalAnnotatedMembers ClassWithExternalAnnotatedMembers(java.lang.Integer) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
</root>
@@ -0,0 +1,33 @@
// FILE: ClassWithExternalAnnotatedMembers.java
import org.jetbrains.annotations.NotNull;
public class ClassWithExternalAnnotatedMembers {
public ClassWithExternalAnnotatedMembers(Integer i) { // with external annotation on parameter
}
public ClassWithExternalAnnotatedMembers(@NotNull String s) {
}
}
// FILE: usage.kt
fun test() {
val i: Int? = null
<!NONE_APPLICABLE!>ClassWithExternalAnnotatedMembers<!>(i)
val s: String? = null
<!NONE_APPLICABLE!>ClassWithExternalAnnotatedMembers<!>(s)
val b: Boolean? = null
<!NONE_APPLICABLE!>ClassWithExternalAnnotatedMembers<!>(b)
<!NONE_APPLICABLE!>ClassWithExternalAnnotatedMembers<!>(null)
}
// FILE: annotations.xml
<root>
<item name='ClassWithExternalAnnotatedMembers ClassWithExternalAnnotatedMembers(java.lang.Integer) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
</root>
@@ -0,0 +1,33 @@
// FILE: ClassWithExternalAnnotatedMembers.java
import org.jetbrains.annotations.NotNull;
public class ClassWithExternalAnnotatedMembers {
public ClassWithExternalAnnotatedMembers(Integer i) { // with external annotation on parameter
}
public ClassWithExternalAnnotatedMembers(@NotNull String s) {
}
}
// FILE: usage.kt
fun test() {
val i: Int? = null
ClassWithExternalAnnotatedMembers(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>i<!>)
val s: String? = null
ClassWithExternalAnnotatedMembers(<!TYPE_MISMATCH!>s<!>)
val b: Boolean? = null
<!NONE_APPLICABLE!>ClassWithExternalAnnotatedMembers<!>(b)
ClassWithExternalAnnotatedMembers(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>)
}
// FILE: annotations.xml
<root>
<item name='ClassWithExternalAnnotatedMembers ClassWithExternalAnnotatedMembers(java.lang.Integer) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
</root>
@@ -0,0 +1,39 @@
// FIR_IDENTICAL
// FILE: ClassWithExternalAnnotatedMembers.java
import org.jetbrains.annotations.NotNull;
public class ClassWithExternalAnnotatedMembers {
public String externalNotNullField;
@NotNull
public String explicitNotNullField;
public static String staticExternalNotNullField;
@NotNull
public static String staticExplicitNotNullField;
}
// FILE: usage.kt
fun test() {
val x = ClassWithExternalAnnotatedMembers()
x.externalNotNullField<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
x.explicitNotNullField<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
ClassWithExternalAnnotatedMembers.staticExternalNotNullField<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
ClassWithExternalAnnotatedMembers.staticExplicitNotNullField<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
}
fun String.foo() {
}
// FILE: annotations.xml
<root>
<item name='ClassWithExternalAnnotatedMembers externalNotNullField'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='ClassWithExternalAnnotatedMembers staticExternalNotNullField'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
</root>
@@ -0,0 +1,45 @@
// FIR_IDENTICAL
// FILE: one/two/ClassWithExternalAnnotatedMembers.java
package one.two;
import org.jetbrains.annotations.NotNull;
public class ClassWithExternalAnnotatedMembers {
public String externalNotNullField;
@NotNull
public String explicitNotNullField;
public static String staticExternalNotNullField;
@NotNull
public static String staticExplicitNotNullField;
}
// FILE: one/usage.kt
package one
import one.two.ClassWithExternalAnnotatedMembers
fun test() {
val x = ClassWithExternalAnnotatedMembers()
x.externalNotNullField<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
x.explicitNotNullField<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
ClassWithExternalAnnotatedMembers.staticExternalNotNullField<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
ClassWithExternalAnnotatedMembers.staticExplicitNotNullField<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
}
fun String.foo() {
}
// FILE: one/two/annotations.xml
<root>
<item name='one.two.ClassWithExternalAnnotatedMembers externalNotNullField'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='one.two.ClassWithExternalAnnotatedMembers staticExternalNotNullField'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
</root>
@@ -0,0 +1,47 @@
// FIR_IDENTICAL
// FILE: ClassWithExternalAnnotatedMembers.java
import org.jetbrains.annotations.NotNull;
public class ClassWithExternalAnnotatedMembers {
public String externalNotNullMethod() {
return "";
}
@NotNull
public String explicitNotNullMethod() {
return "";
}
public static String staticExternalNotNullMethod() {
return "";
}
@NotNull
public static String staticExplicitNotNullMethod() {
return "";
}
}
// FILE: usage.kt
fun test() {
val x = ClassWithExternalAnnotatedMembers()
x.externalNotNullMethod()<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
x.explicitNotNullMethod()<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
ClassWithExternalAnnotatedMembers.staticExternalNotNullMethod()<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
ClassWithExternalAnnotatedMembers.staticExplicitNotNullMethod()<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
}
fun String.foo() {
}
// FILE: annotations.xml
<root>
<item name='ClassWithExternalAnnotatedMembers java.lang.String externalNotNullMethod()'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='ClassWithExternalAnnotatedMembers java.lang.String staticExternalNotNullMethod()'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
</root>
@@ -0,0 +1,72 @@
// FIR_IDENTICAL
// MODULE: javaModule
// FILE: one/two/FirstModuleClass.java
package one.two;
import org.jetbrains.annotations.NotNull;
public class FirstModuleClass {
public String externalNotNullMethod() {
return "";
}
@NotNull
public String explicitNotNullMethod() {
return "";
}
}
// FILE: one/two/annotations.xml
<root>
<item name='one.two.FirstModuleClass java.lang.String externalNotNullMethod()'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
</root>
// FILE: usage.kt
package usage1
import one.two.FirstModuleClass
fun test() {
val x = FirstModuleClass()
x.externalNotNullMethod()<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
x.explicitNotNullMethod()<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
}
fun String.foo() {
}
// MODULE: javaModule2
// FILE: three/SecondModuleClass.java
package three;
import org.jetbrains.annotations.NotNull;
public class SecondModuleClass {
public static String staticExternalNotNullMethod() {
return "";
}
@NotNull
public static String staticExplicitNotNullMethod() {
return "";
}
}
// FILE: three/annotations.xml
<root>
<item name='three.SecondModuleClass java.lang.String staticExternalNotNullMethod()'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
</root>
// FILE: my/pack/usage.kt
package my.pack
import three.SecondModuleClass
fun test() {
SecondModuleClass.staticExternalNotNullMethod()<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
SecondModuleClass.staticExplicitNotNullMethod()<!UNNECESSARY_SAFE_CALL!>?.<!>foo()
}
fun String.foo() {
}
@@ -0,0 +1,32 @@
// FILE: ClassWithExternalAnnotatedMembers.java
import org.jetbrains.annotations.NotNull;
public class ClassWithExternalAnnotatedMembers {
public void method(String s) {
}
public void method(@NotNull Integer i) {
}
}
// FILE: usage.kt
fun test() {
val instance = ClassWithExternalAnnotatedMembers()
val i: Int? = null
instance.<!NONE_APPLICABLE!>method<!>(i)
val s: String? = null
instance.<!NONE_APPLICABLE!>method<!>(s)
val b: Boolean? = null
instance.<!NONE_APPLICABLE!>method<!>(b)
instance.<!NONE_APPLICABLE!>method<!>(null)
}
// FILE: annotations.xml
<root>
<item name='ClassWithExternalAnnotatedMembers void method(java.lang.String) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
</root>
@@ -0,0 +1,32 @@
// FILE: ClassWithExternalAnnotatedMembers.java
import org.jetbrains.annotations.NotNull;
public class ClassWithExternalAnnotatedMembers {
public void method(String s) {
}
public void method(@NotNull Integer i) {
}
}
// FILE: usage.kt
fun test() {
val instance = ClassWithExternalAnnotatedMembers()
val i: Int? = null
instance.method(<!TYPE_MISMATCH!>i<!>)
val s: String? = null
instance.method(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>s<!>)
val b: Boolean? = null
instance.<!NONE_APPLICABLE!>method<!>(b)
instance.method(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>null<!>)
}
// FILE: annotations.xml
<root>
<item name='ClassWithExternalAnnotatedMembers void method(java.lang.String) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
</root>
@@ -0,0 +1,35 @@
// FILE: ClassWithExternalAnnotatedMembers.java
import org.jetbrains.annotations.NotNull;
public class ClassWithExternalAnnotatedMembers {
public void method(String s) {
}
public void method(@NotNull Integer i) {
}
public void method(Boolean b) {
}
}
// FILE: usage.kt
fun test() {
val instance = ClassWithExternalAnnotatedMembers()
val i: Int? = null
instance.<!NONE_APPLICABLE!>method<!>(i)
val s: String? = null
instance.<!NONE_APPLICABLE!>method<!>(s)
val b: Boolean? = null
instance.method(b)
instance.method(null)
}
// FILE: annotations.xml
<root>
<item name='ClassWithExternalAnnotatedMembers void method(java.lang.String) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
</root>
@@ -0,0 +1,35 @@
// FILE: ClassWithExternalAnnotatedMembers.java
import org.jetbrains.annotations.NotNull;
public class ClassWithExternalAnnotatedMembers {
public void method(String s) {
}
public void method(@NotNull Integer i) {
}
public void method(Boolean b) {
}
}
// FILE: usage.kt
fun test() {
val instance = ClassWithExternalAnnotatedMembers()
val i: Int? = null
instance.method(<!TYPE_MISMATCH!>i<!>)
val s: String? = null
instance.method(<!NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS!>s<!>)
val b: Boolean? = null
instance.method(b)
instance.<!OVERLOAD_RESOLUTION_AMBIGUITY!>method<!>(null)
}
// FILE: annotations.xml
<root>
<item name='ClassWithExternalAnnotatedMembers void method(java.lang.String) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
</root>