Minor: cleanup ChangePackageIntention
This commit is contained in:
+43
-38
@@ -23,8 +23,8 @@ import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.PsiDocumentManager
|
||||
import org.jetbrains.kotlin.idea.core.util.CodeInsightUtils
|
||||
import org.jetbrains.kotlin.idea.core.quoteSegmentsIfNeeded
|
||||
import org.jetbrains.kotlin.idea.core.util.CodeInsightUtils
|
||||
import org.jetbrains.kotlin.idea.intentions.SelfTargetingOffsetIndependentIntention
|
||||
import org.jetbrains.kotlin.idea.refactoring.hasIdentifiersOnly
|
||||
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
||||
@@ -32,9 +32,10 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||
import org.jetbrains.kotlin.psi.KtPackageDirective
|
||||
|
||||
class ChangePackageIntention: SelfTargetingOffsetIndependentIntention<KtPackageDirective>(KtPackageDirective::class.java, "Change package") {
|
||||
class ChangePackageIntention :
|
||||
SelfTargetingOffsetIndependentIntention<KtPackageDirective>(KtPackageDirective::class.java, "Change package") {
|
||||
companion object {
|
||||
private val PACKAGE_NAME_VAR = "PACKAGE_NAME"
|
||||
private const val PACKAGE_NAME_VAR = "PACKAGE_NAME"
|
||||
}
|
||||
|
||||
override fun isApplicableTo(element: KtPackageDirective) = element.packageNameExpression != null
|
||||
@@ -54,14 +55,14 @@ class ChangePackageIntention: SelfTargetingOffsetIndependentIntention<KtPackageD
|
||||
|
||||
val builder = TemplateBuilderImpl(file)
|
||||
builder.replaceElement(
|
||||
nameExpression,
|
||||
PACKAGE_NAME_VAR,
|
||||
object: Expression() {
|
||||
override fun calculateQuickResult(context: ExpressionContext?) = TextResult(currentName)
|
||||
override fun calculateResult(context: ExpressionContext?) = TextResult(currentName)
|
||||
override fun calculateLookupItems(context: ExpressionContext?) = arrayOf(LookupElementBuilder.create(currentName))
|
||||
},
|
||||
true
|
||||
nameExpression,
|
||||
PACKAGE_NAME_VAR,
|
||||
object : Expression() {
|
||||
override fun calculateQuickResult(context: ExpressionContext?) = TextResult(currentName)
|
||||
override fun calculateResult(context: ExpressionContext?) = TextResult(currentName)
|
||||
override fun calculateLookupItems(context: ExpressionContext?) = arrayOf(LookupElementBuilder.create(currentName))
|
||||
},
|
||||
true
|
||||
)
|
||||
|
||||
var enteredName: String? = null
|
||||
@@ -69,34 +70,38 @@ class ChangePackageIntention: SelfTargetingOffsetIndependentIntention<KtPackageD
|
||||
|
||||
editor.caretModel.moveToOffset(0)
|
||||
TemplateManager.getInstance(project).startTemplate(
|
||||
editor,
|
||||
builder.buildInlineTemplate(),
|
||||
object: TemplateEditingAdapter() {
|
||||
override fun beforeTemplateFinished(state: TemplateState, template: Template?) {
|
||||
enteredName = state.getVariableValue(PACKAGE_NAME_VAR)!!.text
|
||||
affectedRange = state.getSegmentRange(0)
|
||||
}
|
||||
|
||||
override fun templateFinished(template: Template, brokenOff: Boolean) {
|
||||
if (brokenOff || enteredName == null || affectedRange == null) return
|
||||
|
||||
// Restore original name and run refactoring
|
||||
|
||||
val document = editor.document
|
||||
project.executeWriteCommand(text) {
|
||||
document.replaceString(affectedRange!!.startOffset, affectedRange!!.endOffset, FqName(currentName).quoteSegmentsIfNeeded())
|
||||
}
|
||||
PsiDocumentManager.getInstance(project).commitDocument(document)
|
||||
PsiDocumentManager.getInstance(project).doPostponedOperationsAndUnblockDocument(document)
|
||||
|
||||
if (!FqNameUnsafe(enteredName!!).hasIdentifiersOnly()) {
|
||||
CodeInsightUtils.showErrorHint(project, editor, "$enteredName is not a valid package name", "Change package", null)
|
||||
return
|
||||
}
|
||||
|
||||
KotlinChangePackageRefactoring(file).run(FqName(enteredName!!))
|
||||
}
|
||||
editor,
|
||||
builder.buildInlineTemplate(),
|
||||
object : TemplateEditingAdapter() {
|
||||
override fun beforeTemplateFinished(state: TemplateState, template: Template?) {
|
||||
enteredName = state.getVariableValue(PACKAGE_NAME_VAR)!!.text
|
||||
affectedRange = state.getSegmentRange(0)
|
||||
}
|
||||
|
||||
override fun templateFinished(template: Template, brokenOff: Boolean) {
|
||||
if (brokenOff || enteredName == null || affectedRange == null) return
|
||||
|
||||
// Restore original name and run refactoring
|
||||
|
||||
val document = editor.document
|
||||
project.executeWriteCommand(text) {
|
||||
document.replaceString(
|
||||
affectedRange!!.startOffset,
|
||||
affectedRange!!.endOffset,
|
||||
FqName(currentName).quoteSegmentsIfNeeded()
|
||||
)
|
||||
}
|
||||
PsiDocumentManager.getInstance(project).commitDocument(document)
|
||||
PsiDocumentManager.getInstance(project).doPostponedOperationsAndUnblockDocument(document)
|
||||
|
||||
if (!FqNameUnsafe(enteredName!!).hasIdentifiersOnly()) {
|
||||
CodeInsightUtils.showErrorHint(project, editor, "$enteredName is not a valid package name", "Change package", null)
|
||||
return
|
||||
}
|
||||
|
||||
KotlinChangePackageRefactoring(file).run(FqName(enteredName!!))
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user