KtCodeFragement to implement getImportDirectives() correctly
This commit is contained in:
@@ -39,7 +39,7 @@ public abstract class KtCodeFragment(
|
||||
): KtFile((PsiManager.getInstance(_project) as PsiManagerEx).getFileManager().createFileViewProvider(LightVirtualFile(name, KotlinFileType.INSTANCE, text), true), false), JavaCodeFragment {
|
||||
|
||||
private var viewProvider = super<KtFile>.getViewProvider() as SingleRootFileViewProvider
|
||||
private var myImports = LinkedHashSet<String>()
|
||||
private var imports = LinkedHashSet<String>()
|
||||
private val additionalContextForLambda: PsiElement? by lazy {
|
||||
this.getCopyableUserData(ADDITIONAL_CONTEXT_FOR_LAMBDA)?.invoke()
|
||||
}
|
||||
@@ -76,7 +76,7 @@ public abstract class KtCodeFragment(
|
||||
override fun clone(): KtCodeFragment {
|
||||
val clone = cloneImpl(calcTreeElement().clone() as FileElement) as KtCodeFragment
|
||||
clone.setOriginalFile(this)
|
||||
clone.myImports = myImports
|
||||
clone.imports = imports
|
||||
clone.viewProvider = SingleRootFileViewProvider(PsiManager.getInstance(_project), LightVirtualFile(getName(), KotlinFileType.INSTANCE, getText()), true)
|
||||
clone.viewProvider.forceCachedPsi(clone)
|
||||
return clone
|
||||
@@ -97,12 +97,12 @@ public abstract class KtCodeFragment(
|
||||
}
|
||||
|
||||
override fun importsToString(): String {
|
||||
return myImports.joinToString(IMPORT_SEPARATOR)
|
||||
return imports.joinToString(IMPORT_SEPARATOR)
|
||||
}
|
||||
|
||||
override fun addImportsFromString(imports: String?) {
|
||||
if (imports == null || imports.isEmpty()) return
|
||||
myImports.addAll(imports.split(IMPORT_SEPARATOR))
|
||||
this.imports.addAll(imports.split(IMPORT_SEPARATOR))
|
||||
|
||||
// we need this code to force re-highlighting, otherwise it does not work by some reason
|
||||
val tempElement = KtPsiFactory(project).createColon()
|
||||
@@ -110,7 +110,11 @@ public abstract class KtCodeFragment(
|
||||
}
|
||||
|
||||
public fun importsAsImportList(): KtImportList? {
|
||||
return KtPsiFactory(this).createFile(myImports.joinToString("\n")).getImportList()
|
||||
return KtPsiFactory(this).createFile(imports.joinToString("\n")).getImportList()
|
||||
}
|
||||
|
||||
override fun getImportDirectives(): List<KtImportDirective> {
|
||||
return importsAsImportList()?.imports ?: emptyList()
|
||||
}
|
||||
|
||||
override fun setVisibilityChecker(checker: JavaCodeFragment.VisibilityChecker?) { }
|
||||
@@ -129,7 +133,7 @@ public abstract class KtCodeFragment(
|
||||
|
||||
private fun initImports(imports: String?) {
|
||||
if (imports != null && !imports.isEmpty()) {
|
||||
myImports.addAll(imports.split(IMPORT_SEPARATOR).map { it.check { it.startsWith("import ") } ?: "import $it" })
|
||||
this.imports.addAll(imports.split(IMPORT_SEPARATOR).map { it.check { it.startsWith("import ") } ?: "import $it" })
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.resolve.lazy
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.impl.SubpackagesScope
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtCodeFragment
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtImportDirective
|
||||
import org.jetbrains.kotlin.psi.KtImportsFactory
|
||||
@@ -64,10 +63,7 @@ public open class FileScopeProviderImpl(
|
||||
val debugName = "LazyFileScope for file " + file.getName()
|
||||
val tempTrace = TemporaryBindingTrace.create(bindingTrace, "Transient trace for default imports lazy resolve")
|
||||
|
||||
val imports = if (file is KtCodeFragment)
|
||||
file.importsAsImportList()?.getImports() ?: listOf()
|
||||
else
|
||||
file.getImportDirectives()
|
||||
val imports = file.importDirectives
|
||||
|
||||
val packageView = moduleDescriptor.getPackage(file.getPackageFqName())
|
||||
val packageFragment = topLevelDescriptorProvider.getPackageFragment(file.getPackageFqName())
|
||||
|
||||
@@ -143,7 +143,7 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
|
||||
val targetFqName = target.importableFqName ?: return ImportDescriptorResult.FAIL
|
||||
if (isAlreadyImported(target, topLevelScope, targetFqName)) return ImportDescriptorResult.ALREADY_IMPORTED
|
||||
|
||||
val imports = getImports(file)
|
||||
val imports = file.importDirectives
|
||||
|
||||
if (imports.any { !it.isAllUnder && it.importPath?.fqnPart() == targetFqName }) {
|
||||
return ImportDescriptorResult.FAIL
|
||||
@@ -186,7 +186,7 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
|
||||
|
||||
val fqName = target.importableFqName ?: return ImportDescriptorResult.FAIL
|
||||
val containerFqName = fqName.parent()
|
||||
val imports = getImports(file)
|
||||
val imports = file.importDirectives
|
||||
|
||||
val starImportPath = ImportPath(containerFqName, true)
|
||||
if (imports.any { it.importPath == starImportPath }) {
|
||||
@@ -426,11 +426,4 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getImports(file: KtFile): List<KtImportDirective> {
|
||||
return if (file is KtCodeFragment)
|
||||
file.importsAsImportList()?.imports ?: listOf()
|
||||
else
|
||||
file.importDirectives
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user