diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/KtCodeFragment.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/KtCodeFragment.kt index 893d90c969d..70816755788 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/KtCodeFragment.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/KtCodeFragment.kt @@ -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.getViewProvider() as SingleRootFileViewProvider - private var myImports = LinkedHashSet() + private var imports = LinkedHashSet() 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 { + 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" }) } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeProviderImpl.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeProviderImpl.kt index e8736421727..c8c8895c850 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeProviderImpl.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeProviderImpl.kt @@ -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()) diff --git a/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt b/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt index c1fb2c62d9f..2801b3967da 100644 --- a/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt +++ b/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt @@ -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 { - return if (file is KtCodeFragment) - file.importsAsImportList()?.imports ?: listOf() - else - file.importDirectives - } }