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.editor.Editor
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.PsiDirectory
|
import com.intellij.psi.PsiDirectory
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiFileSystemItem
|
import com.intellij.psi.PsiFileSystemItem
|
||||||
|
import com.intellij.refactoring.PackageWrapper
|
||||||
import com.intellij.refactoring.move.MoveCallback
|
import com.intellij.refactoring.move.MoveCallback
|
||||||
import com.intellij.refactoring.move.MoveHandler
|
import com.intellij.refactoring.move.MoveHandler
|
||||||
import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName
|
import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName
|
||||||
@@ -112,7 +114,7 @@ internal class MoveKotlinDeclarationsHandlerTestActions(private val caseDataKeep
|
|||||||
?: outerClass.containingClassOrObject
|
?: outerClass.containingClassOrObject
|
||||||
?: outerClass.containingFile.let { it.containingDirectory ?: it }
|
?: outerClass.containingFile.let { it.containingDirectory ?: it }
|
||||||
|
|
||||||
val model = MoveKotlinNestedClassesToUpperLevelModel(
|
val model = object : MoveKotlinNestedClassesToUpperLevelModel(
|
||||||
project = nestedClass.project,
|
project = nestedClass.project,
|
||||||
innerClass = nestedClass,
|
innerClass = nestedClass,
|
||||||
target = newTarget,
|
target = newTarget,
|
||||||
@@ -123,7 +125,13 @@ internal class MoveKotlinDeclarationsHandlerTestActions(private val caseDataKeep
|
|||||||
isSearchInNonJavaFiles = randomBoolean(),
|
isSearchInNonJavaFiles = randomBoolean(),
|
||||||
packageName = randomClassName(),
|
packageName = randomClassName(),
|
||||||
isOpenInEditor = false
|
isOpenInEditor = false
|
||||||
)
|
) {
|
||||||
|
override fun chooseSourceRoot(
|
||||||
|
newPackage: PackageWrapper,
|
||||||
|
contentSourceRoots: List<VirtualFile>,
|
||||||
|
initialDir: PsiDirectory?
|
||||||
|
) = randomNullability { contentSourceRoots.randomElementOrNull() }
|
||||||
|
}
|
||||||
|
|
||||||
caseDataKeeper.caseData = model.testDataString()
|
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.options.ConfigurationException;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.psi.PsiDirectory;
|
import com.intellij.psi.PsiDirectory;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.refactoring.HelpID;
|
import com.intellij.refactoring.HelpID;
|
||||||
|
import com.intellij.refactoring.PackageWrapper;
|
||||||
import com.intellij.refactoring.RefactoringBundle;
|
import com.intellij.refactoring.RefactoringBundle;
|
||||||
import com.intellij.refactoring.move.MoveDialogBase;
|
import com.intellij.refactoring.move.MoveDialogBase;
|
||||||
|
import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesUtil;
|
||||||
import com.intellij.refactoring.ui.NameSuggestionsField;
|
import com.intellij.refactoring.ui.NameSuggestionsField;
|
||||||
import com.intellij.refactoring.ui.PackageNameReferenceEditorCombo;
|
import com.intellij.refactoring.ui.PackageNameReferenceEditorCombo;
|
||||||
import com.intellij.ui.EditorTextField;
|
import com.intellij.ui.EditorTextField;
|
||||||
@@ -200,8 +203,37 @@ public class MoveKotlinNestedClassesToUpperLevelDialog extends MoveDialogBase {
|
|||||||
return null;
|
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() {
|
private Model<MoveKotlinDeclarationsProcessor> getModel() {
|
||||||
return new MoveKotlinNestedClassesToUpperLevelModel(
|
return new MoveKotlinNestedClassesToUpperLevelModelWithUIChooser(
|
||||||
project,
|
project,
|
||||||
innerClass,
|
innerClass,
|
||||||
targetContainer,
|
targetContainer,
|
||||||
@@ -211,10 +243,10 @@ public class MoveKotlinNestedClassesToUpperLevelDialog extends MoveDialogBase {
|
|||||||
searchInCommentsCheckBox.isSelected(),
|
searchInCommentsCheckBox.isSelected(),
|
||||||
searchForTextOccurrencesCheckBox.isSelected(),
|
searchForTextOccurrencesCheckBox.isSelected(),
|
||||||
packageNameField.getText(),
|
packageNameField.getText(),
|
||||||
isOpenInEditor());
|
isOpenInEditor()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doAction() {
|
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.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
|
|
||||||
internal class MoveKotlinNestedClassesToUpperLevelModel(
|
internal abstract class MoveKotlinNestedClassesToUpperLevelModel(
|
||||||
val project: Project,
|
val project: Project,
|
||||||
val innerClass: KtClassOrObject,
|
val innerClass: KtClassOrObject,
|
||||||
val target: PsiElement,
|
val target: PsiElement,
|
||||||
@@ -51,6 +51,12 @@ internal class MoveKotlinNestedClassesToUpperLevelModel(
|
|||||||
val isOpenInEditor: Boolean
|
val isOpenInEditor: Boolean
|
||||||
) : Model<MoveKotlinDeclarationsProcessor> {
|
) : Model<MoveKotlinDeclarationsProcessor> {
|
||||||
|
|
||||||
|
protected abstract fun chooseSourceRoot(
|
||||||
|
newPackage: PackageWrapper,
|
||||||
|
contentSourceRoots: List<VirtualFile>,
|
||||||
|
initialDir: PsiDirectory?
|
||||||
|
): VirtualFile?
|
||||||
|
|
||||||
private val innerClassDescriptor = innerClass.unsafeResolveToDescriptor(BodyResolveMode.FULL) as ClassDescriptor
|
private val innerClassDescriptor = innerClass.unsafeResolveToDescriptor(BodyResolveMode.FULL) as ClassDescriptor
|
||||||
|
|
||||||
private fun getTargetContainer(): PsiElement? {
|
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 {
|
} else {
|
||||||
targetSourceRoot = contentSourceRoots[0]
|
targetSourceRoot = contentSourceRoots[0]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user