Added possibility to override Path Chooser for MoveKotlinNestedClassesToUpperLevelModel
This commit is contained in:
+10
-2
@@ -7,9 +7,11 @@ package org.jetbrains.kotlin.idea.actions.internal.refactoringTesting.cases
|
||||
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiDirectory
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiFileSystemItem
|
||||
import com.intellij.refactoring.PackageWrapper
|
||||
import com.intellij.refactoring.move.MoveCallback
|
||||
import com.intellij.refactoring.move.MoveHandler
|
||||
import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName
|
||||
@@ -112,7 +114,7 @@ internal class MoveKotlinDeclarationsHandlerTestActions(private val caseDataKeep
|
||||
?: outerClass.containingClassOrObject
|
||||
?: outerClass.containingFile.let { it.containingDirectory ?: it }
|
||||
|
||||
val model = MoveKotlinNestedClassesToUpperLevelModel(
|
||||
val model = object : MoveKotlinNestedClassesToUpperLevelModel(
|
||||
project = nestedClass.project,
|
||||
innerClass = nestedClass,
|
||||
target = newTarget,
|
||||
@@ -123,7 +125,13 @@ internal class MoveKotlinDeclarationsHandlerTestActions(private val caseDataKeep
|
||||
isSearchInNonJavaFiles = randomBoolean(),
|
||||
packageName = randomClassName(),
|
||||
isOpenInEditor = false
|
||||
)
|
||||
) {
|
||||
override fun chooseSourceRoot(
|
||||
newPackage: PackageWrapper,
|
||||
contentSourceRoots: List<VirtualFile>,
|
||||
initialDir: PsiDirectory?
|
||||
) = randomNullability { contentSourceRoots.randomElementOrNull() }
|
||||
}
|
||||
|
||||
caseDataKeeper.caseData = model.testDataString()
|
||||
|
||||
|
||||
+35
-3
@@ -7,11 +7,14 @@ package org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.ui;
|
||||
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.refactoring.HelpID;
|
||||
import com.intellij.refactoring.PackageWrapper;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
import com.intellij.refactoring.move.MoveDialogBase;
|
||||
import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesUtil;
|
||||
import com.intellij.refactoring.ui.NameSuggestionsField;
|
||||
import com.intellij.refactoring.ui.PackageNameReferenceEditorCombo;
|
||||
import com.intellij.ui.EditorTextField;
|
||||
@@ -200,8 +203,37 @@ public class MoveKotlinNestedClassesToUpperLevelDialog extends MoveDialogBase {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
private static class MoveKotlinNestedClassesToUpperLevelModelWithUIChooser extends MoveKotlinNestedClassesToUpperLevelModel {
|
||||
public MoveKotlinNestedClassesToUpperLevelModelWithUIChooser(
|
||||
@NotNull Project project,
|
||||
@NotNull KtClassOrObject innerClass,
|
||||
@NotNull PsiElement target,
|
||||
@Nullable String parameter,
|
||||
@NotNull String className,
|
||||
boolean passOuterClass,
|
||||
boolean searchInComments,
|
||||
boolean isSearchInNonJavaFiles,
|
||||
@NotNull String packageName,
|
||||
boolean isOpenInEditor
|
||||
) {
|
||||
super(project, innerClass, target, parameter, className, passOuterClass, searchInComments, isSearchInNonJavaFiles, packageName,
|
||||
isOpenInEditor);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
protected VirtualFile chooseSourceRoot(
|
||||
@NotNull PackageWrapper newPackage,
|
||||
@NotNull List<? extends VirtualFile> contentSourceRoots,
|
||||
@Nullable PsiDirectory initialDir
|
||||
) {
|
||||
return MoveClassesOrPackagesUtil.chooseSourceRoot(newPackage, contentSourceRoots, initialDir);
|
||||
}
|
||||
}
|
||||
|
||||
private Model<MoveKotlinDeclarationsProcessor> getModel() {
|
||||
return new MoveKotlinNestedClassesToUpperLevelModel(
|
||||
return new MoveKotlinNestedClassesToUpperLevelModelWithUIChooser(
|
||||
project,
|
||||
innerClass,
|
||||
targetContainer,
|
||||
@@ -211,10 +243,10 @@ public class MoveKotlinNestedClassesToUpperLevelDialog extends MoveDialogBase {
|
||||
searchInCommentsCheckBox.isSelected(),
|
||||
searchForTextOccurrencesCheckBox.isSelected(),
|
||||
packageNameField.getText(),
|
||||
isOpenInEditor());
|
||||
isOpenInEditor()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void doAction() {
|
||||
|
||||
|
||||
+8
-2
@@ -38,7 +38,7 @@ import org.jetbrains.kotlin.psi.psiUtil.isIdentifier
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
|
||||
internal class MoveKotlinNestedClassesToUpperLevelModel(
|
||||
internal abstract class MoveKotlinNestedClassesToUpperLevelModel(
|
||||
val project: Project,
|
||||
val innerClass: KtClassOrObject,
|
||||
val target: PsiElement,
|
||||
@@ -51,6 +51,12 @@ internal class MoveKotlinNestedClassesToUpperLevelModel(
|
||||
val isOpenInEditor: Boolean
|
||||
) : Model<MoveKotlinDeclarationsProcessor> {
|
||||
|
||||
protected abstract fun chooseSourceRoot(
|
||||
newPackage: PackageWrapper,
|
||||
contentSourceRoots: List<VirtualFile>,
|
||||
initialDir: PsiDirectory?
|
||||
): VirtualFile?
|
||||
|
||||
private val innerClassDescriptor = innerClass.unsafeResolveToDescriptor(BodyResolveMode.FULL) as ClassDescriptor
|
||||
|
||||
private fun getTargetContainer(): PsiElement? {
|
||||
@@ -77,7 +83,7 @@ internal class MoveKotlinNestedClassesToUpperLevelModel(
|
||||
}
|
||||
}
|
||||
|
||||
targetSourceRoot = MoveClassesOrPackagesUtil.chooseSourceRoot(newPackage, contentSourceRoots, initialDir) ?: return null
|
||||
targetSourceRoot = chooseSourceRoot(newPackage, contentSourceRoots, initialDir) ?: return null
|
||||
} else {
|
||||
targetSourceRoot = contentSourceRoots[0]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user