Introduced LexicalScope for file top-level to obtain ownerDescriptor
This commit is contained in:
@@ -18,9 +18,10 @@ package org.jetbrains.kotlin.resolve.lazy
|
||||
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.scopes.ImportingScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||
|
||||
public interface FileScopeProvider {
|
||||
fun getFileResolutionScope(file: KtFile): ImportingScope
|
||||
fun getFileResolutionScope(file: KtFile): LexicalScope
|
||||
fun getImportResolver(file: KtFile): ImportResolver
|
||||
|
||||
public object ThrowException : FileScopeProvider {
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.resolve.lazy
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.impl.SubpackagesScope
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
@@ -29,6 +30,7 @@ import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver
|
||||
import org.jetbrains.kotlin.resolve.TemporaryBindingTrace
|
||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.recordScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.ImportingScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.utils.memberScopeAsImportingScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.utils.withParent
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
@@ -49,11 +51,11 @@ public class FileScopeProviderImpl(
|
||||
ktImportsFactory.createImportDirectives(moduleDescriptor.defaultImports)
|
||||
}
|
||||
|
||||
private data class FileData(val scopeChain: ImportingScope, val importResolver: ImportResolver)
|
||||
private class FileData(val scope: LexicalScope, val importResolver: ImportResolver)
|
||||
|
||||
private val cache = storageManager.createMemoizedFunction { file: KtFile -> createScopeChainAndImportResolver(file) }
|
||||
|
||||
override fun getFileResolutionScope(file: KtFile) = cache(file).scopeChain
|
||||
override fun getFileResolutionScope(file: KtFile) = cache(file).scope
|
||||
|
||||
override fun getImportResolver(file: KtFile) = cache(file).importResolver
|
||||
|
||||
@@ -106,7 +108,15 @@ public class FileScopeProviderImpl(
|
||||
|
||||
scope = LazyImportScope(scope, packageFragment, aliasImportResolver, LazyImportScope.FilteringKind.ALL, "Alias imports in $debugName")
|
||||
|
||||
bindingTrace.recordScope(scope, file)
|
||||
val lexicalScope = object : LexicalScope by LexicalScope.Empty {
|
||||
override val parent: LexicalScope?
|
||||
get() = scope
|
||||
|
||||
override val ownerDescriptor: DeclarationDescriptor
|
||||
get() = packageFragment
|
||||
}
|
||||
|
||||
bindingTrace.recordScope(lexicalScope, file)
|
||||
|
||||
val importResolver = object : ImportResolver {
|
||||
override fun forceResolveAllImports() {
|
||||
@@ -124,6 +134,6 @@ public class FileScopeProviderImpl(
|
||||
}
|
||||
}
|
||||
|
||||
return FileData(scope, importResolver)
|
||||
return FileData(lexicalScope, importResolver)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,8 +42,8 @@ import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyAnnotations;
|
||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyAnnotationsContextImpl;
|
||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyPackageDescriptor;
|
||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor;
|
||||
import org.jetbrains.kotlin.resolve.scopes.ImportingScope;
|
||||
import org.jetbrains.kotlin.resolve.scopes.KtScope;
|
||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope;
|
||||
import org.jetbrains.kotlin.storage.*;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -208,7 +208,7 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
|
||||
}
|
||||
|
||||
private LazyAnnotations createAnnotations(KtFile file, List<KtAnnotationEntry> annotationEntries) {
|
||||
ImportingScope scope = fileScopeProvider.getFileResolutionScope(file);
|
||||
LexicalScope scope = fileScopeProvider.getFileResolutionScope(file);
|
||||
LazyAnnotationsContextImpl lazyAnnotationContext =
|
||||
new LazyAnnotationsContextImpl(annotationResolve, storageManager, trace, scope);
|
||||
return new LazyAnnotations(lazyAnnotationContext, annotationEntries);
|
||||
|
||||
Reference in New Issue
Block a user