FIR: add initial JSR 305 tests for Java type enhancements

This commit is contained in:
Mikhail Glukhikh
2019-03-01 14:37:29 +03:00
parent 14fb495ab6
commit 0434a55ea2
10 changed files with 168 additions and 1 deletions
@@ -0,0 +1,10 @@
@R|java/lang/annotation/Documented|() @R|javax/annotation/meta/TypeQualifierNickname|() @R|javax/annotation/Nonnull|(<Strange Java enum value: javax/annotation/meta/When.NEVER>#()) @R|java/lang/annotation/Retention|(<Strange Java enum value: java/lang/annotation/RetentionPolicy.RUNTIME>#()) public abstract annotation class MyNullable : R|java/lang/annotation/Annotation| {
}
public open class NonNullNever : R|java/lang/Object| {
@R|javax/annotation/Nonnull|(<Strange Java enum value: javax/annotation/meta/When.NEVER>#()) public open property field(var): R|ft<kotlin/String, kotlin/String>|
public get(): R|ft<kotlin/String, kotlin/String>|
public set(value: R|ft<kotlin/String, kotlin/String>|): kotlin/Unit
@R|MyNullable|() public open operator function foo(@R|javax/annotation/Nonnull|(<Strange Java enum value: javax/annotation/meta/When.NEVER>#()) x: R|ft<kotlin/String, kotlin/String>|, @R|MyNullable|() y: R|ft<kotlin/CharSequence, kotlin/CharSequence>|): R|ft<kotlin/String, kotlin/String>|
}
@@ -0,0 +1,33 @@
// FOREIGN_ANNOTATIONS
// FILE: MyNullable.java
import javax.annotation.*;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.annotation.meta.TypeQualifierNickname;
import javax.annotation.meta.When;
@Documented
@TypeQualifierNickname
@Nonnull(when = When.NEVER)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyNullable {
}
// FILE: NonNullNever.java
import javax.annotation.*;
import javax.annotation.meta.When;
public class NonNullNever {
@Nonnull(when = When.NEVER) public String field = null;
@MyNullable
public String foo(@Nonnull(when = When.NEVER) String x, @MyNullable CharSequence y) {
return "";
}
}
@@ -0,0 +1,10 @@
public open class Simple : R|java/lang/Object| {
@R|javax/annotation/Nullable|() public open property field(var): R|ft<kotlin/String?, kotlin/String?>|?
public get(): R|ft<kotlin/String?, kotlin/String?>|?
public set(value: R|ft<kotlin/String?, kotlin/String?>|?): kotlin/Unit
@R|javax/annotation/Nullable|() public open operator function foo(@R|javax/annotation/Nonnull|() x: R|ft<kotlin/String, kotlin/String>|, @R|javax/annotation/CheckForNull|() y: R|ft<kotlin/CharSequence?, kotlin/CharSequence?>|?): R|ft<kotlin/String?, kotlin/String?>|?
@R|javax/annotation/Nonnull|() public open operator function bar(): R|ft<kotlin/String, kotlin/String>|
}
@@ -0,0 +1,17 @@
// FOREIGN_ANNOTATIONS
import javax.annotation.*;
public class Simple {
@Nullable public String field = null;
@Nullable
public String foo(@Nonnull String x, @CheckForNull CharSequence y) {
return "";
}
@Nonnull
public String bar() {
return "";
}
}
@@ -0,0 +1,10 @@
public open class Strange : R|java/lang/Object| {
@R|javax/annotation/Nonnull|(<Strange Java enum value: javax/annotation/meta/When.UNKNOWN>#()) public open property field(var): R|ft<kotlin/String, kotlin/String>|
public get(): R|ft<kotlin/String, kotlin/String>|
public set(value: R|ft<kotlin/String, kotlin/String>|): kotlin/Unit
@R|javax/annotation/Nonnull|(<Strange Java enum value: javax/annotation/meta/When.MAYBE>#()) public open operator function foo(@R|javax/annotation/Nonnull|(<Strange Java enum value: javax/annotation/meta/When.ALWAYS>#()) x: R|ft<kotlin/String, kotlin/String>|, @R|javax/annotation/Nonnull|(<Strange Java enum value: javax/annotation/meta/When.NEVER>#()) y: R|ft<kotlin/CharSequence, kotlin/CharSequence>|): R|ft<kotlin/String, kotlin/String>|
@R|javax/annotation/Nonnull|() public open operator function bar(): R|ft<kotlin/String, kotlin/String>|
}
@@ -0,0 +1,18 @@
// FOREIGN_ANNOTATIONS
import javax.annotation.*;
import javax.annotation.meta.*;
public class Strange {
@Nonnull(when=When.UNKNOWN) public String field = null;
@Nonnull(when=When.MAYBE)
public String foo(@Nonnull(when=When.ALWAYS) String x, @Nonnull(when=When.NEVER) CharSequence y) {
return "";
}
@Nonnull
public String bar() {
return "";
}
}
+1 -1
View File
@@ -1 +1 @@
FIR enhancement tests use compiler/testData/loadJava/compilerJava
Most FIR enhancement tests use compiler/testData/loadJava/compilerJava
@@ -236,3 +236,5 @@ abstract class AbstractFirTypeEnhancementTest : KtUsefulTestCase() {
private const val FOREIGN_ANNOTATIONS_SOURCES_PATH = "third-party/annotations"
}
}
abstract class AbstractOwnFirTypeEnhancementTest : AbstractFirTypeEnhancementTest()
@@ -0,0 +1,59 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.java;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
import org.jetbrains.kotlin.test.KotlinTestUtils;
import org.jetbrains.kotlin.test.TargetBackend;
import org.jetbrains.kotlin.test.TestMetadata;
import org.junit.runner.RunWith;
import java.io.File;
import java.util.regex.Pattern;
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all")
@TestMetadata("compiler/fir/resolve/testData/enhancement")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public class OwnFirTypeEnhancementTestGenerated extends AbstractOwnFirTypeEnhancementTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath);
}
public void testAllFilesPresentInEnhancement() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/fir/resolve/testData/enhancement"), Pattern.compile("^(.+)\\.java$"), TargetBackend.ANY, true);
}
@TestMetadata("compiler/fir/resolve/testData/enhancement/jsr305")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Jsr305 extends AbstractOwnFirTypeEnhancementTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath);
}
public void testAllFilesPresentInJsr305() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/fir/resolve/testData/enhancement/jsr305"), Pattern.compile("^(.+)\\.java$"), TargetBackend.ANY, true);
}
@TestMetadata("NonNullNever.java")
public void testNonNullNever() throws Exception {
runTest("compiler/fir/resolve/testData/enhancement/jsr305/NonNullNever.java");
}
@TestMetadata("Simple.java")
public void testSimple() throws Exception {
runTest("compiler/fir/resolve/testData/enhancement/jsr305/Simple.java");
}
@TestMetadata("Strange.java")
public void testStrange() throws Exception {
runTest("compiler/fir/resolve/testData/enhancement/jsr305/Strange.java");
}
}
}
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.fir.AbstractFirResolveTestCase
import org.jetbrains.kotlin.fir.AbstractFirResolveTestCaseWithStdlib
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
import org.jetbrains.kotlin.fir.java.AbstractFirTypeEnhancementTest
import org.jetbrains.kotlin.fir.java.AbstractOwnFirTypeEnhancementTest
import org.jetbrains.kotlin.generators.tests.generator.testGroup
import org.jetbrains.kotlin.generators.util.KT_OR_KTS_WITHOUT_DOTS_IN_NAME
import org.jetbrains.kotlin.generators.util.KT_WITHOUT_DOTS_IN_NAME
@@ -403,4 +404,11 @@ fun main(args: Array<String>) {
model("loadJava/compiledJava", extension = "java")
}
}
testGroup("compiler/fir/resolve/tests", "compiler/fir/resolve/testData") {
testClass<AbstractOwnFirTypeEnhancementTest> {
model("enhancement", extension = "java")
}
}
}