From d88d7a0ac5e4a411f8c6c6048f5e010a237a68b3 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 12 May 2015 19:05:55 +0300 Subject: [PATCH] Move: Do not use existing file name when moving its top-level declaration(s) #KT-7697 Fixed --- .../MoveKotlinTopLevelDeclarationsHandler.kt | 3 +-- .../MoveKotlinTopLevelDeclarationsProcessor.kt | 4 ++-- .../org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt | 6 +----- .../after/newPackage/{fun.kt => foo.kt} | 0 4 files changed, 4 insertions(+), 9 deletions(-) rename idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/moveOnlyFunctionToPackageUsedInJava/after/newPackage/{fun.kt => foo.kt} (100%) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveTopLevelDeclarations/MoveKotlinTopLevelDeclarationsHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveTopLevelDeclarations/MoveKotlinTopLevelDeclarationsHandler.kt index a149951831a..fd2aa9bf5d0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveTopLevelDeclarations/MoveKotlinTopLevelDeclarationsHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveTopLevelDeclarations/MoveKotlinTopLevelDeclarationsHandler.kt @@ -51,8 +51,7 @@ public class MoveKotlinTopLevelDeclarationsHandler : MoveHandlerDelegate() { for (element in elements) { if (element !is JetNamedDeclaration) continue - val fileName = element.getFileNameAfterMove() - if (fileName != null && !fileNames.add(fileName)) { + if (!fileNames.add(element.getFileNameAfterMove())) { val message = RefactoringBundle.getCannotRefactorMessage( RefactoringBundle.message("there.are.going.to.be.multiple.destination.files.with.the.same.name") ) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveTopLevelDeclarations/MoveKotlinTopLevelDeclarationsProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveTopLevelDeclarations/MoveKotlinTopLevelDeclarationsProcessor.kt index 77d296625c3..0d167e434d2 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveTopLevelDeclarations/MoveKotlinTopLevelDeclarationsProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveTopLevelDeclarations/MoveKotlinTopLevelDeclarationsProcessor.kt @@ -241,8 +241,8 @@ public class MoveKotlinTopLevelDeclarationsProcessor( val targetPsi = moveTarget.getOrCreateTargetPsi(declaration) val targetFile = if (targetPsi is PsiDirectory) { - val existingFile = if (targetPsi != file!!.getContainingDirectory()) targetPsi.findFile(file.getName()) else null - existingFile ?: declaration.getFileNameAfterMove()?.let {createKotlinFile(it, targetPsi)} + val targetFileName = declaration.getFileNameAfterMove() + targetPsi.findFile(targetFileName) ?: createKotlinFile(targetFileName, targetPsi) } else targetPsi diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt index cf5d07736c0..84441fc4815 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt @@ -156,11 +156,7 @@ fun createMoveUsageInfoIfPossible( return MoveRenameUsageInfo(element, reference, startOffset, endOffset, referencedElement, false) } -public fun JetNamedDeclaration.getFileNameAfterMove(): String? { - return (getContainingFile() as? JetFile)?.let { file -> - if (file.getDeclarations().size() > 1) "${getName()}.${JetFileType.EXTENSION}" else file.getName() - } -} +public fun JetNamedDeclaration.getFileNameAfterMove(): String = "${getName()}.${JetFileType.EXTENSION}" // returns true if successful private fun updateJavaReference(reference: PsiReferenceExpression, oldElement: PsiElement, newElement: PsiElement): Boolean { diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/moveOnlyFunctionToPackageUsedInJava/after/newPackage/fun.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/moveOnlyFunctionToPackageUsedInJava/after/newPackage/foo.kt similarity index 100% rename from idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/moveOnlyFunctionToPackageUsedInJava/after/newPackage/fun.kt rename to idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/moveOnlyFunctionToPackageUsedInJava/after/newPackage/foo.kt