Move/copy refactoring: add base support of implicit package prefix

#KT-29720 Fixed
This commit is contained in:
Dmitry Gridin
2019-07-03 12:46:49 +07:00
parent 7c547d8c5a
commit d2b8535548
29 changed files with 98 additions and 40 deletions
@@ -39,8 +39,8 @@ fun PsiFile.getFqNameByDirectory(): FqName {
return qualifiedNameByDirectory?.let(::FqName) ?: FqName.ROOT
}
fun PsiDirectory.getFqNameWithImplicitPrefix(): FqName {
val packageFqName = getPackage()?.qualifiedName?.let(::FqName) ?: FqName.ROOT
fun PsiDirectory.getFqNameWithImplicitPrefix(): FqName? {
val packageFqName = getPackage()?.qualifiedName?.let(::FqName) ?: return null
sourceRoot?.takeIf { !it.hasExplicitPackagePrefix(project) }?.let { sourceRoot ->
val implicitPrefix = PerModulePackageCacheService.getInstance(project).getImplicitPackagePrefix(sourceRoot)
return FqName.fromSegments((implicitPrefix.pathSegments() + packageFqName.pathSegments()).map { it.asString() })
@@ -48,6 +48,8 @@ fun PsiDirectory.getFqNameWithImplicitPrefix(): FqName {
return packageFqName
}
fun PsiDirectory.getFqNameWithImplicitPrefixOrRoot(): FqName = getFqNameWithImplicitPrefix() ?: FqName.ROOT
private fun VirtualFile.hasExplicitPackagePrefix(project: Project): Boolean =
toPsiDirectory(project)?.getPackage()?.qualifiedName?.isNotEmpty() == true