Move: Optimize imports after applying "Move declaration to separate file" intention

#KT-10174 Fixed
This commit is contained in:
Alexey Sedunov
2016-04-25 15:02:30 +03:00
parent 676000cdf7
commit a00c524074
11 changed files with 48 additions and 3 deletions
+1
View File
@@ -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-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-10174](https://youtrack.jetbrains.com/issue/KT-10174) Optimize imports after applying "Move declaration to separate file" intention
#### Debugger
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations
import com.intellij.codeInsight.actions.OptimizeImportsProcessor
import com.intellij.codeInsight.intention.LowPriorityAction
import com.intellij.codeInsight.navigation.NavigationUtil
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.refactoring.createKotlinFile
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.psi.KtClass
import org.jetbrains.kotlin.psi.KtClassOrObject
@@ -103,6 +105,9 @@ class MoveDeclarationToSeparateFileIntention :
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)
}
}
@@ -108,6 +108,7 @@ class MoveKotlinDeclarationsProcessor(
val mover: Mover = Mover.Default) : BaseRefactoringProcessor(project) {
companion object {
private val REFACTORING_NAME = "Move declarations"
val REFACTORING_ID = "move.kotlin.declarations"
}
private var nonCodeUsages: Array<NonCodeUsageInfo>? = null
@@ -119,6 +120,8 @@ class MoveKotlinDeclarationsProcessor(
private val resolutionFacade by lazy { KotlinCacheService.getInstance(project).getResolutionFacade(elementsToMove) }
override fun getRefactoringId() = REFACTORING_ID
override fun createUsageViewDescriptor(usages: Array<out UsageInfo>): UsageViewDescriptor {
val targetContainerFqName = descriptor.moveTarget.targetContainerFqName?.let {
if (it.isRoot) UsageViewBundle.message("default.package.presentable.name") else it.asString()
@@ -1,7 +1,5 @@
package p
import q.bar
fun foo() {
}
@@ -0,0 +1,4 @@
package baz
class Baz {
}
@@ -0,0 +1,7 @@
package foo.bar
import baz.Baz
class Foo {
val b = Baz()
}
@@ -0,0 +1,3 @@
package foo.bar
class Bar
@@ -0,0 +1,4 @@
package baz
class Baz {
}
@@ -0,0 +1,9 @@
package foo.bar
import baz.Baz
class <caret>Foo {
val b = Baz()
}
class Bar
@@ -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);
}
@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")
public void testMoveFileToPackageMatchingDirectory_moveToDefaultDirectory_MoveToDefaultDirectory() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/multiFileIntentions/moveFileToPackageMatchingDirectory/moveToDefaultDirectory/moveToDefaultDirectory.test");