Move: Specify conflict containing declaration more precisely
Also do not render class fqname for member declarations #KT-17547 Fixed
This commit is contained in:
@@ -34,7 +34,9 @@ import org.jetbrains.kotlin.idea.refactoring.rename.RenameJavaSyntheticPropertyH
|
||||
import org.jetbrains.kotlin.idea.refactoring.rename.RenameKotlinPropertyProcessor
|
||||
import org.jetbrains.kotlin.idea.util.string.collapseSpaces
|
||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||
|
||||
class KotlinElementDescriptionProvider : ElementDescriptionProvider {
|
||||
@@ -44,7 +46,16 @@ class KotlinElementDescriptionProvider : ElementDescriptionProvider {
|
||||
return parent
|
||||
}
|
||||
|
||||
private fun KtNamedDeclaration.name() = nameAsName ?: Name.special("<no name provided>")
|
||||
|
||||
private fun KtNamedDeclaration.fqName(): FqNameUnsafe {
|
||||
containingClassOrObject?.let {
|
||||
if (it is KtObjectDeclaration && it.isCompanion()) {
|
||||
return it.fqName().child(name())
|
||||
}
|
||||
return FqNameUnsafe("${it.name()}.${name()}")
|
||||
}
|
||||
|
||||
val internalSegments = generateSequence(this) { it.parentForFqName() }
|
||||
.filterIsInstance<KtNamedDeclaration>()
|
||||
.map { it.name ?: "<no name provided>" }
|
||||
|
||||
@@ -142,7 +142,13 @@ fun VirtualFile.toPsiFileOrDirectory(project: Project): PsiFileSystemItem? = if
|
||||
|
||||
fun PsiElement.getUsageContext(): PsiElement {
|
||||
return when (this) {
|
||||
is KtElement -> PsiTreeUtil.getParentOfType(this, KtPropertyAccessor::class.java, KtNamedDeclaration::class.java, KtFile::class.java)!!
|
||||
is KtElement -> PsiTreeUtil.getParentOfType(
|
||||
this,
|
||||
KtPropertyAccessor::class.java,
|
||||
KtProperty::class.java,
|
||||
KtFunction::class.java,
|
||||
KtClassOrObject::class.java
|
||||
) ?: containingFile
|
||||
else -> ConflictsUtil.getContainer(this)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -170,8 +170,7 @@ class MoveConflictChecker(
|
||||
val usageFile = element.containingFile
|
||||
val usageVFile = usageFile.virtualFile ?: continue
|
||||
val usageModule = ModuleUtilCore.findModuleForFile(usageVFile, project) ?: continue
|
||||
val container = if (usageFile is PsiJavaFile) ConflictsUtil.getContainer(element) else usageFile
|
||||
val scopeDescription = RefactoringUIUtil.getDescription(container, true)
|
||||
val scopeDescription = RefactoringUIUtil.getDescription(element.getUsageContext(), true)
|
||||
val referencedElement = (if (usage is MoveRenameUsageInfo) usage.referencedElement else usage.element) ?: error(usage)
|
||||
val message = if (usageModule == targetModule && isInTestSources) {
|
||||
RefactoringBundle.message("0.referenced.in.1.will.not.be.accessible.from.production.of.module.2",
|
||||
|
||||
Reference in New Issue
Block a user