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.editor.Editor
|
||||||
import com.intellij.openapi.util.TextRange
|
import com.intellij.openapi.util.TextRange
|
||||||
import com.intellij.psi.PsiDocumentManager
|
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.quoteSegmentsIfNeeded
|
||||||
|
import org.jetbrains.kotlin.idea.core.util.CodeInsightUtils
|
||||||
import org.jetbrains.kotlin.idea.intentions.SelfTargetingOffsetIndependentIntention
|
import org.jetbrains.kotlin.idea.intentions.SelfTargetingOffsetIndependentIntention
|
||||||
import org.jetbrains.kotlin.idea.refactoring.hasIdentifiersOnly
|
import org.jetbrains.kotlin.idea.refactoring.hasIdentifiersOnly
|
||||||
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
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.name.FqNameUnsafe
|
||||||
import org.jetbrains.kotlin.psi.KtPackageDirective
|
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 {
|
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
|
override fun isApplicableTo(element: KtPackageDirective) = element.packageNameExpression != null
|
||||||
@@ -54,14 +55,14 @@ class ChangePackageIntention: SelfTargetingOffsetIndependentIntention<KtPackageD
|
|||||||
|
|
||||||
val builder = TemplateBuilderImpl(file)
|
val builder = TemplateBuilderImpl(file)
|
||||||
builder.replaceElement(
|
builder.replaceElement(
|
||||||
nameExpression,
|
nameExpression,
|
||||||
PACKAGE_NAME_VAR,
|
PACKAGE_NAME_VAR,
|
||||||
object: Expression() {
|
object : Expression() {
|
||||||
override fun calculateQuickResult(context: ExpressionContext?) = TextResult(currentName)
|
override fun calculateQuickResult(context: ExpressionContext?) = TextResult(currentName)
|
||||||
override fun calculateResult(context: ExpressionContext?) = TextResult(currentName)
|
override fun calculateResult(context: ExpressionContext?) = TextResult(currentName)
|
||||||
override fun calculateLookupItems(context: ExpressionContext?) = arrayOf(LookupElementBuilder.create(currentName))
|
override fun calculateLookupItems(context: ExpressionContext?) = arrayOf(LookupElementBuilder.create(currentName))
|
||||||
},
|
},
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
|
|
||||||
var enteredName: String? = null
|
var enteredName: String? = null
|
||||||
@@ -69,34 +70,38 @@ class ChangePackageIntention: SelfTargetingOffsetIndependentIntention<KtPackageD
|
|||||||
|
|
||||||
editor.caretModel.moveToOffset(0)
|
editor.caretModel.moveToOffset(0)
|
||||||
TemplateManager.getInstance(project).startTemplate(
|
TemplateManager.getInstance(project).startTemplate(
|
||||||
editor,
|
editor,
|
||||||
builder.buildInlineTemplate(),
|
builder.buildInlineTemplate(),
|
||||||
object: TemplateEditingAdapter() {
|
object : TemplateEditingAdapter() {
|
||||||
override fun beforeTemplateFinished(state: TemplateState, template: Template?) {
|
override fun beforeTemplateFinished(state: TemplateState, template: Template?) {
|
||||||
enteredName = state.getVariableValue(PACKAGE_NAME_VAR)!!.text
|
enteredName = state.getVariableValue(PACKAGE_NAME_VAR)!!.text
|
||||||
affectedRange = state.getSegmentRange(0)
|
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!!))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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