diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index 105aa3bd7bc..3883d1e53e4 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -154,6 +154,7 @@ 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.AbstractNewJavaToKotlinConverterSingleFileTest +import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinCopyPasteConversionTest import org.jetbrains.kotlin.nj2k.AbstractNullabilityAnalysisTest import org.jetbrains.kotlin.noarg.AbstractBlackBoxCodegenTestForNoArg import org.jetbrains.kotlin.noarg.AbstractBytecodeListingTestForNoArg @@ -982,6 +983,9 @@ fun main(args: Array) { testClass { model("newJ2k", extension = "java") } + testClass { + model("copyPaste", pattern = """^([^\.]+)\.java$""") + } testClass { model("nullabilityAnalysis") } 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 aa5eb319713..63262b8e51e 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as35 +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as35 @@ -142,6 +142,7 @@ 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.AbstractNewJavaToKotlinConverterSingleFileTest +import org.jetbrains.kotlin.nj2k.AbstractNewJavaToKotlinCopyPasteConversionTest import org.jetbrains.kotlin.nj2k.AbstractNullabilityAnalysisTest import org.jetbrains.kotlin.noarg.AbstractBlackBoxCodegenTestForNoArg import org.jetbrains.kotlin.noarg.AbstractBytecodeListingTestForNoArg @@ -950,6 +951,9 @@ fun main(args: Array) { testClass { model("newJ2k", extension = "java") } + testClass { + model("copyPaste", pattern = """^([^\.]+)\.java$""") + } testClass { model("nullabilityAnalysis") } diff --git a/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/AbstractJavaToKotlinCopyPasteConversionTest.kt b/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/AbstractJavaToKotlinCopyPasteConversionTest.kt index 23e2e08eced..6e1513b9def 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/AbstractJavaToKotlinCopyPasteConversionTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/AbstractJavaToKotlinCopyPasteConversionTest.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.idea.conversion.copy import com.intellij.openapi.actionSystem.IdeActions +import com.intellij.openapi.util.registry.Registry import org.jetbrains.kotlin.idea.AbstractCopyPasteTest import org.jetbrains.kotlin.idea.editor.KotlinEditorOptions import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor @@ -22,10 +23,13 @@ abstract class AbstractJavaToKotlinCopyPasteConversionTest : AbstractCopyPasteTe override fun getTestDataPath() = BASE_PATH + protected open fun isNewJ2K(): Boolean = false + override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE override fun setUp() { super.setUp() + Registry.get("kotlin.use.new.j2k").setValue(isNewJ2K()) oldEditorOptions = KotlinEditorOptions.getInstance().state KotlinEditorOptions.getInstance().isEnableJavaToKotlinConversion = true KotlinEditorOptions.getInstance().isDonTShowConversionDialog = true diff --git a/nj2k/build.gradle.kts b/nj2k/build.gradle.kts index 38e818b84d0..b58b672f41a 100644 --- a/nj2k/build.gradle.kts +++ b/nj2k/build.gradle.kts @@ -31,6 +31,7 @@ dependencies { testCompile(project(":idea")) testCompile(projectTests(":j2k")) + testCompile(projectTests(":idea")) testCompile(project(":nj2k:nj2k-services")) testCompile(projectTests(":idea:idea-test-framework")) testCompile(project(":compiler:light-classes")) diff --git a/nj2k/testData/copyPaste/AddImports.expected.kt b/nj2k/testData/copyPaste/AddImports.expected.kt new file mode 100644 index 00000000000..492bad518cb --- /dev/null +++ b/nj2k/testData/copyPaste/AddImports.expected.kt @@ -0,0 +1,5 @@ +import java.io.File + +internal fun foo(file: File?): List { + return emptyList() +} diff --git a/nj2k/testData/copyPaste/AddImports.java b/nj2k/testData/copyPaste/AddImports.java new file mode 100644 index 00000000000..1f9d9b61bd3 --- /dev/null +++ b/nj2k/testData/copyPaste/AddImports.java @@ -0,0 +1,9 @@ +import java.io.File; +import java.util.Collections; +import java.util.List; + +class C { + List foo(File file) { + return Collections.emptyList(); + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImports.to.kt b/nj2k/testData/copyPaste/AddImports.to.kt new file mode 100644 index 00000000000..81389d50841 --- /dev/null +++ b/nj2k/testData/copyPaste/AddImports.to.kt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImportsButNoConversion.expected.kt b/nj2k/testData/copyPaste/AddImportsButNoConversion.expected.kt new file mode 100644 index 00000000000..fc8a1a184d1 --- /dev/null +++ b/nj2k/testData/copyPaste/AddImportsButNoConversion.expected.kt @@ -0,0 +1,3 @@ +import java.io.File + +fun foo(): List \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImportsButNoConversion.java b/nj2k/testData/copyPaste/AddImportsButNoConversion.java new file mode 100644 index 00000000000..4bb93dbb9d2 --- /dev/null +++ b/nj2k/testData/copyPaste/AddImportsButNoConversion.java @@ -0,0 +1,10 @@ +// NO_CONVERSION_EXPECTED +import java.io.*; +import java.util.Collections; +import java.util.List; + +class C { + List foo() { + return Collections.emptyList(); + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImportsButNoConversion.to.kt b/nj2k/testData/copyPaste/AddImportsButNoConversion.to.kt new file mode 100644 index 00000000000..9ef6a3c24c5 --- /dev/null +++ b/nj2k/testData/copyPaste/AddImportsButNoConversion.to.kt @@ -0,0 +1 @@ +fun foo(): \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImportsButNoConversion2.expected.kt b/nj2k/testData/copyPaste/AddImportsButNoConversion2.expected.kt new file mode 100644 index 00000000000..be6257f0b76 --- /dev/null +++ b/nj2k/testData/copyPaste/AddImportsButNoConversion2.expected.kt @@ -0,0 +1,5 @@ +import java.io.File + +fun foo() { + list.add(File.separatorChar) +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImportsClassInSamePackage.dependency.kt b/nj2k/testData/copyPaste/AddImportsClassInSamePackage.dependency.kt new file mode 100644 index 00000000000..d9509297ce8 --- /dev/null +++ b/nj2k/testData/copyPaste/AddImportsClassInSamePackage.dependency.kt @@ -0,0 +1,6 @@ +package ppp + +public object Dependency { + @JvmStatic + public val FIELD: Int = 1 +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImportsClassInSamePackage.expected.kt b/nj2k/testData/copyPaste/AddImportsClassInSamePackage.expected.kt new file mode 100644 index 00000000000..f4e668888e1 --- /dev/null +++ b/nj2k/testData/copyPaste/AddImportsClassInSamePackage.expected.kt @@ -0,0 +1,5 @@ +import ppp.Dependency + +fun f() { + return Dependency.FIELD +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImportsClassInSamePackage.java b/nj2k/testData/copyPaste/AddImportsClassInSamePackage.java new file mode 100644 index 00000000000..33c097e84b5 --- /dev/null +++ b/nj2k/testData/copyPaste/AddImportsClassInSamePackage.java @@ -0,0 +1,7 @@ +package ppp + +class C { + char foo() { + return Dependency.FIELD; + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImportsClassInSamePackage.to.kt b/nj2k/testData/copyPaste/AddImportsClassInSamePackage.to.kt new file mode 100644 index 00000000000..b3a18cebd0c --- /dev/null +++ b/nj2k/testData/copyPaste/AddImportsClassInSamePackage.to.kt @@ -0,0 +1,3 @@ +fun f() { + +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImportsDummyConflict.dependency.kt b/nj2k/testData/copyPaste/AddImportsDummyConflict.dependency.kt new file mode 100644 index 00000000000..7f4d9475f93 --- /dev/null +++ b/nj2k/testData/copyPaste/AddImportsDummyConflict.dependency.kt @@ -0,0 +1,3 @@ +package ppp + +class dummy0 \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImportsDummyConflict.expected.kt b/nj2k/testData/copyPaste/AddImportsDummyConflict.expected.kt new file mode 100644 index 00000000000..a920dd1bb04 --- /dev/null +++ b/nj2k/testData/copyPaste/AddImportsDummyConflict.expected.kt @@ -0,0 +1,5 @@ +import ppp.dummy0 + +fun f() { + return dummy0() +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImportsDummyConflict.java b/nj2k/testData/copyPaste/AddImportsDummyConflict.java new file mode 100644 index 00000000000..ca4865d9d7a --- /dev/null +++ b/nj2k/testData/copyPaste/AddImportsDummyConflict.java @@ -0,0 +1,7 @@ +import ppp.* + +class C { + dummy0 foo() { + return dummy0(); + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImportsDummyConflict.to.kt b/nj2k/testData/copyPaste/AddImportsDummyConflict.to.kt new file mode 100644 index 00000000000..b3a18cebd0c --- /dev/null +++ b/nj2k/testData/copyPaste/AddImportsDummyConflict.to.kt @@ -0,0 +1,3 @@ +fun f() { + +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImportsWithExplicitImports.expected.kt b/nj2k/testData/copyPaste/AddImportsWithExplicitImports.expected.kt new file mode 100644 index 00000000000..c695294a680 --- /dev/null +++ b/nj2k/testData/copyPaste/AddImportsWithExplicitImports.expected.kt @@ -0,0 +1,11 @@ +import java.io.File + +class C { + private fun memberFun(file: File?) {} + + companion object { + @JvmStatic + fun main(args: Array) { + } + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImportsWithExplicitImports.java b/nj2k/testData/copyPaste/AddImportsWithExplicitImports.java new file mode 100644 index 00000000000..6e9c390be4c --- /dev/null +++ b/nj2k/testData/copyPaste/AddImportsWithExplicitImports.java @@ -0,0 +1,6 @@ +import java.io.File; + +class C { + public static void main(String[] args) { } + private void memberFun(File file) {} +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddImportsWithExplicitImports.to.kt b/nj2k/testData/copyPaste/AddImportsWithExplicitImports.to.kt new file mode 100644 index 00000000000..81389d50841 --- /dev/null +++ b/nj2k/testData/copyPaste/AddImportsWithExplicitImports.to.kt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddKClassImport.expected.kt b/nj2k/testData/copyPaste/AddKClassImport.expected.kt new file mode 100644 index 00000000000..1ca56e30eeb --- /dev/null +++ b/nj2k/testData/copyPaste/AddKClassImport.expected.kt @@ -0,0 +1,5 @@ +package to + +import kotlin.reflect.KClass + +annotation class Ann(val value: KClass<*>) \ No newline at end of file diff --git a/nj2k/testData/copyPaste/AddKClassImport.java b/nj2k/testData/copyPaste/AddKClassImport.java new file mode 100644 index 00000000000..5f2baffdd2a --- /dev/null +++ b/nj2k/testData/copyPaste/AddKClassImport.java @@ -0,0 +1,6 @@ +@interface Ann { + Class value(); +} + +class X { +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/Arithmetic.expected.kt b/nj2k/testData/copyPaste/Arithmetic.expected.kt new file mode 100644 index 00000000000..02bf611c74f --- /dev/null +++ b/nj2k/testData/copyPaste/Arithmetic.expected.kt @@ -0,0 +1 @@ +val v = b - c + d \ No newline at end of file diff --git a/nj2k/testData/copyPaste/Arithmetic.java b/nj2k/testData/copyPaste/Arithmetic.java new file mode 100644 index 00000000000..f82b8852710 --- /dev/null +++ b/nj2k/testData/copyPaste/Arithmetic.java @@ -0,0 +1,4 @@ +// NO_CONVERSION_EXPECTED +public static void main(String[]args){ + a + b - c + d - e +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/Arithmetic.to.kt b/nj2k/testData/copyPaste/Arithmetic.to.kt new file mode 100644 index 00000000000..afac2c5f89b --- /dev/null +++ b/nj2k/testData/copyPaste/Arithmetic.to.kt @@ -0,0 +1 @@ +val v = \ No newline at end of file diff --git a/nj2k/testData/copyPaste/ClassWithNoDocComment.expected.kt b/nj2k/testData/copyPaste/ClassWithNoDocComment.expected.kt new file mode 100644 index 00000000000..bd2b4741426 --- /dev/null +++ b/nj2k/testData/copyPaste/ClassWithNoDocComment.expected.kt @@ -0,0 +1,5 @@ +package to + +class JavaClass : Runnable { + override fun run() {} +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/ClassWithNoDocComment.java b/nj2k/testData/copyPaste/ClassWithNoDocComment.java new file mode 100644 index 00000000000..1c2577f2f52 --- /dev/null +++ b/nj2k/testData/copyPaste/ClassWithNoDocComment.java @@ -0,0 +1,10 @@ +/** + * Doc comment for JavaClass + */ +public class JavaClass implements Runnable{ + @Override + public void run() { + + } +} + \ No newline at end of file diff --git a/nj2k/testData/copyPaste/ClassWithOverrides.dependency.java b/nj2k/testData/copyPaste/ClassWithOverrides.dependency.java new file mode 100644 index 00000000000..c8a30dca606 --- /dev/null +++ b/nj2k/testData/copyPaste/ClassWithOverrides.dependency.java @@ -0,0 +1,8 @@ +package javaPack + +import org.jetbrains.annotations.NotNull; + +public interface I { + @NotNull + String foo(); +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/ClassWithOverrides.expected.kt b/nj2k/testData/copyPaste/ClassWithOverrides.expected.kt new file mode 100644 index 00000000000..02eeb02512f --- /dev/null +++ b/nj2k/testData/copyPaste/ClassWithOverrides.expected.kt @@ -0,0 +1,9 @@ +package to + +import javaPack.I + +class C : I { + override fun foo(): String { + return "" + } +} diff --git a/nj2k/testData/copyPaste/ClassWithOverrides.java b/nj2k/testData/copyPaste/ClassWithOverrides.java new file mode 100644 index 00000000000..a5459852ab0 --- /dev/null +++ b/nj2k/testData/copyPaste/ClassWithOverrides.java @@ -0,0 +1,11 @@ +package javaPack + +import org.jetbrains.annotations.NotNull; + +public class C implements I { + @NotNull + @Override + public String foo() { + return ""; + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/Constructor.expected.kt b/nj2k/testData/copyPaste/Constructor.expected.kt new file mode 100644 index 00000000000..6a788f7b5ed --- /dev/null +++ b/nj2k/testData/copyPaste/Constructor.expected.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + A() +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/Constructor.java b/nj2k/testData/copyPaste/Constructor.java new file mode 100644 index 00000000000..eb3be809e31 --- /dev/null +++ b/nj2k/testData/copyPaste/Constructor.java @@ -0,0 +1,5 @@ +class A { + public static void main(String[] args) { + new A(); + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/Constructor.to.kt b/nj2k/testData/copyPaste/Constructor.to.kt new file mode 100644 index 00000000000..0b0e220a256 --- /dev/null +++ b/nj2k/testData/copyPaste/Constructor.to.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/ConversionInCorrectContext.dependency.kt b/nj2k/testData/copyPaste/ConversionInCorrectContext.dependency.kt new file mode 100644 index 00000000000..3c0c0b230d5 --- /dev/null +++ b/nj2k/testData/copyPaste/ConversionInCorrectContext.dependency.kt @@ -0,0 +1,3 @@ +class Dependency { + fun getInt(): Int = 1 +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/ConversionInCorrectContext.expected.kt b/nj2k/testData/copyPaste/ConversionInCorrectContext.expected.kt new file mode 100644 index 00000000000..9f33f3fd57f --- /dev/null +++ b/nj2k/testData/copyPaste/ConversionInCorrectContext.expected.kt @@ -0,0 +1,3 @@ +internal fun foo(p: Dependency): Double { + return p.getInt().toDouble() // explicit conversion to Double must be added on conversion (if type Dependency) is correctly resolved +} diff --git a/nj2k/testData/copyPaste/ConversionInCorrectContext.java b/nj2k/testData/copyPaste/ConversionInCorrectContext.java new file mode 100644 index 00000000000..21b92a99ef7 --- /dev/null +++ b/nj2k/testData/copyPaste/ConversionInCorrectContext.java @@ -0,0 +1,5 @@ +class C { + double foo(Dependency p) { + return p.getInt(); // explicit conversion to Double must be added on conversion (if type Dependency) is correctly resolved + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/ConversionInCorrectContext.to.kt b/nj2k/testData/copyPaste/ConversionInCorrectContext.to.kt new file mode 100644 index 00000000000..81389d50841 --- /dev/null +++ b/nj2k/testData/copyPaste/ConversionInCorrectContext.to.kt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nj2k/testData/copyPaste/CopyAnnotation.expected.kt b/nj2k/testData/copyPaste/CopyAnnotation.expected.kt new file mode 100644 index 00000000000..b75c44b8819 --- /dev/null +++ b/nj2k/testData/copyPaste/CopyAnnotation.expected.kt @@ -0,0 +1,2 @@ +@Ann(String::class) +class X \ No newline at end of file diff --git a/nj2k/testData/copyPaste/CopyAnnotation.java b/nj2k/testData/copyPaste/CopyAnnotation.java new file mode 100644 index 00000000000..703e61bd92c --- /dev/null +++ b/nj2k/testData/copyPaste/CopyAnnotation.java @@ -0,0 +1,7 @@ +@interface Ann { + Class value(); +} + +@Ann(String.class) +class C { +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/CopyAnnotation.to.kt b/nj2k/testData/copyPaste/CopyAnnotation.to.kt new file mode 100644 index 00000000000..7de642d202d --- /dev/null +++ b/nj2k/testData/copyPaste/CopyAnnotation.to.kt @@ -0,0 +1 @@ +class X \ No newline at end of file diff --git a/nj2k/testData/copyPaste/ExtendsTypeRef.expected.kt b/nj2k/testData/copyPaste/ExtendsTypeRef.expected.kt new file mode 100644 index 00000000000..f7700061179 --- /dev/null +++ b/nj2k/testData/copyPaste/ExtendsTypeRef.expected.kt @@ -0,0 +1 @@ +class B : X> \ No newline at end of file diff --git a/nj2k/testData/copyPaste/ExtendsTypeRef.java b/nj2k/testData/copyPaste/ExtendsTypeRef.java new file mode 100644 index 00000000000..f3530dfc0f2 --- /dev/null +++ b/nj2k/testData/copyPaste/ExtendsTypeRef.java @@ -0,0 +1,7 @@ +class X { + +} + +class A extends X> { + +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/ExtendsTypeRef.to.kt b/nj2k/testData/copyPaste/ExtendsTypeRef.to.kt new file mode 100644 index 00000000000..890ad3e27ed --- /dev/null +++ b/nj2k/testData/copyPaste/ExtendsTypeRef.to.kt @@ -0,0 +1 @@ +class B : \ No newline at end of file diff --git a/nj2k/testData/copyPaste/FieldWithNoEndComment.expected.kt b/nj2k/testData/copyPaste/FieldWithNoEndComment.expected.kt new file mode 100644 index 00000000000..910852e7c7d --- /dev/null +++ b/nj2k/testData/copyPaste/FieldWithNoEndComment.expected.kt @@ -0,0 +1,3 @@ +package to + +private const val field = 1 \ No newline at end of file diff --git a/nj2k/testData/copyPaste/FieldWithNoEndComment.java b/nj2k/testData/copyPaste/FieldWithNoEndComment.java new file mode 100644 index 00000000000..1d8e27e4329 --- /dev/null +++ b/nj2k/testData/copyPaste/FieldWithNoEndComment.java @@ -0,0 +1,3 @@ +public class JavaClass { + private int field = 1; // comment for field +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/FieldWithNoModifierAndNoSemicolon.expected.kt b/nj2k/testData/copyPaste/FieldWithNoModifierAndNoSemicolon.expected.kt new file mode 100644 index 00000000000..21b1689d4ae --- /dev/null +++ b/nj2k/testData/copyPaste/FieldWithNoModifierAndNoSemicolon.expected.kt @@ -0,0 +1,4 @@ +package to + +@Volatile +internal var field = 1 \ No newline at end of file diff --git a/nj2k/testData/copyPaste/FieldWithNoModifierAndNoSemicolon.java b/nj2k/testData/copyPaste/FieldWithNoModifierAndNoSemicolon.java new file mode 100644 index 00000000000..f859155d2d2 --- /dev/null +++ b/nj2k/testData/copyPaste/FieldWithNoModifierAndNoSemicolon.java @@ -0,0 +1,3 @@ +public class JavaClass { + public volatile int field = 1; +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/FileWithNoPackageStatement.expected.kt b/nj2k/testData/copyPaste/FileWithNoPackageStatement.expected.kt new file mode 100644 index 00000000000..41067f3dac3 --- /dev/null +++ b/nj2k/testData/copyPaste/FileWithNoPackageStatement.expected.kt @@ -0,0 +1,8 @@ +package to + +object JavaClass { + @JvmStatic + fun main(args: Array) { + println("Hello, world!") + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/FileWithNoPackageStatement.java b/nj2k/testData/copyPaste/FileWithNoPackageStatement.java new file mode 100644 index 00000000000..bb7d6d10a86 --- /dev/null +++ b/nj2k/testData/copyPaste/FileWithNoPackageStatement.java @@ -0,0 +1,9 @@ +package helloWorld; + +// sample class +public class JavaClass { + public static void main(String[] args) { + System.out.println("Hello, world!"); + } +} + \ No newline at end of file diff --git a/nj2k/testData/copyPaste/HalfTheWhiteSpace.expected.kt b/nj2k/testData/copyPaste/HalfTheWhiteSpace.expected.kt new file mode 100644 index 00000000000..3ac91dff334 --- /dev/null +++ b/nj2k/testData/copyPaste/HalfTheWhiteSpace.expected.kt @@ -0,0 +1,10 @@ +class A { + + + internal fun foo() {} + + internal fun bar() {} + + + fun f() {} +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/HalfTheWhiteSpace.java b/nj2k/testData/copyPaste/HalfTheWhiteSpace.java new file mode 100644 index 00000000000..6b40aa4716f --- /dev/null +++ b/nj2k/testData/copyPaste/HalfTheWhiteSpace.java @@ -0,0 +1,10 @@ +class A { + + + void foo() {} + + void bar() {} + + + void foobar() {} +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/HalfTheWhiteSpace.to.kt b/nj2k/testData/copyPaste/HalfTheWhiteSpace.to.kt new file mode 100644 index 00000000000..12d044e6de4 --- /dev/null +++ b/nj2k/testData/copyPaste/HalfTheWhiteSpace.to.kt @@ -0,0 +1,6 @@ +class A { + + + + fun f() {} +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/ImplementsTypeRef.expected.kt b/nj2k/testData/copyPaste/ImplementsTypeRef.expected.kt new file mode 100644 index 00000000000..f7700061179 --- /dev/null +++ b/nj2k/testData/copyPaste/ImplementsTypeRef.expected.kt @@ -0,0 +1 @@ +class B : X> \ No newline at end of file diff --git a/nj2k/testData/copyPaste/ImplementsTypeRef.java b/nj2k/testData/copyPaste/ImplementsTypeRef.java new file mode 100644 index 00000000000..5c77aac40d4 --- /dev/null +++ b/nj2k/testData/copyPaste/ImplementsTypeRef.java @@ -0,0 +1,7 @@ +interface X { + +} + +class A implements X> { + +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/ImplementsTypeRef.to.kt b/nj2k/testData/copyPaste/ImplementsTypeRef.to.kt new file mode 100644 index 00000000000..890ad3e27ed --- /dev/null +++ b/nj2k/testData/copyPaste/ImplementsTypeRef.to.kt @@ -0,0 +1 @@ +class B : \ No newline at end of file diff --git a/nj2k/testData/copyPaste/Imports1.expected.kt b/nj2k/testData/copyPaste/Imports1.expected.kt new file mode 100644 index 00000000000..083f19f7a93 --- /dev/null +++ b/nj2k/testData/copyPaste/Imports1.expected.kt @@ -0,0 +1,7 @@ +import a.b.c +import g.e.v + + +fun main(args: Array) { + +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/Imports1.java b/nj2k/testData/copyPaste/Imports1.java new file mode 100644 index 00000000000..b9d2d907dba --- /dev/null +++ b/nj2k/testData/copyPaste/Imports1.java @@ -0,0 +1,4 @@ +import java.util.List; +import a.b.c; +import java.util.Set; +import g.e.v; \ No newline at end of file diff --git a/nj2k/testData/copyPaste/Imports1.to.kt b/nj2k/testData/copyPaste/Imports1.to.kt new file mode 100644 index 00000000000..d4cdba3449f --- /dev/null +++ b/nj2k/testData/copyPaste/Imports1.to.kt @@ -0,0 +1,5 @@ + + +fun main(args: Array) { + +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/Imports2.expected.kt b/nj2k/testData/copyPaste/Imports2.expected.kt new file mode 100644 index 00000000000..adb5b33c573 --- /dev/null +++ b/nj2k/testData/copyPaste/Imports2.expected.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/Imports2.java b/nj2k/testData/copyPaste/Imports2.java new file mode 100644 index 00000000000..01904c6e7d6 --- /dev/null +++ b/nj2k/testData/copyPaste/Imports2.java @@ -0,0 +1,4 @@ +import java.util.List; +import a.b.c; +import java.util.Set; +import g.e.v; \ No newline at end of file diff --git a/nj2k/testData/copyPaste/Imports2.to.kt b/nj2k/testData/copyPaste/Imports2.to.kt new file mode 100644 index 00000000000..d4cdba3449f --- /dev/null +++ b/nj2k/testData/copyPaste/Imports2.to.kt @@ -0,0 +1,5 @@ + + +fun main(args: Array) { + +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/Imports3.expected.kt b/nj2k/testData/copyPaste/Imports3.expected.kt new file mode 100644 index 00000000000..02581080862 --- /dev/null +++ b/nj2k/testData/copyPaste/Imports3.expected.kt @@ -0,0 +1,6 @@ +import g.e.v + + +fun main(args: Array) { + +} diff --git a/nj2k/testData/copyPaste/Imports3.java b/nj2k/testData/copyPaste/Imports3.java new file mode 100644 index 00000000000..93df7dbd441 --- /dev/null +++ b/nj2k/testData/copyPaste/Imports3.java @@ -0,0 +1,4 @@ +import java.util.List; +import a.b.c; +import java.util.Set; +import g.e.v; diff --git a/nj2k/testData/copyPaste/Imports3.to.kt b/nj2k/testData/copyPaste/Imports3.to.kt new file mode 100644 index 00000000000..cbf22106ef9 --- /dev/null +++ b/nj2k/testData/copyPaste/Imports3.to.kt @@ -0,0 +1,5 @@ + + +fun main(args: Array) { + +} diff --git a/nj2k/testData/copyPaste/Indentation.expected.kt b/nj2k/testData/copyPaste/Indentation.expected.kt new file mode 100644 index 00000000000..beb9cc7566b --- /dev/null +++ b/nj2k/testData/copyPaste/Indentation.expected.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + if (x > 0) x = 2 else x = 3 +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/Indentation.java b/nj2k/testData/copyPaste/Indentation.java new file mode 100644 index 00000000000..ae5a08318dc --- /dev/null +++ b/nj2k/testData/copyPaste/Indentation.java @@ -0,0 +1,8 @@ +class A { +public static void main(String[]args){ +if (x > 0) +x = 2; +else +x = 3; +} +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/Indentation.to.kt b/nj2k/testData/copyPaste/Indentation.to.kt new file mode 100644 index 00000000000..ec06b7e0cbf --- /dev/null +++ b/nj2k/testData/copyPaste/Indentation.to.kt @@ -0,0 +1,2 @@ +fun main(args: Array) { +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/InsertIntoComment.expected.kt b/nj2k/testData/copyPaste/InsertIntoComment.expected.kt new file mode 100644 index 00000000000..da648c2f716 --- /dev/null +++ b/nj2k/testData/copyPaste/InsertIntoComment.expected.kt @@ -0,0 +1 @@ +// String s = 1; \ No newline at end of file diff --git a/nj2k/testData/copyPaste/InsertIntoComment.java b/nj2k/testData/copyPaste/InsertIntoComment.java new file mode 100644 index 00000000000..b0801bafe94 --- /dev/null +++ b/nj2k/testData/copyPaste/InsertIntoComment.java @@ -0,0 +1,7 @@ +class A { + public static void main(String[] args) { + String s = 1; + } +} + +// NO_CONVERSION_EXPECTED \ No newline at end of file diff --git a/nj2k/testData/copyPaste/InsertIntoComment.to.kt b/nj2k/testData/copyPaste/InsertIntoComment.to.kt new file mode 100644 index 00000000000..7a864bde8d4 --- /dev/null +++ b/nj2k/testData/copyPaste/InsertIntoComment.to.kt @@ -0,0 +1 @@ +// \ No newline at end of file diff --git a/nj2k/testData/copyPaste/InsertIntoString.expected.kt b/nj2k/testData/copyPaste/InsertIntoString.expected.kt new file mode 100644 index 00000000000..e9b353c9760 --- /dev/null +++ b/nj2k/testData/copyPaste/InsertIntoString.expected.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + println("String s = 1;") +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/InsertIntoString.java b/nj2k/testData/copyPaste/InsertIntoString.java new file mode 100644 index 00000000000..b0801bafe94 --- /dev/null +++ b/nj2k/testData/copyPaste/InsertIntoString.java @@ -0,0 +1,7 @@ +class A { + public static void main(String[] args) { + String s = 1; + } +} + +// NO_CONVERSION_EXPECTED \ No newline at end of file diff --git a/nj2k/testData/copyPaste/InsertIntoString.to.kt b/nj2k/testData/copyPaste/InsertIntoString.to.kt new file mode 100644 index 00000000000..dfbaee899c3 --- /dev/null +++ b/nj2k/testData/copyPaste/InsertIntoString.to.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + println("") +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/MethodDeclarationWithNoBody.expected.kt b/nj2k/testData/copyPaste/MethodDeclarationWithNoBody.expected.kt new file mode 100644 index 00000000000..6ea83f686a9 --- /dev/null +++ b/nj2k/testData/copyPaste/MethodDeclarationWithNoBody.expected.kt @@ -0,0 +1,3 @@ +package to + +internal fun foo(p: Int) \ No newline at end of file diff --git a/nj2k/testData/copyPaste/MethodDeclarationWithNoBody.java b/nj2k/testData/copyPaste/MethodDeclarationWithNoBody.java new file mode 100644 index 00000000000..f9261dcfb6f --- /dev/null +++ b/nj2k/testData/copyPaste/MethodDeclarationWithNoBody.java @@ -0,0 +1,5 @@ +class A { + public void foo(int p) { + System.out.println("foo"); + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/MethodReferenceWithoutQualifier.expected.kt b/nj2k/testData/copyPaste/MethodReferenceWithoutQualifier.expected.kt new file mode 100644 index 00000000000..636a2ba7a5d --- /dev/null +++ b/nj2k/testData/copyPaste/MethodReferenceWithoutQualifier.expected.kt @@ -0,0 +1,4 @@ +fun main(args: Array) { + reference(arg) + somethingElse() +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/MethodReferenceWithoutQualifier.java b/nj2k/testData/copyPaste/MethodReferenceWithoutQualifier.java new file mode 100644 index 00000000000..8bc2bfb8b06 --- /dev/null +++ b/nj2k/testData/copyPaste/MethodReferenceWithoutQualifier.java @@ -0,0 +1,6 @@ +// NO_CONVERSION_EXPECTED +class A { + public static void main(String[] args) { + qualifier.reference(arg); + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/MethodReferenceWithoutQualifier.to.kt b/nj2k/testData/copyPaste/MethodReferenceWithoutQualifier.to.kt new file mode 100644 index 00000000000..fc7ac3c9c51 --- /dev/null +++ b/nj2k/testData/copyPaste/MethodReferenceWithoutQualifier.to.kt @@ -0,0 +1,4 @@ +fun main(args: Array) { + + somethingElse() +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/MethodWithNoAnnotation.expected.kt b/nj2k/testData/copyPaste/MethodWithNoAnnotation.expected.kt new file mode 100644 index 00000000000..475b62a40fb --- /dev/null +++ b/nj2k/testData/copyPaste/MethodWithNoAnnotation.expected.kt @@ -0,0 +1,5 @@ +package to + +fun foo(): String { + return "" +} diff --git a/nj2k/testData/copyPaste/MethodWithNoAnnotation.java b/nj2k/testData/copyPaste/MethodWithNoAnnotation.java new file mode 100644 index 00000000000..1bcceb4591e --- /dev/null +++ b/nj2k/testData/copyPaste/MethodWithNoAnnotation.java @@ -0,0 +1,6 @@ +public class JavaClass { + @Deprecated + public String foo() { + return ""; + } +} diff --git a/nj2k/testData/copyPaste/MethodWithOnlyOneAnnotation.expected.kt b/nj2k/testData/copyPaste/MethodWithOnlyOneAnnotation.expected.kt new file mode 100644 index 00000000000..148b68695cb --- /dev/null +++ b/nj2k/testData/copyPaste/MethodWithOnlyOneAnnotation.expected.kt @@ -0,0 +1,6 @@ +package to + +@SomeAnnotation +fun foo(): String { + return "" +} diff --git a/nj2k/testData/copyPaste/MethodWithOnlyOneAnnotation.java b/nj2k/testData/copyPaste/MethodWithOnlyOneAnnotation.java new file mode 100644 index 00000000000..d5cbe9808a4 --- /dev/null +++ b/nj2k/testData/copyPaste/MethodWithOnlyOneAnnotation.java @@ -0,0 +1,7 @@ +public class JavaClass { + @Deprecated + @SomeAnnotation + public String foo() { + return ""; + } +} diff --git a/nj2k/testData/copyPaste/OnlyClosingBrace.expected.kt b/nj2k/testData/copyPaste/OnlyClosingBrace.expected.kt new file mode 100644 index 00000000000..ff30235f076 --- /dev/null +++ b/nj2k/testData/copyPaste/OnlyClosingBrace.expected.kt @@ -0,0 +1 @@ +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/OnlyClosingBrace.java b/nj2k/testData/copyPaste/OnlyClosingBrace.java new file mode 100644 index 00000000000..f2c1a88707c --- /dev/null +++ b/nj2k/testData/copyPaste/OnlyClosingBrace.java @@ -0,0 +1,6 @@ +// NO_CONVERSION_EXPECTED +class A { + public static void main(String[] args) { + //sdasd + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/OnlyClosingBrace.to.kt b/nj2k/testData/copyPaste/OnlyClosingBrace.to.kt new file mode 100644 index 00000000000..81389d50841 --- /dev/null +++ b/nj2k/testData/copyPaste/OnlyClosingBrace.to.kt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nj2k/testData/copyPaste/OnlyOneBraceFromBlock.expected.kt b/nj2k/testData/copyPaste/OnlyOneBraceFromBlock.expected.kt new file mode 100644 index 00000000000..e394a9d95cf --- /dev/null +++ b/nj2k/testData/copyPaste/OnlyOneBraceFromBlock.expected.kt @@ -0,0 +1,4 @@ +fun main(args: Array) { + { + val a = Any() +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/OnlyOneBraceFromBlock.java b/nj2k/testData/copyPaste/OnlyOneBraceFromBlock.java new file mode 100644 index 00000000000..754dde0d9b4 --- /dev/null +++ b/nj2k/testData/copyPaste/OnlyOneBraceFromBlock.java @@ -0,0 +1,5 @@ +class A { + public static void main(String[] args) { + Object a = new Object(); + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/OnlyOneBraceFromBlock.to.kt b/nj2k/testData/copyPaste/OnlyOneBraceFromBlock.to.kt new file mode 100644 index 00000000000..0b0e220a256 --- /dev/null +++ b/nj2k/testData/copyPaste/OnlyOneBraceFromBlock.to.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/OnlyQualifier.expected.kt b/nj2k/testData/copyPaste/OnlyQualifier.expected.kt new file mode 100644 index 00000000000..0c1766e04c4 --- /dev/null +++ b/nj2k/testData/copyPaste/OnlyQualifier.expected.kt @@ -0,0 +1,4 @@ +fun main(args: Array) { + qualifier + somethingElse() +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/OnlyQualifier.java b/nj2k/testData/copyPaste/OnlyQualifier.java new file mode 100644 index 00000000000..b7482511db4 --- /dev/null +++ b/nj2k/testData/copyPaste/OnlyQualifier.java @@ -0,0 +1,6 @@ +// NO_CONVERSION_EXPECTED +class A { + public static void main(String[] args) { + qualifier.reference(arg); + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/OnlyQualifier.to.kt b/nj2k/testData/copyPaste/OnlyQualifier.to.kt new file mode 100644 index 00000000000..fc7ac3c9c51 --- /dev/null +++ b/nj2k/testData/copyPaste/OnlyQualifier.to.kt @@ -0,0 +1,4 @@ +fun main(args: Array) { + + somethingElse() +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/RawTypeRef.expected.kt b/nj2k/testData/copyPaste/RawTypeRef.expected.kt new file mode 100644 index 00000000000..f773bb36b80 --- /dev/null +++ b/nj2k/testData/copyPaste/RawTypeRef.expected.kt @@ -0,0 +1 @@ +class B : X<*> \ No newline at end of file diff --git a/nj2k/testData/copyPaste/RawTypeRef.java b/nj2k/testData/copyPaste/RawTypeRef.java new file mode 100644 index 00000000000..2f99a9c53d5 --- /dev/null +++ b/nj2k/testData/copyPaste/RawTypeRef.java @@ -0,0 +1,7 @@ +interface X { + +} + +class A implements X { + +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/RawTypeRef.to.kt b/nj2k/testData/copyPaste/RawTypeRef.to.kt new file mode 100644 index 00000000000..890ad3e27ed --- /dev/null +++ b/nj2k/testData/copyPaste/RawTypeRef.to.kt @@ -0,0 +1 @@ +class B : \ No newline at end of file diff --git a/nj2k/testData/copyPaste/RedundantTypeCast.expected.kt b/nj2k/testData/copyPaste/RedundantTypeCast.expected.kt new file mode 100644 index 00000000000..48cf438eebf --- /dev/null +++ b/nj2k/testData/copyPaste/RedundantTypeCast.expected.kt @@ -0,0 +1,6 @@ +fun foo(o: Any) { + if (o is String) { + val l = o.length + } + somethingElse() +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/RedundantTypeCast.java b/nj2k/testData/copyPaste/RedundantTypeCast.java new file mode 100644 index 00000000000..852715f101e --- /dev/null +++ b/nj2k/testData/copyPaste/RedundantTypeCast.java @@ -0,0 +1,7 @@ +class C { + void foo(Object o) { + if (o instanceof String) { + int l = ((String) o).length(); + } + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/RedundantTypeCast.to.kt b/nj2k/testData/copyPaste/RedundantTypeCast.to.kt new file mode 100644 index 00000000000..b148022b41e --- /dev/null +++ b/nj2k/testData/copyPaste/RedundantTypeCast.to.kt @@ -0,0 +1,3 @@ +fun foo(o: Any) { + somethingElse() +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/RedundantTypeCast2.expected.kt b/nj2k/testData/copyPaste/RedundantTypeCast2.expected.kt new file mode 100644 index 00000000000..b71610200cc --- /dev/null +++ b/nj2k/testData/copyPaste/RedundantTypeCast2.expected.kt @@ -0,0 +1,5 @@ +fun foo(o: Any) { + if (o !is String) return + val l = o.length + somethingElse(o as String/* we should not remove this cast because it's not in pasted range*/) +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/RedundantTypeCast2.java b/nj2k/testData/copyPaste/RedundantTypeCast2.java new file mode 100644 index 00000000000..fda9930ed43 --- /dev/null +++ b/nj2k/testData/copyPaste/RedundantTypeCast2.java @@ -0,0 +1,6 @@ +class C { + void foo(Object o) { + if (!(o instanceof String)) return + int l = ((String) o).length(); + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/RedundantTypeCast2.to.kt b/nj2k/testData/copyPaste/RedundantTypeCast2.to.kt new file mode 100644 index 00000000000..300966f75ba --- /dev/null +++ b/nj2k/testData/copyPaste/RedundantTypeCast2.to.kt @@ -0,0 +1,3 @@ +fun foo(o: Any) { + somethingElse(o as String/* we should not remove this cast because it's not in pasted range*/) +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/SampleBlock.expected.kt b/nj2k/testData/copyPaste/SampleBlock.expected.kt new file mode 100644 index 00000000000..bd0148f4aeb --- /dev/null +++ b/nj2k/testData/copyPaste/SampleBlock.expected.kt @@ -0,0 +1,12 @@ +fun main(args: Array) { + val buffer: List = getSelectedElements(code.getFile(), code.getStartOffsets(), code.getEndOffsets()) + + val project: Project = file.getProject() + val converter = Converter(project, J2kPackage.getPluginSettings()) + val result = StringBuilder() + for (e in buffer) { + result.append(converter.elementToKotlin(e)) + } + + return StringUtil.convertLineSeparators(result.toString()) +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/SampleBlock.java b/nj2k/testData/copyPaste/SampleBlock.java new file mode 100644 index 00000000000..69382d59081 --- /dev/null +++ b/nj2k/testData/copyPaste/SampleBlock.java @@ -0,0 +1,14 @@ +class A { + private static String convertCopiedCodeToKotlin(CopiedCode code, PsiFile file) { + List buffer = getSelectedElements(code.getFile(), code.getStartOffsets(), code.getEndOffsets()); + + Project project = file.getProject(); + Converter converter = new Converter(project, J2kPackage.getPluginSettings()); + StringBuilder result = new StringBuilder(); + for (PsiElement e : buffer) { + result.append(converter.elementToKotlin(e)); + } + + return StringUtil.convertLineSeparators(result.toString()); + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/SampleBlock.to.kt b/nj2k/testData/copyPaste/SampleBlock.to.kt new file mode 100644 index 00000000000..0b0e220a256 --- /dev/null +++ b/nj2k/testData/copyPaste/SampleBlock.to.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/SeveralMethodsSample.expected.kt b/nj2k/testData/copyPaste/SeveralMethodsSample.expected.kt new file mode 100644 index 00000000000..36175151726 --- /dev/null +++ b/nj2k/testData/copyPaste/SeveralMethodsSample.expected.kt @@ -0,0 +1,39 @@ +class A { + fun someOther() = false + + private fun formatElement(element: PsiElement): String { + var element: PsiElement = element + element = JetPsiUtil.ascendIfPropertyAccessor(element) + if (element is JetNamedFunction || element is JetProperty) { + val bindingContext: BindingContext = AnalyzerFacadeWithCache.analyzeFileWithCache(element.getContainingJetFile()).getBindingContext() + val declarationDescriptor: DeclarationDescriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, element) + if (declarationDescriptor is CallableMemberDescriptor) { + val containingDescriptor: DeclarationDescriptor = declarationDescriptor.getContainingDeclaration() + if (containingDescriptor is ClassDescriptor) { + return JetBundle.message( + "x.in.y", + DescriptorRenderer.COMPACT.render(declarationDescriptor), + IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_NO_ANNOTATIONS.render(containingDescriptor) + ) + } + } + } + assert(element is PsiMethod + ) { "Method accepts only kotlin functions/properties and java methods, but '" + element.getText().toString() + "' was found" } + return JetRefactoringUtil.formatPsiMethod(element as PsiMethod, true, false) + } + + protected fun getDimensionServiceKey(): String { + return "#org.jetbrains.kotlin.idea.refactoring.safeDelete.KotlinOverridingDialog" + } + + fun getSelected(): ArrayList { + val result: ArrayList = ArrayList() + for (i in 0 until myChecked.length) { + if (myChecked[i]) { + result.add(myOverridingMethods.get(i)) + } + } + return result + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/SeveralMethodsSample.java b/nj2k/testData/copyPaste/SeveralMethodsSample.java new file mode 100644 index 00000000000..06fdf2f90f3 --- /dev/null +++ b/nj2k/testData/copyPaste/SeveralMethodsSample.java @@ -0,0 +1,40 @@ +class A { + private static String formatElement(PsiElement element) { + element = JetPsiUtil.ascendIfPropertyAccessor(element); + if (element instanceof JetNamedFunction || element instanceof JetProperty) { + BindingContext bindingContext = + AnalyzerFacadeWithCache.analyzeFileWithCache(element.getContainingJetFile()).getBindingContext(); + + DeclarationDescriptor declarationDescriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, element); + if (declarationDescriptor instanceof CallableMemberDescriptor) { + DeclarationDescriptor containingDescriptor = declarationDescriptor.getContainingDeclaration(); + if (containingDescriptor instanceof ClassDescriptor) { + return JetBundle.message( + "x.in.y", + DescriptorRenderer.COMPACT.render(declarationDescriptor), + IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_NO_ANNOTATIONS.render(containingDescriptor) + ); + } + } + } + + assert element instanceof PsiMethod + : "Method accepts only kotlin functions/properties and java methods, but '" + element.getText() + "' was found"; + return JetRefactoringUtil.formatPsiMethod((PsiMethod) element, true, false); + } + + @Override + protected String getDimensionServiceKey() { + return "#org.jetbrains.kotlin.idea.refactoring.safeDelete.KotlinOverridingDialog"; + } + + public ArrayList getSelected() { + ArrayList result = new ArrayList(); + for (int i = 0; i < myChecked.length; i++) { + if (myChecked[i]) { + result.add(myOverridingMethods.get(i)); + } + } + return result; + } +} diff --git a/nj2k/testData/copyPaste/SeveralMethodsSample.to.kt b/nj2k/testData/copyPaste/SeveralMethodsSample.to.kt new file mode 100644 index 00000000000..b1340cb1cf9 --- /dev/null +++ b/nj2k/testData/copyPaste/SeveralMethodsSample.to.kt @@ -0,0 +1,5 @@ +class A { + fun someOther() = false + + +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/SingleWordFromIdentifier.expected.kt b/nj2k/testData/copyPaste/SingleWordFromIdentifier.expected.kt new file mode 100644 index 00000000000..0bfdbcff9f7 --- /dev/null +++ b/nj2k/testData/copyPaste/SingleWordFromIdentifier.expected.kt @@ -0,0 +1 @@ +class Some \ No newline at end of file diff --git a/nj2k/testData/copyPaste/SingleWordFromIdentifier.java b/nj2k/testData/copyPaste/SingleWordFromIdentifier.java new file mode 100644 index 00000000000..3dfd2cb4b1d --- /dev/null +++ b/nj2k/testData/copyPaste/SingleWordFromIdentifier.java @@ -0,0 +1,4 @@ +// NO_CONVERSION_EXPECTED +class SomeInterestingClass { + +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/SingleWordFromIdentifier.to.kt b/nj2k/testData/copyPaste/SingleWordFromIdentifier.to.kt new file mode 100644 index 00000000000..81389d50841 --- /dev/null +++ b/nj2k/testData/copyPaste/SingleWordFromIdentifier.to.kt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nj2k/tests/org/jetbrains/kotlin/nj2k/AbstractNewJavaToKotlinCopyPasteConversionTest.kt b/nj2k/tests/org/jetbrains/kotlin/nj2k/AbstractNewJavaToKotlinCopyPasteConversionTest.kt new file mode 100644 index 00000000000..b77316883b3 --- /dev/null +++ b/nj2k/tests/org/jetbrains/kotlin/nj2k/AbstractNewJavaToKotlinCopyPasteConversionTest.kt @@ -0,0 +1,12 @@ +/* + * 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 org.jetbrains.kotlin.idea.conversion.copy.AbstractJavaToKotlinCopyPasteConversionTest + +abstract class AbstractNewJavaToKotlinCopyPasteConversionTest : AbstractJavaToKotlinCopyPasteConversionTest() { + override fun isNewJ2K(): Boolean = true +} \ No newline at end of file diff --git a/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinCopyPasteConversionTestGenerated.java b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinCopyPasteConversionTestGenerated.java new file mode 100644 index 00000000000..6875f14c223 --- /dev/null +++ b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinCopyPasteConversionTestGenerated.java @@ -0,0 +1,216 @@ +/* + * 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/copyPaste") +@TestDataPath("$PROJECT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public class NewJavaToKotlinCopyPasteConversionTestGenerated extends AbstractNewJavaToKotlinCopyPasteConversionTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath); + } + + @TestMetadata("AddImports.java") + public void testAddImports() throws Exception { + runTest("nj2k/testData/copyPaste/AddImports.java"); + } + + @TestMetadata("AddImportsButNoConversion.java") + public void testAddImportsButNoConversion() throws Exception { + runTest("nj2k/testData/copyPaste/AddImportsButNoConversion.java"); + } + + @TestMetadata("AddImportsClassInSamePackage.java") + public void testAddImportsClassInSamePackage() throws Exception { + runTest("nj2k/testData/copyPaste/AddImportsClassInSamePackage.java"); + } + + @TestMetadata("AddImportsDummyConflict.java") + public void testAddImportsDummyConflict() throws Exception { + runTest("nj2k/testData/copyPaste/AddImportsDummyConflict.java"); + } + + @TestMetadata("AddImportsWithExplicitImports.java") + public void testAddImportsWithExplicitImports() throws Exception { + runTest("nj2k/testData/copyPaste/AddImportsWithExplicitImports.java"); + } + + @TestMetadata("AddKClassImport.java") + public void testAddKClassImport() throws Exception { + runTest("nj2k/testData/copyPaste/AddKClassImport.java"); + } + + public void testAllFilesPresentInCopyPaste() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("nj2k/testData/copyPaste"), Pattern.compile("^([^\\.]+)\\.java$"), TargetBackend.ANY, true); + } + + @TestMetadata("Arithmetic.java") + public void testArithmetic() throws Exception { + runTest("nj2k/testData/copyPaste/Arithmetic.java"); + } + + @TestMetadata("ClassWithNoDocComment.java") + public void testClassWithNoDocComment() throws Exception { + runTest("nj2k/testData/copyPaste/ClassWithNoDocComment.java"); + } + + @TestMetadata("ClassWithOverrides.java") + public void testClassWithOverrides() throws Exception { + runTest("nj2k/testData/copyPaste/ClassWithOverrides.java"); + } + + @TestMetadata("Constructor.java") + public void testConstructor() throws Exception { + runTest("nj2k/testData/copyPaste/Constructor.java"); + } + + @TestMetadata("ConversionInCorrectContext.java") + public void testConversionInCorrectContext() throws Exception { + runTest("nj2k/testData/copyPaste/ConversionInCorrectContext.java"); + } + + @TestMetadata("CopyAnnotation.java") + public void testCopyAnnotation() throws Exception { + runTest("nj2k/testData/copyPaste/CopyAnnotation.java"); + } + + @TestMetadata("ExtendsTypeRef.java") + public void testExtendsTypeRef() throws Exception { + runTest("nj2k/testData/copyPaste/ExtendsTypeRef.java"); + } + + @TestMetadata("FieldWithNoEndComment.java") + public void testFieldWithNoEndComment() throws Exception { + runTest("nj2k/testData/copyPaste/FieldWithNoEndComment.java"); + } + + @TestMetadata("FieldWithNoModifierAndNoSemicolon.java") + public void testFieldWithNoModifierAndNoSemicolon() throws Exception { + runTest("nj2k/testData/copyPaste/FieldWithNoModifierAndNoSemicolon.java"); + } + + @TestMetadata("FileWithNoPackageStatement.java") + public void testFileWithNoPackageStatement() throws Exception { + runTest("nj2k/testData/copyPaste/FileWithNoPackageStatement.java"); + } + + @TestMetadata("HalfTheWhiteSpace.java") + public void testHalfTheWhiteSpace() throws Exception { + runTest("nj2k/testData/copyPaste/HalfTheWhiteSpace.java"); + } + + @TestMetadata("ImplementsTypeRef.java") + public void testImplementsTypeRef() throws Exception { + runTest("nj2k/testData/copyPaste/ImplementsTypeRef.java"); + } + + @TestMetadata("Imports1.java") + public void testImports1() throws Exception { + runTest("nj2k/testData/copyPaste/Imports1.java"); + } + + @TestMetadata("Imports2.java") + public void testImports2() throws Exception { + runTest("nj2k/testData/copyPaste/Imports2.java"); + } + + @TestMetadata("Imports3.java") + public void testImports3() throws Exception { + runTest("nj2k/testData/copyPaste/Imports3.java"); + } + + @TestMetadata("Indentation.java") + public void testIndentation() throws Exception { + runTest("nj2k/testData/copyPaste/Indentation.java"); + } + + @TestMetadata("InsertIntoComment.java") + public void testInsertIntoComment() throws Exception { + runTest("nj2k/testData/copyPaste/InsertIntoComment.java"); + } + + @TestMetadata("InsertIntoString.java") + public void testInsertIntoString() throws Exception { + runTest("nj2k/testData/copyPaste/InsertIntoString.java"); + } + + @TestMetadata("MethodDeclarationWithNoBody.java") + public void testMethodDeclarationWithNoBody() throws Exception { + runTest("nj2k/testData/copyPaste/MethodDeclarationWithNoBody.java"); + } + + @TestMetadata("MethodReferenceWithoutQualifier.java") + public void testMethodReferenceWithoutQualifier() throws Exception { + runTest("nj2k/testData/copyPaste/MethodReferenceWithoutQualifier.java"); + } + + @TestMetadata("MethodWithNoAnnotation.java") + public void testMethodWithNoAnnotation() throws Exception { + runTest("nj2k/testData/copyPaste/MethodWithNoAnnotation.java"); + } + + @TestMetadata("MethodWithOnlyOneAnnotation.java") + public void testMethodWithOnlyOneAnnotation() throws Exception { + runTest("nj2k/testData/copyPaste/MethodWithOnlyOneAnnotation.java"); + } + + @TestMetadata("OnlyClosingBrace.java") + public void testOnlyClosingBrace() throws Exception { + runTest("nj2k/testData/copyPaste/OnlyClosingBrace.java"); + } + + @TestMetadata("OnlyOneBraceFromBlock.java") + public void testOnlyOneBraceFromBlock() throws Exception { + runTest("nj2k/testData/copyPaste/OnlyOneBraceFromBlock.java"); + } + + @TestMetadata("OnlyQualifier.java") + public void testOnlyQualifier() throws Exception { + runTest("nj2k/testData/copyPaste/OnlyQualifier.java"); + } + + @TestMetadata("RawTypeRef.java") + public void testRawTypeRef() throws Exception { + runTest("nj2k/testData/copyPaste/RawTypeRef.java"); + } + + @TestMetadata("RedundantTypeCast.java") + public void testRedundantTypeCast() throws Exception { + runTest("nj2k/testData/copyPaste/RedundantTypeCast.java"); + } + + @TestMetadata("RedundantTypeCast2.java") + public void testRedundantTypeCast2() throws Exception { + runTest("nj2k/testData/copyPaste/RedundantTypeCast2.java"); + } + + @TestMetadata("SampleBlock.java") + public void testSampleBlock() throws Exception { + runTest("nj2k/testData/copyPaste/SampleBlock.java"); + } + + @TestMetadata("SeveralMethodsSample.java") + public void testSeveralMethodsSample() throws Exception { + runTest("nj2k/testData/copyPaste/SeveralMethodsSample.java"); + } + + @TestMetadata("SingleWordFromIdentifier.java") + public void testSingleWordFromIdentifier() throws Exception { + runTest("nj2k/testData/copyPaste/SingleWordFromIdentifier.java"); + } +}