diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt index 2de8609fab7..ea63234e172 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt @@ -177,6 +177,7 @@ private val removeRedundantElementsProcessingGroup = RemoveExplicitTypeArgumentsProcessing(), RemoveJavaStreamsCollectCallTypeArgumentsProcessing(), ExplicitThisInspectionBasedProcessing(), + RemoveOpenModifierOnTopLevelDeclarationsProcessing(), intentionBasedProcessing(RemoveEmptyClassBodyIntention()) ) ) diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt index 53149e66a45..5570d115342 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt @@ -503,4 +503,16 @@ class MoveLambdaOutsideParenthesesProcessing : override fun apply(element: KtCallExpression) { element.moveFunctionLiteralOutsideParentheses() } -} \ No newline at end of file +} + +class RemoveOpenModifierOnTopLevelDeclarationsProcessing : + InspectionLikeProcessingForElement(KtDeclaration::class.java) { + override fun isApplicableTo(element: KtDeclaration, settings: ConverterSettings?): Boolean = + element.hasModifier(KtTokens.OPEN_KEYWORD) + && (element is KtFunction || element is KtProperty) + && element.parent is KtFile + + override fun apply(element: KtDeclaration) { + element.removeModifier(KtTokens.OPEN_KEYWORD) + } +} diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ModalityConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ModalityConversion.kt index f7179ff9bee..28732c710ff 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ModalityConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ModalityConversion.kt @@ -41,6 +41,9 @@ class ModalityConversion(context: NewJ2kConverterContext) : RecursiveApplicableC val psi = method.psi() ?: return val containingClass = method.parentOfType() ?: return when { + method.visibility == Visibility.PRIVATE -> { + method.modality = Modality.FINAL + } method.modality != Modality.ABSTRACT && psi.findSuperMethods().isNotEmpty() -> { method.modality = Modality.FINAL diff --git a/nj2k/testData/copyPaste/OpenPublicFunctionToTopLevel.expected.kt b/nj2k/testData/copyPaste/OpenPublicFunctionToTopLevel.expected.kt new file mode 100644 index 00000000000..f6604a573f9 --- /dev/null +++ b/nj2k/testData/copyPaste/OpenPublicFunctionToTopLevel.expected.kt @@ -0,0 +1 @@ +fun x() {} diff --git a/nj2k/testData/copyPaste/OpenPublicFunctionToTopLevel.java b/nj2k/testData/copyPaste/OpenPublicFunctionToTopLevel.java new file mode 100644 index 00000000000..03d092bdeea --- /dev/null +++ b/nj2k/testData/copyPaste/OpenPublicFunctionToTopLevel.java @@ -0,0 +1,3 @@ +class A { + void x() {} +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/OpenPublicFunctionToTopLevel.to.kt b/nj2k/testData/copyPaste/OpenPublicFunctionToTopLevel.to.kt new file mode 100644 index 00000000000..81389d50841 --- /dev/null +++ b/nj2k/testData/copyPaste/OpenPublicFunctionToTopLevel.to.kt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nj2k/testData/copyPaste/PrivateFunctionToTopLevel.expected.kt b/nj2k/testData/copyPaste/PrivateFunctionToTopLevel.expected.kt new file mode 100644 index 00000000000..c5a246f964c --- /dev/null +++ b/nj2k/testData/copyPaste/PrivateFunctionToTopLevel.expected.kt @@ -0,0 +1 @@ +private fun x() {} diff --git a/nj2k/testData/copyPaste/PrivateFunctionToTopLevel.java b/nj2k/testData/copyPaste/PrivateFunctionToTopLevel.java new file mode 100644 index 00000000000..c5b8d53c828 --- /dev/null +++ b/nj2k/testData/copyPaste/PrivateFunctionToTopLevel.java @@ -0,0 +1,3 @@ +class A { + private void x() {} +} \ No newline at end of file diff --git a/nj2k/testData/copyPaste/PrivateFunctionToTopLevel.to.kt b/nj2k/testData/copyPaste/PrivateFunctionToTopLevel.to.kt new file mode 100644 index 00000000000..81389d50841 --- /dev/null +++ b/nj2k/testData/copyPaste/PrivateFunctionToTopLevel.to.kt @@ -0,0 +1 @@ + \ 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 index 1fdee77bf03..65c526d34fe 100644 --- a/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinCopyPasteConversionTestGenerated.java +++ b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinCopyPasteConversionTestGenerated.java @@ -183,6 +183,16 @@ public class NewJavaToKotlinCopyPasteConversionTestGenerated extends AbstractNew runTest("nj2k/testData/copyPaste/OnlyQualifier.java"); } + @TestMetadata("OpenPublicFunctionToTopLevel.java") + public void testOpenPublicFunctionToTopLevel() throws Exception { + runTest("nj2k/testData/copyPaste/OpenPublicFunctionToTopLevel.java"); + } + + @TestMetadata("PrivateFunctionToTopLevel.java") + public void testPrivateFunctionToTopLevel() throws Exception { + runTest("nj2k/testData/copyPaste/PrivateFunctionToTopLevel.java"); + } + @TestMetadata("RawTypeRef.java") public void testRawTypeRef() throws Exception { runTest("nj2k/testData/copyPaste/RawTypeRef.java");