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-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-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-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
|
#### Debugger
|
||||||
|
|
||||||
|
|||||||
@@ -95,8 +95,11 @@ import java.lang.annotation.Retention
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
import javax.swing.Icon
|
import javax.swing.Icon
|
||||||
|
|
||||||
fun getOrCreateKotlinFile(fileName: String, targetDir: PsiDirectory): KtFile? =
|
@JvmOverloads
|
||||||
(targetDir.findFile(fileName) ?: createKotlinFile(fileName, targetDir)) as? KtFile
|
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,
|
fun createKotlinFile(fileName: String,
|
||||||
targetDir: PsiDirectory,
|
targetDir: PsiDirectory,
|
||||||
|
|||||||
+21
-6
@@ -586,19 +586,34 @@ public class MoveKotlinTopLevelDeclarationsDialog extends RefactoringDialog {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
PsiPackage psiPackage = JavaDirectoryService.getInstance().getPackage(psiDirectory);
|
Set<FqName> sourcePackageFqNames = CollectionsKt.mapTo(
|
||||||
if (psiPackage == null) {
|
sourceFiles,
|
||||||
setErrorText("Could not find package corresponding to " + targetDir.getPath());
|
new LinkedHashSet<FqName>(),
|
||||||
return null;
|
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(
|
return new KotlinMoveTargetForDeferredFile(
|
||||||
new FqName(psiPackage.getQualifiedName()),
|
targetPackageFqName,
|
||||||
psiDirectory,
|
psiDirectory,
|
||||||
new Function1<KtFile, KtFile>() {
|
new Function1<KtFile, KtFile>() {
|
||||||
@Override
|
@Override
|
||||||
public KtFile invoke(@NotNull KtFile originalFile) {
|
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