Rename: Support automatic test renaming for facade files

#KT-10578 Fixed
(cherry picked from commit 35050f4)
This commit is contained in:
Alexey Sedunov
2016-06-22 13:54:56 +03:00
parent f9d28bf76d
commit 7a584e876b
8 changed files with 73 additions and 5 deletions
@@ -21,15 +21,17 @@ import com.intellij.psi.PsiElement
import com.intellij.refactoring.rename.naming.AutomaticRenamer
import com.intellij.refactoring.rename.naming.AutomaticTestRenamerFactory
import com.intellij.usageView.UsageInfo
import org.jetbrains.kotlin.asJava.KtLightClass
import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.asJava.*
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtFile
class KotlinAutomaticTestRenamerFactory : AutomaticTestRenamerFactory() {
private fun getPsiClass(element: PsiElement): PsiClass? {
return when (element) {
is KtLightClass -> element
is KtLightClassForExplicitDeclaration -> element
is KtClassOrObject -> element.toLightClass()
is KtFile -> element.findFacadeClass()
else -> null
}
}
@@ -39,7 +41,9 @@ class KotlinAutomaticTestRenamerFactory : AutomaticTestRenamerFactory() {
return super.isApplicable(psiClass)
}
override fun createRenamer(element: PsiElement, newName: String?, usages: MutableCollection<UsageInfo>): AutomaticRenamer {
return super.createRenamer(getPsiClass(element)!!, newName, usages)
override fun createRenamer(element: PsiElement, newName: String, usages: MutableCollection<UsageInfo>): AutomaticRenamer {
val psiClass = getPsiClass(element)!!
val newPsiClassName = if (psiClass is KtLightClassForFacade) PackagePartClassUtils.getFilePartShortName(newName) else newName
return super.createRenamer(psiClass, newPsiClassName, usages)
}
}