From 999918d4999e8dae97c447b4596cab7994f28248 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Wed, 9 Oct 2019 17:20:46 +0300 Subject: [PATCH] New J2K: add multi-file conversion tests from old j2k --- .../kotlin/generators/tests/GenerateTests.kt | 4 + .../generators/tests/GenerateTests.kt.183 | 4 + .../generators/tests/GenerateTests.kt.as34 | 4 + .../generators/tests/GenerateTests.kt.as35 | 4 + .../generators/tests/GenerateTests.kt.as36 | 4 + ...tractJavaToKotlinConverterMultiFileTest.kt | 2 +- .../AnnotationWithArrayParameter/Some.java | 13 ++++ .../AnnotationWithArrayParameter/Some.kt | 11 +++ .../external/SomeAnnotation.java | 8 ++ .../external/SomeAnnotation.java.expected | 8 ++ .../multiFile/FieldToProperty/JavaClass.java | 13 ++++ .../multiFile/FieldToProperty/JavaClass.kt | 12 +++ .../FieldToProperty/external/JavaFile.java | 15 ++++ .../external/JavaFile.java.expected | 15 ++++ .../FieldToProperty/external/KotlinFile.kt | 10 +++ .../external/KotlinFile.kt.expected | 10 +++ .../FunctionalInterfaceAcceptor/Stage.java | 18 +++++ .../FunctionalInterfaceAcceptor/Stage.kt | 8 ++ .../external/Acceptor.java | 16 ++++ .../external/Acceptor.java.expected | 16 ++++ .../external/Face.java | 5 ++ .../external/Face.java.expected | 5 ++ .../multiFile/GetterAndSetterUsages/1.java | 21 +++++ .../multiFile/GetterAndSetterUsages/1.kt | 14 ++++ .../multiFile/GetterAndSetterUsages/2.java | 14 ++++ .../multiFile/GetterAndSetterUsages/2.kt | 11 +++ .../GetterAndSetterUsages/external/3.kt | 13 ++++ .../external/3.kt.expected | 13 ++++ .../GetterAndSetterUsages/external/4.java | 7 ++ .../external/4.java.expected | 7 ++ nj2k/testData/multiFile/KT11952/Foo.java | 7 ++ nj2k/testData/multiFile/KT11952/Foo.kt | 7 ++ .../multiFile/KT11952/external/Bar.java | 8 ++ .../KT11952/external/Bar.java.expected | 8 ++ .../NullabilityByDFa/SomeServiceUsage.java | 53 +++++++++++++ .../NullabilityByDFa/SomeServiceUsage.kt | 45 +++++++++++ .../NullabilityByDFa/external/JavaFile.java | 26 +++++++ .../external/JavaFile.java.expected | 26 +++++++ .../InheritorOtherPackage1.java | 13 ++++ .../InheritorOtherPackage1.kt | 6 ++ .../InheritorOtherPackage2.java | 11 +++ .../InheritorOtherPackage2.kt | 10 +++ .../external/KotlinFile.kt | 10 +++ .../external/KotlinFile.kt.expected | 10 +++ .../ToCompanionObject/ClassWithStatics.java | 22 ++++++ .../ToCompanionObject/ClassWithStatics.kt | 15 ++++ .../ToCompanionObject/external/JavaFile.java | 21 +++++ .../external/JavaFile.java.expected | 21 +++++ .../ToCompanionObject/external/KotlinFile.kt | 5 ++ .../external/KotlinFile.kt.expected | 5 ++ .../multiFile/ToObject/PureUtils.java | 6 ++ nj2k/testData/multiFile/ToObject/PureUtils.kt | 10 +++ nj2k/testData/multiFile/ToObject/Utils.java | 12 +++ nj2k/testData/multiFile/ToObject/Utils.kt | 13 ++++ .../multiFile/ToObject/external/JavaFile.java | 11 +++ .../ToObject/external/JavaFile.java.expected | 11 +++ .../multiFile/ToObject/external/KotlinFile.kt | 6 ++ .../ToObject/external/KotlinFile.kt.expected | 6 ++ ...ctNewJavaToKotlinConverterMultiFileTest.kt | 78 +++++++++++++++++++ ...KotlinConverterMultiFileTestGenerated.java | 76 ++++++++++++++++++ 60 files changed, 862 insertions(+), 1 deletion(-) create mode 100644 nj2k/testData/multiFile/AnnotationWithArrayParameter/Some.java create mode 100644 nj2k/testData/multiFile/AnnotationWithArrayParameter/Some.kt create mode 100644 nj2k/testData/multiFile/AnnotationWithArrayParameter/external/SomeAnnotation.java create mode 100644 nj2k/testData/multiFile/AnnotationWithArrayParameter/external/SomeAnnotation.java.expected create mode 100644 nj2k/testData/multiFile/FieldToProperty/JavaClass.java create mode 100644 nj2k/testData/multiFile/FieldToProperty/JavaClass.kt create mode 100644 nj2k/testData/multiFile/FieldToProperty/external/JavaFile.java create mode 100644 nj2k/testData/multiFile/FieldToProperty/external/JavaFile.java.expected create mode 100644 nj2k/testData/multiFile/FieldToProperty/external/KotlinFile.kt create mode 100644 nj2k/testData/multiFile/FieldToProperty/external/KotlinFile.kt.expected create mode 100644 nj2k/testData/multiFile/FunctionalInterfaceAcceptor/Stage.java create mode 100644 nj2k/testData/multiFile/FunctionalInterfaceAcceptor/Stage.kt create mode 100644 nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Acceptor.java create mode 100644 nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Acceptor.java.expected create mode 100644 nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Face.java create mode 100644 nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Face.java.expected create mode 100644 nj2k/testData/multiFile/GetterAndSetterUsages/1.java create mode 100644 nj2k/testData/multiFile/GetterAndSetterUsages/1.kt create mode 100644 nj2k/testData/multiFile/GetterAndSetterUsages/2.java create mode 100644 nj2k/testData/multiFile/GetterAndSetterUsages/2.kt create mode 100644 nj2k/testData/multiFile/GetterAndSetterUsages/external/3.kt create mode 100644 nj2k/testData/multiFile/GetterAndSetterUsages/external/3.kt.expected create mode 100644 nj2k/testData/multiFile/GetterAndSetterUsages/external/4.java create mode 100644 nj2k/testData/multiFile/GetterAndSetterUsages/external/4.java.expected create mode 100644 nj2k/testData/multiFile/KT11952/Foo.java create mode 100644 nj2k/testData/multiFile/KT11952/Foo.kt create mode 100644 nj2k/testData/multiFile/KT11952/external/Bar.java create mode 100644 nj2k/testData/multiFile/KT11952/external/Bar.java.expected create mode 100644 nj2k/testData/multiFile/NullabilityByDFa/SomeServiceUsage.java create mode 100644 nj2k/testData/multiFile/NullabilityByDFa/SomeServiceUsage.kt create mode 100644 nj2k/testData/multiFile/NullabilityByDFa/external/JavaFile.java create mode 100644 nj2k/testData/multiFile/NullabilityByDFa/external/JavaFile.java.expected create mode 100644 nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage1.java create mode 100644 nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage1.kt create mode 100644 nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage2.java create mode 100644 nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage2.kt create mode 100644 nj2k/testData/multiFile/ProtectedVisibility/external/KotlinFile.kt create mode 100644 nj2k/testData/multiFile/ProtectedVisibility/external/KotlinFile.kt.expected create mode 100644 nj2k/testData/multiFile/ToCompanionObject/ClassWithStatics.java create mode 100644 nj2k/testData/multiFile/ToCompanionObject/ClassWithStatics.kt create mode 100644 nj2k/testData/multiFile/ToCompanionObject/external/JavaFile.java create mode 100644 nj2k/testData/multiFile/ToCompanionObject/external/JavaFile.java.expected create mode 100644 nj2k/testData/multiFile/ToCompanionObject/external/KotlinFile.kt create mode 100644 nj2k/testData/multiFile/ToCompanionObject/external/KotlinFile.kt.expected create mode 100644 nj2k/testData/multiFile/ToObject/PureUtils.java create mode 100644 nj2k/testData/multiFile/ToObject/PureUtils.kt create mode 100644 nj2k/testData/multiFile/ToObject/Utils.java create mode 100644 nj2k/testData/multiFile/ToObject/Utils.kt create mode 100644 nj2k/testData/multiFile/ToObject/external/JavaFile.java create mode 100644 nj2k/testData/multiFile/ToObject/external/JavaFile.java.expected create mode 100644 nj2k/testData/multiFile/ToObject/external/KotlinFile.kt create mode 100644 nj2k/testData/multiFile/ToObject/external/KotlinFile.kt.expected create mode 100644 nj2k/tests/org/jetbrains/kotlin/nj2k/AbstractNewJavaToKotlinConverterMultiFileTest.kt create mode 100644 nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterMultiFileTestGenerated.java diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index f8596a7daae..3c25aa93b8c 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -140,6 +140,7 @@ import org.jetbrains.kotlin.kapt.cli.test.AbstractArgumentParsingTest import org.jetbrains.kotlin.kapt.cli.test.AbstractKaptToolIntegrationTest import org.jetbrains.kotlin.kapt3.test.AbstractClassFileToSourceStubConverterTest import org.jetbrains.kotlin.kapt3.test.AbstractKotlinKaptContextTest +import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinConverterMultiFileTest import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinConverterSingleFileTest import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinCopyPasteConversionTest import org.jetbrains.kotlin.nj2k.AbstractTextNewJavaToKotlinCopyPasteConversionTest @@ -1085,6 +1086,9 @@ fun main(args: Array) { testClass { model("copyPastePlainText", pattern = """^([^\.]+)\.txt$""") } + testClass { + model("multiFile", extension = null, recursive = false) + } } testGroup("jps-plugin/jps-tests/test", "jps-plugin/testData") { diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.183 b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.183 index 4cedb947ed2..5a6b1af9ead 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.183 +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.183 @@ -150,6 +150,7 @@ import org.jetbrains.kotlin.kapt.cli.test.AbstractArgumentParsingTest import org.jetbrains.kotlin.kapt.cli.test.AbstractKaptToolIntegrationTest import org.jetbrains.kotlin.kapt3.test.AbstractClassFileToSourceStubConverterTest import org.jetbrains.kotlin.kapt3.test.AbstractKotlinKaptContextTest +import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinConverterMultiFileTest import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinConverterSingleFileTest import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinCopyPasteConversionTest import org.jetbrains.kotlin.nj2k.AbstractTextNewJavaToKotlinCopyPasteConversionTest @@ -1035,6 +1036,9 @@ fun main(args: Array) { testClass { model("copyPastePlainText", pattern = """^([^\.]+)\.txt$""") } + testClass { + model("multiFile", extension = null, recursive = false) + } } testGroup("jps-plugin/jps-tests/test", "jps-plugin/testData") { diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as34 b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as34 index 9657a343476..5e9993dd8db 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as34 +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as34 @@ -143,6 +143,7 @@ import org.jetbrains.kotlin.kapt.cli.test.AbstractArgumentParsingTest import org.jetbrains.kotlin.kapt.cli.test.AbstractKaptToolIntegrationTest import org.jetbrains.kotlin.kapt3.test.AbstractClassFileToSourceStubConverterTest import org.jetbrains.kotlin.kapt3.test.AbstractKotlinKaptContextTest +import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinConverterMultiFileTest import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinConverterSingleFileTest import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinCopyPasteConversionTest import org.jetbrains.kotlin.nj2k.AbstractTextNewJavaToKotlinCopyPasteConversionTest @@ -1017,6 +1018,9 @@ fun main(args: Array) { testClass { model("copyPastePlainText", pattern = """^([^\.]+)\.txt$""") } + testClass { + model("multiFile", extension = null, recursive = false) + } } /* There is no jps in AS diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as35 b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as35 index 9657a343476..5e9993dd8db 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as35 +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as35 @@ -143,6 +143,7 @@ import org.jetbrains.kotlin.kapt.cli.test.AbstractArgumentParsingTest import org.jetbrains.kotlin.kapt.cli.test.AbstractKaptToolIntegrationTest import org.jetbrains.kotlin.kapt3.test.AbstractClassFileToSourceStubConverterTest import org.jetbrains.kotlin.kapt3.test.AbstractKotlinKaptContextTest +import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinConverterMultiFileTest import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinConverterSingleFileTest import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinCopyPasteConversionTest import org.jetbrains.kotlin.nj2k.AbstractTextNewJavaToKotlinCopyPasteConversionTest @@ -1017,6 +1018,9 @@ fun main(args: Array) { testClass { model("copyPastePlainText", pattern = """^([^\.]+)\.txt$""") } + testClass { + model("multiFile", extension = null, recursive = false) + } } /* There is no jps in AS diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as36 b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as36 index 9657a343476..5e9993dd8db 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as36 +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as36 @@ -143,6 +143,7 @@ import org.jetbrains.kotlin.kapt.cli.test.AbstractArgumentParsingTest import org.jetbrains.kotlin.kapt.cli.test.AbstractKaptToolIntegrationTest import org.jetbrains.kotlin.kapt3.test.AbstractClassFileToSourceStubConverterTest import org.jetbrains.kotlin.kapt3.test.AbstractKotlinKaptContextTest +import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinConverterMultiFileTest import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinConverterSingleFileTest import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinCopyPasteConversionTest import org.jetbrains.kotlin.nj2k.AbstractTextNewJavaToKotlinCopyPasteConversionTest @@ -1017,6 +1018,9 @@ fun main(args: Array) { testClass { model("copyPastePlainText", pattern = """^([^\.]+)\.txt$""") } + testClass { + model("multiFile", extension = null, recursive = false) + } } /* There is no jps in AS diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/AbstractJavaToKotlinConverterMultiFileTest.kt b/j2k/tests/org/jetbrains/kotlin/j2k/AbstractJavaToKotlinConverterMultiFileTest.kt index 37808a07691..ef28aa516c4 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/AbstractJavaToKotlinConverterMultiFileTest.kt +++ b/j2k/tests/org/jetbrains/kotlin/j2k/AbstractJavaToKotlinConverterMultiFileTest.kt @@ -56,7 +56,7 @@ abstract class AbstractJavaToKotlinConverterMultiFileTest : AbstractJavaToKotlin val (results, externalCodeProcessor) = converter.filesToKotlin(psiFilesToConvert, J2kPostProcessor(formatCode = true)) val process = externalCodeProcessor?.prepareWriteOperation(EmptyProgressIndicator()) - project.executeWriteCommand("") { process?.invoke() } + project.executeWriteCommand("") { process?.invoke(emptyList()) } fun expectedResultFile(i: Int) = File(filesToConvert[i].path.replace(".java", ".kt")) diff --git a/nj2k/testData/multiFile/AnnotationWithArrayParameter/Some.java b/nj2k/testData/multiFile/AnnotationWithArrayParameter/Some.java new file mode 100644 index 00000000000..a738d97a5dd --- /dev/null +++ b/nj2k/testData/multiFile/AnnotationWithArrayParameter/Some.java @@ -0,0 +1,13 @@ +package test; + +public class Some { + @SomeAnnotation(some = "Foo", same = 0) + public void foo() { + + } + + @SomeAnnotation(some = {"Bar", "Buz"}, same = {1, 2}) + public void bar() { + + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/AnnotationWithArrayParameter/Some.kt b/nj2k/testData/multiFile/AnnotationWithArrayParameter/Some.kt new file mode 100644 index 00000000000..e48d1ebfeea --- /dev/null +++ b/nj2k/testData/multiFile/AnnotationWithArrayParameter/Some.kt @@ -0,0 +1,11 @@ +package test + +class Some { + @SomeAnnotation(some = ["Foo"], same = [0]) + fun foo() { + } + + @SomeAnnotation(some = ["Bar", "Buz"], same = [1, 2]) + fun bar() { + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/AnnotationWithArrayParameter/external/SomeAnnotation.java b/nj2k/testData/multiFile/AnnotationWithArrayParameter/external/SomeAnnotation.java new file mode 100644 index 00000000000..566340af45a --- /dev/null +++ b/nj2k/testData/multiFile/AnnotationWithArrayParameter/external/SomeAnnotation.java @@ -0,0 +1,8 @@ +package test; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE, ElementType.METHOD}) +public @interface SomeAnnotation { + String[] some() default {}; + int[] same() default {}; +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/AnnotationWithArrayParameter/external/SomeAnnotation.java.expected b/nj2k/testData/multiFile/AnnotationWithArrayParameter/external/SomeAnnotation.java.expected new file mode 100644 index 00000000000..37ea13cd183 --- /dev/null +++ b/nj2k/testData/multiFile/AnnotationWithArrayParameter/external/SomeAnnotation.java.expected @@ -0,0 +1,8 @@ +package test; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE, ElementType.METHOD}) +public @interface SomeAnnotation { + String[] some() default {}; + int[] same() default {}; +} diff --git a/nj2k/testData/multiFile/FieldToProperty/JavaClass.java b/nj2k/testData/multiFile/FieldToProperty/JavaClass.java new file mode 100644 index 00000000000..1bf5da8f4bb --- /dev/null +++ b/nj2k/testData/multiFile/FieldToProperty/JavaClass.java @@ -0,0 +1,13 @@ +package test; + +public class JavaClass { + public int field = 0; + + protected int myProperty = 0; + + public int getProperty() { + return myProperty; + } + + public static final String NAME = "Bar"; +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/FieldToProperty/JavaClass.kt b/nj2k/testData/multiFile/FieldToProperty/JavaClass.kt new file mode 100644 index 00000000000..fd7b72b8f11 --- /dev/null +++ b/nj2k/testData/multiFile/FieldToProperty/JavaClass.kt @@ -0,0 +1,12 @@ +package test + +open class JavaClass { + @JvmField + var field = 0 + var property = 0 + protected set + + companion object { + const val NAME = "Bar" + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/FieldToProperty/external/JavaFile.java b/nj2k/testData/multiFile/FieldToProperty/external/JavaFile.java new file mode 100644 index 00000000000..46e8e484300 --- /dev/null +++ b/nj2k/testData/multiFile/FieldToProperty/external/JavaFile.java @@ -0,0 +1,15 @@ +package test; + +public class C extends JavaClass { + public void foo(JavaClass javaClass) { + javaClass.field++; + --javaClass.field; + myProperty = javaClass.field; + javaClass.field -= field; + field = myProperty; + field *= 2; + field = field * 2; + + String s = JavaClass.NAME; + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/FieldToProperty/external/JavaFile.java.expected b/nj2k/testData/multiFile/FieldToProperty/external/JavaFile.java.expected new file mode 100644 index 00000000000..0a917f3346f --- /dev/null +++ b/nj2k/testData/multiFile/FieldToProperty/external/JavaFile.java.expected @@ -0,0 +1,15 @@ +package test; + +public class C extends JavaClass { + public void foo(JavaClass javaClass) { + javaClass.field++; + --javaClass.field; + property = javaClass.field; + javaClass.field -= field; + field = property; + field *= 2; + field = field * 2; + + String s = JavaClass.NAME; + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/FieldToProperty/external/KotlinFile.kt b/nj2k/testData/multiFile/FieldToProperty/external/KotlinFile.kt new file mode 100644 index 00000000000..560fb767c87 --- /dev/null +++ b/nj2k/testData/multiFile/FieldToProperty/external/KotlinFile.kt @@ -0,0 +1,10 @@ +package test + +class C : JavaClass() { + public fun foo(javaClass: JavaClass) { + javaClass.field++ + myProperty = javaClass.field + field = myProperty + field *= 2 + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/FieldToProperty/external/KotlinFile.kt.expected b/nj2k/testData/multiFile/FieldToProperty/external/KotlinFile.kt.expected new file mode 100644 index 00000000000..0618eaae086 --- /dev/null +++ b/nj2k/testData/multiFile/FieldToProperty/external/KotlinFile.kt.expected @@ -0,0 +1,10 @@ +package test + +class C : JavaClass() { + public fun foo(javaClass: JavaClass) { + javaClass.field++ + property = javaClass.field + field = property + field *= 2 + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/Stage.java b/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/Stage.java new file mode 100644 index 00000000000..2021324880b --- /dev/null +++ b/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/Stage.java @@ -0,0 +1,18 @@ +package test; + +public class Stage { + public void context(Acceptor acceptor) { + acceptor.acceptFace(new Face() { + @Override + public void subject(String p) { + System.out.println(p); + } + }); + acceptor.setFace(new Face() { + @Override + public void subject(String p) { + System.out.println(p); + } + }); + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/Stage.kt b/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/Stage.kt new file mode 100644 index 00000000000..1c572c6195c --- /dev/null +++ b/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/Stage.kt @@ -0,0 +1,8 @@ +package test + +class Stage { + fun context(acceptor: Acceptor) { + acceptor.acceptFace { p -> println(p) } + acceptor.face = Face { p -> println(p) } + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Acceptor.java b/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Acceptor.java new file mode 100644 index 00000000000..31e8b8ed608 --- /dev/null +++ b/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Acceptor.java @@ -0,0 +1,16 @@ +package test; + +public class Acceptor { + private Face face; + + public Face getFace() { + return face; + } + + public void setFace(Face face) { + this.face = face; + } + + public void acceptFace(Face face) { + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Acceptor.java.expected b/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Acceptor.java.expected new file mode 100644 index 00000000000..31e8b8ed608 --- /dev/null +++ b/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Acceptor.java.expected @@ -0,0 +1,16 @@ +package test; + +public class Acceptor { + private Face face; + + public Face getFace() { + return face; + } + + public void setFace(Face face) { + this.face = face; + } + + public void acceptFace(Face face) { + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Face.java b/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Face.java new file mode 100644 index 00000000000..c3ad72e62ac --- /dev/null +++ b/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Face.java @@ -0,0 +1,5 @@ +package test; + +public interface Face { + void subject(String p); +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Face.java.expected b/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Face.java.expected new file mode 100644 index 00000000000..c3ad72e62ac --- /dev/null +++ b/nj2k/testData/multiFile/FunctionalInterfaceAcceptor/external/Face.java.expected @@ -0,0 +1,5 @@ +package test; + +public interface Face { + void subject(String p); +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/GetterAndSetterUsages/1.java b/nj2k/testData/multiFile/GetterAndSetterUsages/1.java new file mode 100644 index 00000000000..b66f2c79fe9 --- /dev/null +++ b/nj2k/testData/multiFile/GetterAndSetterUsages/1.java @@ -0,0 +1,21 @@ +package test; + +public class AAA { + private int x = 42; + + public int getX() { + return x; + } + + public void setX(int x) { + this.x = x; + } + + public void foo() { + setX(getX() + 1); + } + + public void bar(B b) { + System.out.println(b.getYY()); + } +} diff --git a/nj2k/testData/multiFile/GetterAndSetterUsages/1.kt b/nj2k/testData/multiFile/GetterAndSetterUsages/1.kt new file mode 100644 index 00000000000..9a2a7931e67 --- /dev/null +++ b/nj2k/testData/multiFile/GetterAndSetterUsages/1.kt @@ -0,0 +1,14 @@ +// ERROR: Unresolved reference: yy +package test + +class AAA { + var x = 42 + + fun foo() { + x = x + 1 + } + + fun bar(b: B) { + println(b.yy) + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/GetterAndSetterUsages/2.java b/nj2k/testData/multiFile/GetterAndSetterUsages/2.java new file mode 100644 index 00000000000..f273dc5ccd6 --- /dev/null +++ b/nj2k/testData/multiFile/GetterAndSetterUsages/2.java @@ -0,0 +1,14 @@ +package test; + +public class B { + void foo(AAA a) { + a.setX(a.getX() + 1); + y += "a"; + } + + private String y = ""; + + public String getYY() { + return y; + } +} diff --git a/nj2k/testData/multiFile/GetterAndSetterUsages/2.kt b/nj2k/testData/multiFile/GetterAndSetterUsages/2.kt new file mode 100644 index 00000000000..add84924b2a --- /dev/null +++ b/nj2k/testData/multiFile/GetterAndSetterUsages/2.kt @@ -0,0 +1,11 @@ +package test + +class B { + fun foo(a: AAA) { + a.x = a.x + 1 + yY += "a" + } + + var yY = "" + private set +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/GetterAndSetterUsages/external/3.kt b/nj2k/testData/multiFile/GetterAndSetterUsages/external/3.kt new file mode 100644 index 00000000000..4f946f915ed --- /dev/null +++ b/nj2k/testData/multiFile/GetterAndSetterUsages/external/3.kt @@ -0,0 +1,13 @@ +import test.AAA + +fun foo1(a: AAA) { + a.setX(a.getX() + 1) +} + +fun foo2(a: AAA?) { + a?.setX((a?.getX() ?: 0) + 1) +} + +fun AAA.foo() { + setX(getX() + 1) +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/GetterAndSetterUsages/external/3.kt.expected b/nj2k/testData/multiFile/GetterAndSetterUsages/external/3.kt.expected new file mode 100644 index 00000000000..32e62dd56d2 --- /dev/null +++ b/nj2k/testData/multiFile/GetterAndSetterUsages/external/3.kt.expected @@ -0,0 +1,13 @@ +import test.AAA + +fun foo1(a: AAA) { + a.x = a.x + 1 +} + +fun foo2(a: AAA?) { + a?.x = (a?.x ?: 0) + 1 +} + +fun AAA.foo() { + x = x + 1 +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/GetterAndSetterUsages/external/4.java b/nj2k/testData/multiFile/GetterAndSetterUsages/external/4.java new file mode 100644 index 00000000000..872ea785a9c --- /dev/null +++ b/nj2k/testData/multiFile/GetterAndSetterUsages/external/4.java @@ -0,0 +1,7 @@ +package test; + +class JavaClass { + void foo(AAA a) { + a.setX(a.getX() + 1); + } +} diff --git a/nj2k/testData/multiFile/GetterAndSetterUsages/external/4.java.expected b/nj2k/testData/multiFile/GetterAndSetterUsages/external/4.java.expected new file mode 100644 index 00000000000..dbed52ba1a8 --- /dev/null +++ b/nj2k/testData/multiFile/GetterAndSetterUsages/external/4.java.expected @@ -0,0 +1,7 @@ +package test; + +class JavaClass { + void foo(AAA a) { + a.x = a.x + 1; + } +} diff --git a/nj2k/testData/multiFile/KT11952/Foo.java b/nj2k/testData/multiFile/KT11952/Foo.java new file mode 100644 index 00000000000..c04acb0b640 --- /dev/null +++ b/nj2k/testData/multiFile/KT11952/Foo.java @@ -0,0 +1,7 @@ +import test.Bar; + +public class Foo { + public static void foo() { + Object o = Bar.SET; + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/KT11952/Foo.kt b/nj2k/testData/multiFile/KT11952/Foo.kt new file mode 100644 index 00000000000..9dd33375676 --- /dev/null +++ b/nj2k/testData/multiFile/KT11952/Foo.kt @@ -0,0 +1,7 @@ +import test.Bar + +object Foo { + fun foo() { + val o: Any = Bar.SET + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/KT11952/external/Bar.java b/nj2k/testData/multiFile/KT11952/external/Bar.java new file mode 100644 index 00000000000..e052375a01b --- /dev/null +++ b/nj2k/testData/multiFile/KT11952/external/Bar.java @@ -0,0 +1,8 @@ +package test; + +import java.util.HashSet; +import java.util.Set; + +public interface Bar { + Set SET = new HashSet() { }; +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/KT11952/external/Bar.java.expected b/nj2k/testData/multiFile/KT11952/external/Bar.java.expected new file mode 100644 index 00000000000..981b983d771 --- /dev/null +++ b/nj2k/testData/multiFile/KT11952/external/Bar.java.expected @@ -0,0 +1,8 @@ +package test; + +import java.util.HashSet; +import java.util.Set; + +public interface Bar { + Set SET = new HashSet() { }; +} diff --git a/nj2k/testData/multiFile/NullabilityByDFa/SomeServiceUsage.java b/nj2k/testData/multiFile/NullabilityByDFa/SomeServiceUsage.java new file mode 100644 index 00000000000..d0e4cc1efec --- /dev/null +++ b/nj2k/testData/multiFile/NullabilityByDFa/SomeServiceUsage.java @@ -0,0 +1,53 @@ + +public class SomeServiceUsage { + + public SomeService getService() { + return SomeService.getInstanceNotNull(); + } + + public SomeService getServiceNullable() { + return SomeService.getInstanceNullable(); + } + + // elvis + public SomeService getServiceNotNullByDataFlow() { + SomeService s = SomeService.getInstanceNullable(); + return s == null ? SomeService.getInstanceNotNull() : s; + } + + // nullable, bang-bang + public String aString1() { + return getServiceNullable().nullableString(); + } + + // nullable + public String aString2() { + return getService().nullableString(); + } + + // not nullable + public String aString3() { + return getService().notNullString(); + } + + // nullable, no bang-bang + public String aString4() { + return getServiceNotNullByDataFlow().nullableString(); + } + + // not nullable, no bang-bang + public String aString5() { + return getServiceNotNullByDataFlow().notNullString(); + } + + // nullable, safe-call + public String aString6() { + SomeService s = getServiceNullable(); + if (s != null) { + return s.nullableString(); + } else { + return null; + } + } + +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/NullabilityByDFa/SomeServiceUsage.kt b/nj2k/testData/multiFile/NullabilityByDFa/SomeServiceUsage.kt new file mode 100644 index 00000000000..bb2f19157b4 --- /dev/null +++ b/nj2k/testData/multiFile/NullabilityByDFa/SomeServiceUsage.kt @@ -0,0 +1,45 @@ +class SomeServiceUsage { + val service: SomeService + get() = SomeService.getInstanceNotNull() + + val serviceNullable: SomeService + get() = SomeService.getInstanceNullable() + + // elvis + val serviceNotNullByDataFlow: SomeService + get() { + val s = SomeService.getInstanceNullable() + return s ?: SomeService.getInstanceNotNull() + } + + // nullable, bang-bang + fun aString1(): String { + return serviceNullable.nullableString() + } + + // nullable + fun aString2(): String { + return service.nullableString() + } + + // not nullable + fun aString3(): String { + return service.notNullString() + } + + // nullable, no bang-bang + fun aString4(): String { + return serviceNotNullByDataFlow.nullableString() + } + + // not nullable, no bang-bang + fun aString5(): String { + return serviceNotNullByDataFlow.notNullString() + } + + // nullable, safe-call + fun aString6(): String? { + val s = serviceNullable + return s?.nullableString() + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/NullabilityByDFa/external/JavaFile.java b/nj2k/testData/multiFile/NullabilityByDFa/external/JavaFile.java new file mode 100644 index 00000000000..ef0cc77285c --- /dev/null +++ b/nj2k/testData/multiFile/NullabilityByDFa/external/JavaFile.java @@ -0,0 +1,26 @@ + +public class SomeService { + + public static SomeService getInstanceNotNull() { + return new SomeService(); + } + + public static SomeService getInstanceNullable() { + if (Math.random() > 0.5) + return null; + return new SomeService(); + } + + public String nullableString() { + if (Math.random() < 0.5) + return null; + return Math.random() + ""; + } + + public String notNullString() { + String s = nullableString(); + if (s != null) + return s; + return "null"; + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/NullabilityByDFa/external/JavaFile.java.expected b/nj2k/testData/multiFile/NullabilityByDFa/external/JavaFile.java.expected new file mode 100644 index 00000000000..ef0cc77285c --- /dev/null +++ b/nj2k/testData/multiFile/NullabilityByDFa/external/JavaFile.java.expected @@ -0,0 +1,26 @@ + +public class SomeService { + + public static SomeService getInstanceNotNull() { + return new SomeService(); + } + + public static SomeService getInstanceNullable() { + if (Math.random() > 0.5) + return null; + return new SomeService(); + } + + public String nullableString() { + if (Math.random() < 0.5) + return null; + return Math.random() + ""; + } + + public String notNullString() { + String s = nullableString(); + if (s != null) + return s; + return "null"; + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage1.java b/nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage1.java new file mode 100644 index 00000000000..5013847e0fb --- /dev/null +++ b/nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage1.java @@ -0,0 +1,13 @@ +package test; + +public class BaseOtherPackage { + protected BaseOtherPackage() { + + } + + protected void foo() { + + } + + protected int i = 1; +} diff --git a/nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage1.kt b/nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage1.kt new file mode 100644 index 00000000000..bea2ac34338 --- /dev/null +++ b/nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage1.kt @@ -0,0 +1,6 @@ +package test + +open class BaseOtherPackage protected constructor() { + protected fun foo() {} + protected var i = 1 +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage2.java b/nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage2.java new file mode 100644 index 00000000000..374d48fe83b --- /dev/null +++ b/nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage2.java @@ -0,0 +1,11 @@ +package test2; + +import test.*; + +public class DerivedOtherPackage extends BaseOtherPackage { + protected DerivedOtherPackage() { + super(); + foo(); + int i = this.i; + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage2.kt b/nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage2.kt new file mode 100644 index 00000000000..d1758a4500b --- /dev/null +++ b/nj2k/testData/multiFile/ProtectedVisibility/InheritorOtherPackage2.kt @@ -0,0 +1,10 @@ +package test2 + +import test.BaseOtherPackage + +class DerivedOtherPackage protected constructor() : BaseOtherPackage() { + init { + foo() + val i = i + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/ProtectedVisibility/external/KotlinFile.kt b/nj2k/testData/multiFile/ProtectedVisibility/external/KotlinFile.kt new file mode 100644 index 00000000000..66860d86c0e --- /dev/null +++ b/nj2k/testData/multiFile/ProtectedVisibility/external/KotlinFile.kt @@ -0,0 +1,10 @@ +package test3 + +import test.* + +class DerivedOtherPackageKotlin : BaseOtherPackage() { + init { + foo() + val i = this.i + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/ProtectedVisibility/external/KotlinFile.kt.expected b/nj2k/testData/multiFile/ProtectedVisibility/external/KotlinFile.kt.expected new file mode 100644 index 00000000000..d5f1d723fea --- /dev/null +++ b/nj2k/testData/multiFile/ProtectedVisibility/external/KotlinFile.kt.expected @@ -0,0 +1,10 @@ +package test3 + +import test.* + +class DerivedOtherPackageKotlin : BaseOtherPackage() { + init { + foo() + val i = this.i + } +} diff --git a/nj2k/testData/multiFile/ToCompanionObject/ClassWithStatics.java b/nj2k/testData/multiFile/ToCompanionObject/ClassWithStatics.java new file mode 100644 index 00000000000..93f7be3a69b --- /dev/null +++ b/nj2k/testData/multiFile/ToCompanionObject/ClassWithStatics.java @@ -0,0 +1,22 @@ +package test; + +class ClassWithStatics { + public void instanceMethod() { + } + + public static void staticMethod(int p) { + } + + public static final int staticField = 1; + public static int staticNonFinalField = 1; + + protected static int ourValue = 0; + + public static int getValue() { + return ourValue; + } + + public static void setValue(int value) { + ourValue = value; + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/ToCompanionObject/ClassWithStatics.kt b/nj2k/testData/multiFile/ToCompanionObject/ClassWithStatics.kt new file mode 100644 index 00000000000..edbb9a9f8be --- /dev/null +++ b/nj2k/testData/multiFile/ToCompanionObject/ClassWithStatics.kt @@ -0,0 +1,15 @@ +package test + +internal open class ClassWithStatics { + fun instanceMethod() {} + + companion object { + @JvmStatic + fun staticMethod(p: Int) {} + const val staticField = 1 + @JvmField + var staticNonFinalField = 1 + var value = 0 + + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/ToCompanionObject/external/JavaFile.java b/nj2k/testData/multiFile/ToCompanionObject/external/JavaFile.java new file mode 100644 index 00000000000..0e1d645b945 --- /dev/null +++ b/nj2k/testData/multiFile/ToCompanionObject/external/JavaFile.java @@ -0,0 +1,21 @@ +package test; + +class C { + void foo(ClassWithStatics c) { + ClassWithStatics.staticMethod(ClassWithStatics.staticField); + c.instanceMethod(); + ClassWithStatics.staticNonFinalField += 2; + } + + void methodReferences() { + Object staticMethod = ClassWithStatics::staticMethod; + Object instanceMethod = ClassWithStatics::instanceMethod; + } +} + +class D extends ClassWithStatics { + void foo() { + staticMethod(staticField); + ourValue *= 2; + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/ToCompanionObject/external/JavaFile.java.expected b/nj2k/testData/multiFile/ToCompanionObject/external/JavaFile.java.expected new file mode 100644 index 00000000000..c3e68caa8b4 --- /dev/null +++ b/nj2k/testData/multiFile/ToCompanionObject/external/JavaFile.java.expected @@ -0,0 +1,21 @@ +package test; + +class C { + void foo(ClassWithStatics c) { + ClassWithStatics.staticMethod(ClassWithStatics.staticField); + c.instanceMethod(); + ClassWithStatics.staticNonFinalField += 2; + } + + void methodReferences() { + Object staticMethod = ClassWithStatics::staticMethod; + Object instanceMethod = ClassWithStatics::instanceMethod; + } +} + +class D extends ClassWithStatics { + void foo() { + staticMethod(staticField); + value *= 2; + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/ToCompanionObject/external/KotlinFile.kt b/nj2k/testData/multiFile/ToCompanionObject/external/KotlinFile.kt new file mode 100644 index 00000000000..f69e592144a --- /dev/null +++ b/nj2k/testData/multiFile/ToCompanionObject/external/KotlinFile.kt @@ -0,0 +1,5 @@ +package test + +fun foo() { + ClassWithStatics.staticMethod(ClassWithStatics.staticField) +} diff --git a/nj2k/testData/multiFile/ToCompanionObject/external/KotlinFile.kt.expected b/nj2k/testData/multiFile/ToCompanionObject/external/KotlinFile.kt.expected new file mode 100644 index 00000000000..f69e592144a --- /dev/null +++ b/nj2k/testData/multiFile/ToCompanionObject/external/KotlinFile.kt.expected @@ -0,0 +1,5 @@ +package test + +fun foo() { + ClassWithStatics.staticMethod(ClassWithStatics.staticField) +} diff --git a/nj2k/testData/multiFile/ToObject/PureUtils.java b/nj2k/testData/multiFile/ToObject/PureUtils.java new file mode 100644 index 00000000000..a994cf501c8 --- /dev/null +++ b/nj2k/testData/multiFile/ToObject/PureUtils.java @@ -0,0 +1,6 @@ +package test; + +public class PureUtils { + public static void foo1(int p) {} + public static int foo2() { return 1; } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/ToObject/PureUtils.kt b/nj2k/testData/multiFile/ToObject/PureUtils.kt new file mode 100644 index 00000000000..ed9c4f4efcb --- /dev/null +++ b/nj2k/testData/multiFile/ToObject/PureUtils.kt @@ -0,0 +1,10 @@ +package test + +object PureUtils { + @JvmStatic + fun foo1(p: Int) {} + @JvmStatic + fun foo2(): Int { + return 1 + } +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/ToObject/Utils.java b/nj2k/testData/multiFile/ToObject/Utils.java new file mode 100644 index 00000000000..d70b6a6cb07 --- /dev/null +++ b/nj2k/testData/multiFile/ToObject/Utils.java @@ -0,0 +1,12 @@ +package test; + +public class Utils { + public static void foo1(int p) { + } + + public static int foo2() { + return 1; + } + + public static int staticField = 1; +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/ToObject/Utils.kt b/nj2k/testData/multiFile/ToObject/Utils.kt new file mode 100644 index 00000000000..f9c124ae844 --- /dev/null +++ b/nj2k/testData/multiFile/ToObject/Utils.kt @@ -0,0 +1,13 @@ +package test + +object Utils { + @JvmStatic + fun foo1(p: Int) {} + @JvmStatic + fun foo2(): Int { + return 1 + } + + @JvmField + var staticField = 1 +} \ No newline at end of file diff --git a/nj2k/testData/multiFile/ToObject/external/JavaFile.java b/nj2k/testData/multiFile/ToObject/external/JavaFile.java new file mode 100644 index 00000000000..0334a30aace --- /dev/null +++ b/nj2k/testData/multiFile/ToObject/external/JavaFile.java @@ -0,0 +1,11 @@ +package test; + + + +class C { + void foo() { + Utils.foo1(Utils.staticField); + Utils.staticField += Utils.foo2(); + PureUtils.foo1(PureUtils.foo2()); + } +} diff --git a/nj2k/testData/multiFile/ToObject/external/JavaFile.java.expected b/nj2k/testData/multiFile/ToObject/external/JavaFile.java.expected new file mode 100644 index 00000000000..0334a30aace --- /dev/null +++ b/nj2k/testData/multiFile/ToObject/external/JavaFile.java.expected @@ -0,0 +1,11 @@ +package test; + + + +class C { + void foo() { + Utils.foo1(Utils.staticField); + Utils.staticField += Utils.foo2(); + PureUtils.foo1(PureUtils.foo2()); + } +} diff --git a/nj2k/testData/multiFile/ToObject/external/KotlinFile.kt b/nj2k/testData/multiFile/ToObject/external/KotlinFile.kt new file mode 100644 index 00000000000..b8a693409c2 --- /dev/null +++ b/nj2k/testData/multiFile/ToObject/external/KotlinFile.kt @@ -0,0 +1,6 @@ +package test + +fun foo() { + Utils.foo1(Utils.staticField) + PureUtils.foo1(PureUtils.foo2()) +} diff --git a/nj2k/testData/multiFile/ToObject/external/KotlinFile.kt.expected b/nj2k/testData/multiFile/ToObject/external/KotlinFile.kt.expected new file mode 100644 index 00000000000..b8a693409c2 --- /dev/null +++ b/nj2k/testData/multiFile/ToObject/external/KotlinFile.kt.expected @@ -0,0 +1,6 @@ +package test + +fun foo() { + Utils.foo1(Utils.staticField) + PureUtils.foo1(PureUtils.foo2()) +} diff --git a/nj2k/tests/org/jetbrains/kotlin/nj2k/AbstractNewJavaToKotlinConverterMultiFileTest.kt b/nj2k/tests/org/jetbrains/kotlin/nj2k/AbstractNewJavaToKotlinConverterMultiFileTest.kt new file mode 100644 index 00000000000..bbc94a35ca6 --- /dev/null +++ b/nj2k/tests/org/jetbrains/kotlin/nj2k/AbstractNewJavaToKotlinConverterMultiFileTest.kt @@ -0,0 +1,78 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * 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.nj2k + +import com.intellij.psi.PsiJavaFile +import com.intellij.psi.PsiManager +import org.jetbrains.kotlin.idea.formatter.commitAndUnblockDocument +import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices +import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor +import org.jetbrains.kotlin.idea.test.dumpTextWithErrors +import org.jetbrains.kotlin.idea.util.application.executeWriteCommand +import org.jetbrains.kotlin.j2k.AbstractJavaToKotlinConverterTest +import org.jetbrains.kotlin.j2k.ConverterSettings +import org.jetbrains.kotlin.nj2k.postProcessing.NewJ2kPostProcessor +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.test.KotlinTestUtils +import java.io.File + +abstract class AbstractNewJavaToKotlinConverterMultiFileTest : AbstractJavaToKotlinConverterTest() { + fun doTest(dirPath: String) { + val psiManager = PsiManager.getInstance(project) + val filesToConvert = File(dirPath).listFiles { _, name -> name.endsWith(".java") }!! + val psiFilesToConvert = filesToConvert.map { javaFile -> + val virtualFile = addFile(javaFile, "test") + psiManager.findFile(virtualFile) as PsiJavaFile + } + + val externalFiles = File(dirPath + File.separator + "external").listFiles { _, name -> + name.endsWith(".java") || name.endsWith(".kt") + }!! + + val externalPsiFiles = externalFiles.map { file -> + val virtualFile = addFile(file, "test") + val psiFile = psiManager.findFile(virtualFile)!! + assert(psiFile is PsiJavaFile || psiFile is KtFile) + psiFile + } + + val converter = NewJavaToKotlinConverter(project, module, ConverterSettings.defaultSettings, IdeaJavaToKotlinServices) + val (results, externalCodeProcessor) = converter.filesToKotlin( + psiFilesToConvert, + NewJ2kPostProcessor() + ) + val process = externalCodeProcessor?.prepareWriteOperation(progress = null) + + fun expectedResultFile(i: Int) = File(filesToConvert[i].path.replace(".java", ".kt")) + + val resultFiles = psiFilesToConvert.mapIndexed { i, javaFile -> + deleteFile(javaFile.virtualFile) + val virtualFile = addFile(results[i], expectedResultFile(i).name, "test") + psiManager.findFile(virtualFile) as KtFile + } + + resultFiles.forEach { it.commitAndUnblockDocument() } + + project.executeWriteCommand("") { + process?.invoke(resultFiles) + } + + for ((i, kotlinFile) in resultFiles.withIndex()) { + KotlinTestUtils.assertEqualsToFile(expectedResultFile(i), kotlinFile.dumpTextWithErrors()) + } + + for ((externalFile, externalPsiFile) in externalFiles.zip(externalPsiFiles)) { + val expectedFile = File(externalFile.path + ".expected") + val resultText = when (externalPsiFile) { + is KtFile -> externalPsiFile.dumpTextWithErrors() + else -> externalPsiFile.text + } + KotlinTestUtils.assertEqualsToFile(expectedFile, resultText) + } + } + + override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE +} diff --git a/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterMultiFileTestGenerated.java b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterMultiFileTestGenerated.java new file mode 100644 index 00000000000..4ebddaeef6c --- /dev/null +++ b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterMultiFileTestGenerated.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * 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.nj2k; + +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("nj2k/testData/multiFile") +@TestDataPath("$PROJECT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public class NewJavaToKotlinConverterMultiFileTestGenerated extends AbstractNewJavaToKotlinConverterMultiFileTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath); + } + + public void testAllFilesPresentInMultiFile() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("nj2k/testData/multiFile"), Pattern.compile("^([^\\.]+)$"), TargetBackend.ANY, false); + } + + @TestMetadata("AnnotationWithArrayParameter") + public void testAnnotationWithArrayParameter() throws Exception { + runTest("nj2k/testData/multiFile/AnnotationWithArrayParameter/"); + } + + @TestMetadata("FieldToProperty") + public void testFieldToProperty() throws Exception { + runTest("nj2k/testData/multiFile/FieldToProperty/"); + } + + @TestMetadata("FunctionalInterfaceAcceptor") + public void testFunctionalInterfaceAcceptor() throws Exception { + runTest("nj2k/testData/multiFile/FunctionalInterfaceAcceptor/"); + } + + @TestMetadata("GetterAndSetterUsages") + public void testGetterAndSetterUsages() throws Exception { + runTest("nj2k/testData/multiFile/GetterAndSetterUsages/"); + } + + @TestMetadata("KT11952") + public void testKT11952() throws Exception { + runTest("nj2k/testData/multiFile/KT11952/"); + } + + @TestMetadata("NullabilityByDFa") + public void testNullabilityByDFa() throws Exception { + runTest("nj2k/testData/multiFile/NullabilityByDFa/"); + } + + @TestMetadata("ProtectedVisibility") + public void testProtectedVisibility() throws Exception { + runTest("nj2k/testData/multiFile/ProtectedVisibility/"); + } + + @TestMetadata("ToCompanionObject") + public void testToCompanionObject() throws Exception { + runTest("nj2k/testData/multiFile/ToCompanionObject/"); + } + + @TestMetadata("ToObject") + public void testToObject() throws Exception { + runTest("nj2k/testData/multiFile/ToObject/"); + } +}