Move: Keep original file package name when moving top-level declarations to separate file (provided it's not ambiguous)
#KT-10950 Fixed
This commit is contained in:
@@ -40,6 +40,7 @@ Issues fixed:
|
||||
- [KT-11482](https://youtrack.jetbrains.com/issue/KT-11482) Fixed exception in "Move to companion object" intention
|
||||
- [KT-11483](https://youtrack.jetbrains.com/issue/KT-11483) Pass implicit receiver as argument when moving member function to companion object
|
||||
- [KT-11512](https://youtrack.jetbrains.com/issue/KT-11512) Allow choosing any source root in "Move file to directory" intention
|
||||
- [KT-10950](https://youtrack.jetbrains.com/issue/KT-10950) Keep original file package name when moving top-level declarations to separate file (provided it's not ambiguous)
|
||||
|
||||
#### Debugger
|
||||
|
||||
|
||||
@@ -95,8 +95,11 @@ import java.lang.annotation.Retention
|
||||
import java.util.*
|
||||
import javax.swing.Icon
|
||||
|
||||
fun getOrCreateKotlinFile(fileName: String, targetDir: PsiDirectory): KtFile? =
|
||||
(targetDir.findFile(fileName) ?: createKotlinFile(fileName, targetDir)) as? KtFile
|
||||
@JvmOverloads
|
||||
fun getOrCreateKotlinFile(fileName: String,
|
||||
targetDir: PsiDirectory,
|
||||
packageName: String? = targetDir.getPackage()?.qualifiedName): KtFile? =
|
||||
(targetDir.findFile(fileName) ?: createKotlinFile(fileName, targetDir, packageName)) as? KtFile
|
||||
|
||||
fun createKotlinFile(fileName: String,
|
||||
targetDir: PsiDirectory,
|
||||
|
||||
+21
-6
@@ -586,19 +586,34 @@ public class MoveKotlinTopLevelDeclarationsDialog extends RefactoringDialog {
|
||||
return null;
|
||||
}
|
||||
|
||||
PsiPackage psiPackage = JavaDirectoryService.getInstance().getPackage(psiDirectory);
|
||||
if (psiPackage == null) {
|
||||
setErrorText("Could not find package corresponding to " + targetDir.getPath());
|
||||
return null;
|
||||
Set<FqName> sourcePackageFqNames = CollectionsKt.mapTo(
|
||||
sourceFiles,
|
||||
new LinkedHashSet<FqName>(),
|
||||
new Function1<KtFile, FqName>() {
|
||||
@Override
|
||||
public FqName invoke(KtFile file) {
|
||||
return file.getPackageFqName();
|
||||
}
|
||||
}
|
||||
);
|
||||
FqName targetPackageFqName = CollectionsKt.singleOrNull(sourcePackageFqNames);
|
||||
if (targetPackageFqName == null) {
|
||||
PsiPackage psiPackage = JavaDirectoryService.getInstance().getPackage(psiDirectory);
|
||||
if (psiPackage == null) {
|
||||
setErrorText("Could not find package corresponding to " + targetDir.getPath());
|
||||
return null;
|
||||
}
|
||||
targetPackageFqName = new FqName(psiPackage.getQualifiedName());
|
||||
}
|
||||
|
||||
final String finalTargetPackageFqName = targetPackageFqName.asString();
|
||||
return new KotlinMoveTargetForDeferredFile(
|
||||
new FqName(psiPackage.getQualifiedName()),
|
||||
targetPackageFqName,
|
||||
psiDirectory,
|
||||
new Function1<KtFile, KtFile>() {
|
||||
@Override
|
||||
public KtFile invoke(@NotNull KtFile originalFile) {
|
||||
return JetRefactoringUtilKt.getOrCreateKotlinFile(targetFile.getName(), psiDirectory);
|
||||
return JetRefactoringUtilKt.getOrCreateKotlinFile(targetFile.getName(), psiDirectory, finalTargetPackageFqName);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user