Move: Optimize imports after applying "Move declaration to separate file" intention
#KT-10174 Fixed
This commit is contained in:
@@ -41,6 +41,7 @@ Issues fixed:
|
|||||||
- [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)
|
- [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)
|
||||||
|
- [KT-10174](https://youtrack.jetbrains.com/issue/KT-10174) Optimize imports after applying "Move declaration to separate file" intention
|
||||||
|
|
||||||
#### Debugger
|
#### Debugger
|
||||||
|
|
||||||
|
|||||||
+6
-1
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations
|
package org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations
|
||||||
|
|
||||||
|
import com.intellij.codeInsight.actions.OptimizeImportsProcessor
|
||||||
import com.intellij.codeInsight.intention.LowPriorityAction
|
import com.intellij.codeInsight.intention.LowPriorityAction
|
||||||
import com.intellij.codeInsight.navigation.NavigationUtil
|
import com.intellij.codeInsight.navigation.NavigationUtil
|
||||||
import com.intellij.openapi.application.ApplicationManager
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
@@ -28,6 +29,7 @@ import org.jetbrains.kotlin.idea.intentions.SelfTargetingRangeIntention
|
|||||||
import org.jetbrains.kotlin.idea.core.moveCaret
|
import org.jetbrains.kotlin.idea.core.moveCaret
|
||||||
import org.jetbrains.kotlin.idea.refactoring.createKotlinFile
|
import org.jetbrains.kotlin.idea.refactoring.createKotlinFile
|
||||||
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.ui.MoveKotlinTopLevelDeclarationsDialog
|
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.ui.MoveKotlinTopLevelDeclarationsDialog
|
||||||
|
import org.jetbrains.kotlin.idea.refactoring.runRefactoringWithPostprocessing
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.psi.KtClass
|
import org.jetbrains.kotlin.psi.KtClass
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
@@ -103,6 +105,9 @@ class MoveDeclarationToSeparateFileIntention :
|
|||||||
FileEditorManager.getInstance(project).selectedTextEditor?.moveCaret(newDeclaration.startOffset + originalOffset)
|
FileEditorManager.getInstance(project).selectedTextEditor?.moveCaret(newDeclaration.startOffset + originalOffset)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
MoveKotlinDeclarationsProcessor(project, moveOptions).run()
|
|
||||||
|
val move = { MoveKotlinDeclarationsProcessor(project, moveOptions).run() }
|
||||||
|
val optimizeImports = { OptimizeImportsProcessor(project, file).run() }
|
||||||
|
move.runRefactoringWithPostprocessing(project, MoveKotlinDeclarationsProcessor.REFACTORING_ID, optimizeImports)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+3
@@ -108,6 +108,7 @@ class MoveKotlinDeclarationsProcessor(
|
|||||||
val mover: Mover = Mover.Default) : BaseRefactoringProcessor(project) {
|
val mover: Mover = Mover.Default) : BaseRefactoringProcessor(project) {
|
||||||
companion object {
|
companion object {
|
||||||
private val REFACTORING_NAME = "Move declarations"
|
private val REFACTORING_NAME = "Move declarations"
|
||||||
|
val REFACTORING_ID = "move.kotlin.declarations"
|
||||||
}
|
}
|
||||||
|
|
||||||
private var nonCodeUsages: Array<NonCodeUsageInfo>? = null
|
private var nonCodeUsages: Array<NonCodeUsageInfo>? = null
|
||||||
@@ -119,6 +120,8 @@ class MoveKotlinDeclarationsProcessor(
|
|||||||
|
|
||||||
private val resolutionFacade by lazy { KotlinCacheService.getInstance(project).getResolutionFacade(elementsToMove) }
|
private val resolutionFacade by lazy { KotlinCacheService.getInstance(project).getResolutionFacade(elementsToMove) }
|
||||||
|
|
||||||
|
override fun getRefactoringId() = REFACTORING_ID
|
||||||
|
|
||||||
override fun createUsageViewDescriptor(usages: Array<out UsageInfo>): UsageViewDescriptor {
|
override fun createUsageViewDescriptor(usages: Array<out UsageInfo>): UsageViewDescriptor {
|
||||||
val targetContainerFqName = descriptor.moveTarget.targetContainerFqName?.let {
|
val targetContainerFqName = descriptor.moveTarget.targetContainerFqName?.let {
|
||||||
if (it.isRoot) UsageViewBundle.message("default.package.presentable.name") else it.asString()
|
if (it.isRoot) UsageViewBundle.message("default.package.presentable.name") else it.asString()
|
||||||
|
|||||||
idea/testData/multiFileIntentions/moveDeclarationToSeparateFile/moveClassToFile/after/source/test.kt
Vendored
-2
@@ -1,7 +1,5 @@
|
|||||||
package p
|
package p
|
||||||
|
|
||||||
import q.bar
|
|
||||||
|
|
||||||
fun foo() {
|
fun foo() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+4
@@ -0,0 +1,4 @@
|
|||||||
|
package baz
|
||||||
|
|
||||||
|
class Baz {
|
||||||
|
}
|
||||||
Vendored
+7
@@ -0,0 +1,7 @@
|
|||||||
|
package foo.bar
|
||||||
|
|
||||||
|
import baz.Baz
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
val b = Baz()
|
||||||
|
}
|
||||||
Vendored
+3
@@ -0,0 +1,3 @@
|
|||||||
|
package foo.bar
|
||||||
|
|
||||||
|
class Bar
|
||||||
Vendored
+4
@@ -0,0 +1,4 @@
|
|||||||
|
package baz
|
||||||
|
|
||||||
|
class Baz {
|
||||||
|
}
|
||||||
Vendored
+9
@@ -0,0 +1,9 @@
|
|||||||
|
package foo.bar
|
||||||
|
|
||||||
|
import baz.Baz
|
||||||
|
|
||||||
|
class <caret>Foo {
|
||||||
|
val b = Baz()
|
||||||
|
}
|
||||||
|
|
||||||
|
class Bar
|
||||||
idea/testData/multiFileIntentions/moveDeclarationToSeparateFile/optimizeImports/optimizeImports.test
Vendored
+5
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"mainFile": "test.kt",
|
||||||
|
"intentionClass": "org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveDeclarationToSeparateFileIntention",
|
||||||
|
"isApplicable": "true"
|
||||||
|
}
|
||||||
@@ -83,6 +83,12 @@ public class MultiFileIntentionTestGenerated extends AbstractMultiFileIntentionT
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("moveDeclarationToSeparateFile/optimizeImports/optimizeImports.test")
|
||||||
|
public void testMoveDeclarationToSeparateFile_optimizeImports_OptimizeImports() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/multiFileIntentions/moveDeclarationToSeparateFile/optimizeImports/optimizeImports.test");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("moveFileToPackageMatchingDirectory/moveToDefaultDirectory/moveToDefaultDirectory.test")
|
@TestMetadata("moveFileToPackageMatchingDirectory/moveToDefaultDirectory/moveToDefaultDirectory.test")
|
||||||
public void testMoveFileToPackageMatchingDirectory_moveToDefaultDirectory_MoveToDefaultDirectory() throws Exception {
|
public void testMoveFileToPackageMatchingDirectory_moveToDefaultDirectory_MoveToDefaultDirectory() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/multiFileIntentions/moveFileToPackageMatchingDirectory/moveToDefaultDirectory/moveToDefaultDirectory.test");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/multiFileIntentions/moveFileToPackageMatchingDirectory/moveToDefaultDirectory/moveToDefaultDirectory.test");
|
||||||
|
|||||||
Reference in New Issue
Block a user