Refactor: Remove ScopeProvider, introduce FileScopeProviderImpl
Rename NoFileScopeProvider -> FileScopeProvider.ThrowException, ScopeProvider.AdditionalScopeProvider -> FileScopeProvider.AdditionalScopes
This commit is contained in:
@@ -56,8 +56,8 @@ import org.jetbrains.kotlin.resolve.*;
|
|||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName;
|
import org.jetbrains.kotlin.resolve.jvm.JvmClassName;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM;
|
import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM;
|
||||||
|
import org.jetbrains.kotlin.resolve.lazy.FileScopeProvider;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider;
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.data.JetClassLikeInfo;
|
import org.jetbrains.kotlin.resolve.lazy.data.JetClassLikeInfo;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.*;
|
import org.jetbrains.kotlin.resolve.lazy.declarations.*;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
||||||
@@ -111,7 +111,7 @@ public class ReplInterpreter {
|
|||||||
|
|
||||||
scriptDeclarationFactory = new ScriptMutableDeclarationProviderFactory();
|
scriptDeclarationFactory = new ScriptMutableDeclarationProviderFactory();
|
||||||
|
|
||||||
ScopeProvider.AdditionalFileScopeProvider scopeProvider = new ScopeProvider.AdditionalFileScopeProvider() {
|
FileScopeProvider.AdditionalScopes scopeProvider = new FileScopeProvider.AdditionalScopes() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public List<JetScope> scopes(@NotNull JetFile file) {
|
public List<JetScope> scopes(@NotNull JetFile file) {
|
||||||
@@ -128,7 +128,7 @@ public class ReplInterpreter {
|
|||||||
);
|
);
|
||||||
|
|
||||||
this.topDownAnalysisContext = new TopDownAnalysisContext(TopDownAnalysisMode.LocalDeclarations, DataFlowInfo.EMPTY,
|
this.topDownAnalysisContext = new TopDownAnalysisContext(TopDownAnalysisMode.LocalDeclarations, DataFlowInfo.EMPTY,
|
||||||
container.getResolveSession().getScopeProvider());
|
container.getResolveSession().getDeclarationScopeProvider());
|
||||||
this.topDownAnalyzer = container.getLazyTopDownAnalyzerForTopLevel();
|
this.topDownAnalyzer = container.getLazyTopDownAnalyzerForTopLevel();
|
||||||
this.resolveSession = container.getResolveSession();
|
this.resolveSession = container.getResolveSession();
|
||||||
|
|
||||||
|
|||||||
@@ -29,13 +29,14 @@ import org.jetbrains.kotlin.resolve.BodyResolveCache
|
|||||||
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel
|
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JavaClassFinderPostConstruct
|
import org.jetbrains.kotlin.resolve.jvm.JavaClassFinderPostConstruct
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
|
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
|
||||||
|
import org.jetbrains.kotlin.resolve.lazy.FileScopeProvider
|
||||||
|
import org.jetbrains.kotlin.resolve.lazy.FileScopeProviderImpl
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
||||||
|
|
||||||
public fun createContainerForReplWithJava(
|
public fun createContainerForReplWithJava(
|
||||||
moduleContext: ModuleContext, bindingTrace: BindingTrace, declarationProviderFactory: DeclarationProviderFactory,
|
moduleContext: ModuleContext, bindingTrace: BindingTrace, declarationProviderFactory: DeclarationProviderFactory,
|
||||||
moduleContentScope: GlobalSearchScope, additionalFileScopeProvider: ScopeProvider.AdditionalFileScopeProvider
|
moduleContentScope: GlobalSearchScope, additionalFileScopeProvider: FileScopeProvider.AdditionalScopes
|
||||||
): ContainerForReplWithJava = createContainer("ReplWithJava") {
|
): ContainerForReplWithJava = createContainer("ReplWithJava") {
|
||||||
configureModule(moduleContext, KotlinJvmCheckerProvider, bindingTrace)
|
configureModule(moduleContext, KotlinJvmCheckerProvider, bindingTrace)
|
||||||
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project)
|
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project)
|
||||||
@@ -44,7 +45,7 @@ public fun createContainerForReplWithJava(
|
|||||||
useInstance(declarationProviderFactory)
|
useInstance(declarationProviderFactory)
|
||||||
useInstance(BodyResolveCache.ThrowException)
|
useInstance(BodyResolveCache.ThrowException)
|
||||||
|
|
||||||
useImpl<ScopeProvider>()
|
useImpl<FileScopeProviderImpl>()
|
||||||
useImpl<SingleModuleClassResolver>()
|
useImpl<SingleModuleClassResolver>()
|
||||||
}.let {
|
}.let {
|
||||||
it.get<JavaClassFinderImpl>().initialize()
|
it.get<JavaClassFinderImpl>().initialize()
|
||||||
|
|||||||
@@ -39,8 +39,8 @@ import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel
|
|||||||
import org.jetbrains.kotlin.resolve.jvm.JavaClassFinderPostConstruct
|
import org.jetbrains.kotlin.resolve.jvm.JavaClassFinderPostConstruct
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
|
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JavaLazyAnalyzerPostConstruct
|
import org.jetbrains.kotlin.resolve.jvm.JavaLazyAnalyzerPostConstruct
|
||||||
|
import org.jetbrains.kotlin.resolve.lazy.FileScopeProviderImpl
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
||||||
|
|
||||||
public fun StorageComponentContainer.configureJavaTopDownAnalysis(moduleContentScope: GlobalSearchScope, project: Project) {
|
public fun StorageComponentContainer.configureJavaTopDownAnalysis(moduleContentScope: GlobalSearchScope, project: Project) {
|
||||||
@@ -78,7 +78,7 @@ public fun createContainerForLazyResolveWithJava(
|
|||||||
|
|
||||||
useInstance(declarationProviderFactory)
|
useInstance(declarationProviderFactory)
|
||||||
useInstance(BodyResolveCache.ThrowException)
|
useInstance(BodyResolveCache.ThrowException)
|
||||||
useImpl<ScopeProvider>()
|
useImpl<FileScopeProviderImpl>()
|
||||||
useImpl<LazyResolveToken>()
|
useImpl<LazyResolveToken>()
|
||||||
}.let {
|
}.let {
|
||||||
it.javaAnalysisInit()
|
it.javaAnalysisInit()
|
||||||
@@ -98,7 +98,7 @@ public fun createContainerForTopDownAnalyzerForJvm(
|
|||||||
useInstance(BodyResolveCache.ThrowException)
|
useInstance(BodyResolveCache.ThrowException)
|
||||||
|
|
||||||
useImpl<SingleModuleClassResolver>()
|
useImpl<SingleModuleClassResolver>()
|
||||||
useImpl<ScopeProvider>()
|
useImpl<FileScopeProviderImpl>()
|
||||||
}.let {
|
}.let {
|
||||||
it.javaAnalysisInit()
|
it.javaAnalysisInit()
|
||||||
|
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ import org.jetbrains.kotlin.context.ModuleContext
|
|||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.resolve.*
|
import org.jetbrains.kotlin.resolve.*
|
||||||
import org.jetbrains.kotlin.resolve.calls.CallResolver
|
import org.jetbrains.kotlin.resolve.calls.CallResolver
|
||||||
|
import org.jetbrains.kotlin.resolve.lazy.FileScopeProvider
|
||||||
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer
|
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer
|
||||||
import org.jetbrains.kotlin.resolve.lazy.NoFileScopeProvider
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.NoTopLevelDescriptorProvider
|
import org.jetbrains.kotlin.resolve.lazy.NoTopLevelDescriptorProvider
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
||||||
@@ -73,7 +73,7 @@ public fun createContainerForLazyBodyResolve(
|
|||||||
configureModule(moduleContext, additionalCheckerProvider, bindingTrace)
|
configureModule(moduleContext, additionalCheckerProvider, bindingTrace)
|
||||||
|
|
||||||
useInstance(kotlinCodeAnalyzer)
|
useInstance(kotlinCodeAnalyzer)
|
||||||
useInstance(kotlinCodeAnalyzer.getScopeProvider())
|
useInstance(kotlinCodeAnalyzer.getFileScopeProvider())
|
||||||
useInstance(dynamicTypesSettings)
|
useInstance(dynamicTypesSettings)
|
||||||
useInstance(bodyResolveCache)
|
useInstance(bodyResolveCache)
|
||||||
useImpl<LazyTopDownAnalyzerForTopLevel>()
|
useImpl<LazyTopDownAnalyzerForTopLevel>()
|
||||||
@@ -94,8 +94,8 @@ public fun createContainerForLazyLocalClassifierAnalyzer(
|
|||||||
useImpl<LazyTopDownAnalyzer>()
|
useImpl<LazyTopDownAnalyzer>()
|
||||||
|
|
||||||
useInstance(NoTopLevelDescriptorProvider)
|
useInstance(NoTopLevelDescriptorProvider)
|
||||||
useInstance(NoFileScopeProvider)
|
|
||||||
useInstance(BodyResolveCache.ThrowException)
|
useInstance(BodyResolveCache.ThrowException)
|
||||||
|
useInstance(FileScopeProvider.ThrowException)
|
||||||
|
|
||||||
useImpl<DeclarationScopeProviderForLocalClassifierAnalyzer>()
|
useImpl<DeclarationScopeProviderForLocalClassifierAnalyzer>()
|
||||||
useImpl<LocalLazyDeclarationResolver>()
|
useImpl<LocalLazyDeclarationResolver>()
|
||||||
|
|||||||
+1
-1
@@ -92,7 +92,7 @@ public class LazyTopDownAnalyzerForTopLevel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void resolveAndCheckImports(@NotNull JetFile file, @NotNull KotlinCodeAnalyzer resolveSession) {
|
private static void resolveAndCheckImports(@NotNull JetFile file, @NotNull KotlinCodeAnalyzer resolveSession) {
|
||||||
LazyFileScope fileScope = resolveSession.getScopeProvider().getFileScope(file);
|
LazyFileScope fileScope = resolveSession.getFileScopeProvider().getFileScope(file);
|
||||||
fileScope.forceResolveAllImports();
|
fileScope.forceResolveAllImports();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-9
@@ -24,21 +24,18 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor;
|
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
public class DeclarationScopeProviderImpl implements DeclarationScopeProvider {
|
public class DeclarationScopeProviderImpl implements DeclarationScopeProvider {
|
||||||
|
|
||||||
private final LazyDeclarationResolver lazyDeclarationResolver;
|
private final LazyDeclarationResolver lazyDeclarationResolver;
|
||||||
|
|
||||||
private FileScopeProvider fileScopeProvider;
|
private final FileScopeProvider fileScopeProvider;
|
||||||
|
|
||||||
@Inject
|
public DeclarationScopeProviderImpl(
|
||||||
public void setFileScopeProvider(@NotNull FileScopeProvider fileScopeProvider) {
|
@NotNull LazyDeclarationResolver lazyDeclarationResolver,
|
||||||
this.fileScopeProvider = fileScopeProvider;
|
@NotNull FileScopeProvider fileScopeProvider
|
||||||
}
|
) {
|
||||||
|
|
||||||
public DeclarationScopeProviderImpl(@NotNull LazyDeclarationResolver lazyDeclarationResolver) {
|
|
||||||
this.lazyDeclarationResolver = lazyDeclarationResolver;
|
this.lazyDeclarationResolver = lazyDeclarationResolver;
|
||||||
|
this.fileScopeProvider = fileScopeProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -19,12 +19,19 @@ package org.jetbrains.kotlin.resolve.lazy
|
|||||||
import org.jetbrains.kotlin.psi.JetFile
|
import org.jetbrains.kotlin.psi.JetFile
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||||
|
|
||||||
public trait FileScopeProvider {
|
public interface FileScopeProvider {
|
||||||
fun getFileScope(jetFile: JetFile): JetScope
|
fun getFileScope(file: JetFile): LazyFileScope
|
||||||
|
|
||||||
|
public object ThrowException : FileScopeProvider {
|
||||||
|
override fun getFileScope(file: JetFile): LazyFileScope {
|
||||||
|
throw UnsupportedOperationException("Should not be called")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public open class AdditionalScopes {
|
||||||
|
public open fun scopes(file: JetFile): List<JetScope> {
|
||||||
|
return emptyList()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public object NoFileScopeProvider : FileScopeProvider {
|
|
||||||
override fun getFileScope(jetFile: JetFile): JetScope {
|
|
||||||
throw UnsupportedOperationException("Should not be called")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2015 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.resolve.lazy
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.psi.JetFile
|
||||||
|
import org.jetbrains.kotlin.resolve.TemporaryBindingTrace
|
||||||
|
import org.jetbrains.kotlin.storage.get
|
||||||
|
|
||||||
|
public class FileScopeProviderImpl(
|
||||||
|
private val resolveSession: ResolveSession,
|
||||||
|
private val additionalScopes: FileScopeProvider.AdditionalScopes
|
||||||
|
) : FileScopeProvider {
|
||||||
|
|
||||||
|
private val defaultImports by resolveSession.getStorageManager().createLazyValue {
|
||||||
|
val defaultImports = resolveSession.getModuleDescriptor().defaultImports
|
||||||
|
resolveSession.getJetImportsFactory().createImportDirectives(defaultImports)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val fileScopes = resolveSession.getStorageManager().createMemoizedFunction { file: JetFile -> createFileScope(file) }
|
||||||
|
|
||||||
|
override fun getFileScope(file: JetFile) = fileScopes(file)
|
||||||
|
|
||||||
|
private fun createFileScope(file: JetFile): LazyFileScope {
|
||||||
|
val tempTrace = TemporaryBindingTrace.create(resolveSession.getTrace(), "Transient trace for default imports lazy resolve")
|
||||||
|
return LazyFileScope.create(
|
||||||
|
resolveSession, file, defaultImports, additionalScopes.scopes(file),
|
||||||
|
resolveSession.getTrace(), tempTrace, "LazyFileScope for file " + file.getName()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,18 +17,14 @@
|
|||||||
package org.jetbrains.kotlin.resolve.lazy;
|
package org.jetbrains.kotlin.resolve.lazy;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.ReadOnly;
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider;
|
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
|
||||||
import org.jetbrains.kotlin.psi.JetClassOrObject;
|
import org.jetbrains.kotlin.psi.JetClassOrObject;
|
||||||
import org.jetbrains.kotlin.psi.JetDeclaration;
|
import org.jetbrains.kotlin.psi.JetDeclaration;
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
public interface KotlinCodeAnalyzer extends TopLevelDescriptorProvider {
|
public interface KotlinCodeAnalyzer extends TopLevelDescriptorProvider {
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -44,7 +40,10 @@ public interface KotlinCodeAnalyzer extends TopLevelDescriptorProvider {
|
|||||||
DeclarationDescriptor resolveToDescriptor(@NotNull JetDeclaration declaration);
|
DeclarationDescriptor resolveToDescriptor(@NotNull JetDeclaration declaration);
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
ScopeProvider getScopeProvider();
|
DeclarationScopeProvider getDeclarationScopeProvider();
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
FileScopeProvider getFileScopeProvider();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Forces all descriptors to be resolved.
|
* Forces all descriptors to be resolved.
|
||||||
|
|||||||
@@ -16,13 +16,13 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.resolve.lazy
|
package org.jetbrains.kotlin.resolve.lazy
|
||||||
|
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.resolve.*
|
import org.jetbrains.kotlin.resolve.*
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
||||||
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
|
||||||
public trait LazyClassContext {
|
public trait LazyClassContext {
|
||||||
val scopeProvider: DeclarationScopeProvider
|
val declarationScopeProvider: DeclarationScopeProvider
|
||||||
|
|
||||||
val storageManager: StorageManager
|
val storageManager: StorageManager
|
||||||
val trace: BindingTrace
|
val trace: BindingTrace
|
||||||
|
|||||||
@@ -29,9 +29,8 @@ import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver.LookupMode
|
|||||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||||
import org.jetbrains.kotlin.utils.Printer
|
|
||||||
import org.jetbrains.kotlin.util.collectionUtils.concat
|
import org.jetbrains.kotlin.util.collectionUtils.concat
|
||||||
import java.util.HashSet
|
import org.jetbrains.kotlin.utils.Printer
|
||||||
import java.util.LinkedHashSet
|
import java.util.LinkedHashSet
|
||||||
import kotlin.properties.Delegates
|
import kotlin.properties.Delegates
|
||||||
|
|
||||||
@@ -127,7 +126,7 @@ class LazyImportResolver(
|
|||||||
|
|
||||||
val status = importedScopesProvider(importDirective).importResolveStatus
|
val status = importedScopesProvider(importDirective).importResolveStatus
|
||||||
if (status != null && !status.descriptors.isEmpty()) {
|
if (status != null && !status.descriptors.isEmpty()) {
|
||||||
val fileScope = resolveSession.getScopeProvider().getFileScope(importDirective.getContainingJetFile())
|
val fileScope = resolveSession.getFileScopeProvider().getFileScope(importDirective.getContainingJetFile())
|
||||||
reportConflictingImport(importDirective, fileScope, status.descriptors, traceForImportResolve)
|
reportConflictingImport(importDirective, fileScope, status.descriptors, traceForImportResolve)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,8 +64,6 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
|
|||||||
private final MemoizedFunctionToNotNull<JetFile, LazyAnnotations> fileAnnotations;
|
private final MemoizedFunctionToNotNull<JetFile, LazyAnnotations> fileAnnotations;
|
||||||
private final MemoizedFunctionToNotNull<JetFile, LazyAnnotations> danglingAnnotations;
|
private final MemoizedFunctionToNotNull<JetFile, LazyAnnotations> danglingAnnotations;
|
||||||
|
|
||||||
private ScopeProvider scopeProvider;
|
|
||||||
|
|
||||||
private JetImportsFactory jetImportFactory;
|
private JetImportsFactory jetImportFactory;
|
||||||
private AnnotationResolver annotationResolve;
|
private AnnotationResolver annotationResolve;
|
||||||
private DescriptorResolver descriptorResolver;
|
private DescriptorResolver descriptorResolver;
|
||||||
@@ -74,6 +72,8 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
|
|||||||
private QualifiedExpressionResolver qualifiedExpressionResolver;
|
private QualifiedExpressionResolver qualifiedExpressionResolver;
|
||||||
private ScriptBodyResolver scriptBodyResolver;
|
private ScriptBodyResolver scriptBodyResolver;
|
||||||
private LazyDeclarationResolver lazyDeclarationResolver;
|
private LazyDeclarationResolver lazyDeclarationResolver;
|
||||||
|
private FileScopeProvider fileScopeProvider;
|
||||||
|
private DeclarationScopeProvider declarationScopeProvider;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public void setJetImportFactory(JetImportsFactory jetImportFactory) {
|
public void setJetImportFactory(JetImportsFactory jetImportFactory) {
|
||||||
@@ -105,11 +105,6 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
|
|||||||
this.qualifiedExpressionResolver = qualifiedExpressionResolver;
|
this.qualifiedExpressionResolver = qualifiedExpressionResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject
|
|
||||||
public void setScopeProvider(ScopeProvider scopeProvider) {
|
|
||||||
this.scopeProvider = scopeProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public void setScriptBodyResolver(ScriptBodyResolver scriptBodyResolver) {
|
public void setScriptBodyResolver(ScriptBodyResolver scriptBodyResolver) {
|
||||||
this.scriptBodyResolver = scriptBodyResolver;
|
this.scriptBodyResolver = scriptBodyResolver;
|
||||||
@@ -120,6 +115,16 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
|
|||||||
this.lazyDeclarationResolver = lazyDeclarationResolver;
|
this.lazyDeclarationResolver = lazyDeclarationResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public void setFileScopeProvider(@NotNull FileScopeProviderImpl fileScopeProvider) {
|
||||||
|
this.fileScopeProvider = fileScopeProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public void setDeclarationScopeProvider(@NotNull DeclarationScopeProviderImpl declarationScopeProvider) {
|
||||||
|
this.declarationScopeProvider = declarationScopeProvider;
|
||||||
|
}
|
||||||
|
|
||||||
// Only calls from injectors expected
|
// Only calls from injectors expected
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public ResolveSession(
|
public ResolveSession(
|
||||||
@@ -197,7 +202,7 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private LazyAnnotations createAnnotations(JetFile file, List<JetAnnotationEntry> annotationEntries) {
|
private LazyAnnotations createAnnotations(JetFile file, List<JetAnnotationEntry> annotationEntries) {
|
||||||
JetScope scope = getScopeProvider().getFileScope(file);
|
JetScope scope = fileScopeProvider.getFileScope(file);
|
||||||
LazyAnnotationsContextImpl lazyAnnotationContext = new LazyAnnotationsContextImpl(annotationResolve, storageManager, trace, scope);
|
LazyAnnotationsContextImpl lazyAnnotationContext = new LazyAnnotationsContextImpl(annotationResolve, storageManager, trace, scope);
|
||||||
return new LazyAnnotations(lazyAnnotationContext, annotationEntries);
|
return new LazyAnnotations(lazyAnnotationContext, annotationEntries);
|
||||||
}
|
}
|
||||||
@@ -349,12 +354,6 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public ScopeProvider getScopeProvider() {
|
|
||||||
return scopeProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public JetImportsFactory getJetImportsFactory() {
|
public JetImportsFactory getJetImportsFactory() {
|
||||||
return jetImportFactory;
|
return jetImportFactory;
|
||||||
@@ -388,4 +387,16 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
|
|||||||
public FunctionDescriptorResolver getFunctionDescriptorResolver() {
|
public FunctionDescriptorResolver getFunctionDescriptorResolver() {
|
||||||
return functionDescriptorResolver;
|
return functionDescriptorResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public DeclarationScopeProvider getDeclarationScopeProvider() {
|
||||||
|
return declarationScopeProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@NotNull
|
||||||
|
public FileScopeProvider getFileScopeProvider() {
|
||||||
|
return fileScopeProvider;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,119 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2015 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.resolve.lazy;
|
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import kotlin.jvm.functions.Function0;
|
|
||||||
import kotlin.jvm.functions.Function1;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor;
|
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
|
||||||
import org.jetbrains.kotlin.psi.JetFile;
|
|
||||||
import org.jetbrains.kotlin.psi.JetImportDirective;
|
|
||||||
import org.jetbrains.kotlin.psi.JetImportsFactory;
|
|
||||||
import org.jetbrains.kotlin.resolve.ImportPath;
|
|
||||||
import org.jetbrains.kotlin.resolve.TemporaryBindingTrace;
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
|
||||||
import org.jetbrains.kotlin.storage.MemoizedFunctionToNotNull;
|
|
||||||
import org.jetbrains.kotlin.storage.NotNullLazyValue;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class ScopeProvider implements DeclarationScopeProvider, FileScopeProvider {
|
|
||||||
|
|
||||||
public static class AdditionalFileScopeProvider {
|
|
||||||
@NotNull
|
|
||||||
public List<JetScope> scopes(@NotNull JetFile file) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private final ResolveSession resolveSession;
|
|
||||||
|
|
||||||
private final NotNullLazyValue<Collection<JetImportDirective>> defaultImports;
|
|
||||||
|
|
||||||
private final MemoizedFunctionToNotNull<JetFile, LazyFileScope> fileScopes;
|
|
||||||
|
|
||||||
private AdditionalFileScopeProvider additionalFileScopeProvider;
|
|
||||||
private DeclarationScopeProvider declarationScopeProvider;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public void setAdditionalFileScopesProvider(@NotNull AdditionalFileScopeProvider additionalFileScopeProvider) {
|
|
||||||
this.additionalFileScopeProvider = additionalFileScopeProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public void setDeclarationScopeProvider(@NotNull DeclarationScopeProviderImpl declarationScopeProvider) {
|
|
||||||
this.declarationScopeProvider = declarationScopeProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ScopeProvider(@NotNull final ResolveSession resolveSession) {
|
|
||||||
this.resolveSession = resolveSession;
|
|
||||||
|
|
||||||
this.defaultImports = resolveSession.getStorageManager().createLazyValue(new Function0<Collection<JetImportDirective>>() {
|
|
||||||
@Override
|
|
||||||
public Collection<JetImportDirective> invoke() {
|
|
||||||
JetImportsFactory importsFactory = resolveSession.getJetImportsFactory();
|
|
||||||
List<ImportPath> defaultImports = resolveSession.getModuleDescriptor().getDefaultImports();
|
|
||||||
|
|
||||||
return importsFactory.createImportDirectives(defaultImports);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
this.fileScopes = resolveSession.getStorageManager().createMemoizedFunction(new Function1<JetFile, LazyFileScope>() {
|
|
||||||
@Override
|
|
||||||
public LazyFileScope invoke(JetFile file) {
|
|
||||||
return createFileScope(file);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public LazyFileScope getFileScope(@NotNull JetFile file) {
|
|
||||||
return fileScopes.invoke(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
private LazyFileScope createFileScope(@NotNull JetFile file) {
|
|
||||||
TemporaryBindingTrace tempTrace = TemporaryBindingTrace.create(resolveSession.getTrace(), "Transient trace for default imports lazy resolve");
|
|
||||||
return LazyFileScope.Factory.create(
|
|
||||||
resolveSession,
|
|
||||||
file,
|
|
||||||
defaultImports.invoke(),
|
|
||||||
additionalFileScopeProvider.scopes(file),
|
|
||||||
resolveSession.getTrace(),
|
|
||||||
tempTrace,
|
|
||||||
"LazyFileScope for file " + file.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public JetScope getResolutionScopeForDeclaration(@NotNull PsiElement elementOfDeclaration) {
|
|
||||||
return declarationScopeProvider.getResolutionScopeForDeclaration(elementOfDeclaration);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public DataFlowInfo getOuterDataFlowInfoForDeclaration(@NotNull PsiElement elementOfDeclaration) {
|
|
||||||
return declarationScopeProvider.getOuterDataFlowInfoForDeclaration(elementOfDeclaration);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+8
-10
@@ -18,23 +18,21 @@ package org.jetbrains.kotlin.resolve.lazy.descriptors
|
|||||||
|
|
||||||
import com.google.common.collect.Sets
|
import com.google.common.collect.Sets
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.resolve.AnnotationResolver
|
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||||
import org.jetbrains.kotlin.resolve.ScriptNameUtil
|
import org.jetbrains.kotlin.resolve.ScriptNameUtil
|
||||||
|
import org.jetbrains.kotlin.resolve.lazy.LazyClassContext
|
||||||
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
||||||
import org.jetbrains.kotlin.resolve.lazy.data.JetScriptInfo
|
import org.jetbrains.kotlin.resolve.lazy.data.JetScriptInfo
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProvider
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProvider
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||||
import org.jetbrains.kotlin.storage.MemoizedFunctionToNotNull
|
import org.jetbrains.kotlin.storage.MemoizedFunctionToNotNull
|
||||||
import org.jetbrains.kotlin.utils.Printer
|
|
||||||
|
|
||||||
import java.util.*
|
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
import org.jetbrains.kotlin.utils.Printer
|
||||||
import org.jetbrains.kotlin.utils.toReadOnlyList
|
import org.jetbrains.kotlin.utils.toReadOnlyList
|
||||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
import java.util.LinkedHashSet
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.LazyClassContext
|
|
||||||
|
|
||||||
public abstract class AbstractLazyMemberScope<D : DeclarationDescriptor, DP : DeclarationProvider>
|
public abstract class AbstractLazyMemberScope<D : DeclarationDescriptor, DP : DeclarationProvider>
|
||||||
protected constructor(
|
protected constructor(
|
||||||
@@ -76,7 +74,7 @@ protected constructor(
|
|||||||
resolutionScope,
|
resolutionScope,
|
||||||
functionDeclaration,
|
functionDeclaration,
|
||||||
trace,
|
trace,
|
||||||
c.scopeProvider.getOuterDataFlowInfoForDeclaration(functionDeclaration)))
|
c.declarationScopeProvider.getOuterDataFlowInfoForDeclaration(functionDeclaration)))
|
||||||
}
|
}
|
||||||
|
|
||||||
getNonDeclaredFunctions(name, result)
|
getNonDeclaredFunctions(name, result)
|
||||||
@@ -101,7 +99,7 @@ protected constructor(
|
|||||||
resolutionScope,
|
resolutionScope,
|
||||||
propertyDeclaration,
|
propertyDeclaration,
|
||||||
trace,
|
trace,
|
||||||
c.scopeProvider.getOuterDataFlowInfoForDeclaration(propertyDeclaration))
|
c.declarationScopeProvider.getOuterDataFlowInfoForDeclaration(propertyDeclaration))
|
||||||
result.add(propertyDescriptor)
|
result.add(propertyDescriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -254,7 +254,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
protected JetScope getOuterScope() {
|
protected JetScope getOuterScope() {
|
||||||
return c.getScopeProvider().getResolutionScopeForDeclaration(declarationProvider.getOwnerInfo().getScopeAnchor());
|
return c.getDeclarationScopeProvider().getResolutionScopeForDeclaration(declarationProvider.getOwnerInfo().getScopeAnchor());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+2
-2
@@ -17,10 +17,10 @@
|
|||||||
package org.jetbrains.kotlin.resolve.lazy.descriptors
|
package org.jetbrains.kotlin.resolve.lazy.descriptors
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.JetDeclaration
|
import org.jetbrains.kotlin.psi.JetDeclaration
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.PackageMemberDeclarationProvider
|
import org.jetbrains.kotlin.resolve.lazy.declarations.PackageMemberDeclarationProvider
|
||||||
import org.jetbrains.kotlin.name.Name
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||||
|
|
||||||
public class LazyPackageMemberScope(
|
public class LazyPackageMemberScope(
|
||||||
@@ -36,7 +36,7 @@ public class LazyPackageMemberScope(
|
|||||||
override fun getPackage(name: Name): PackageViewDescriptor? = null
|
override fun getPackage(name: Name): PackageViewDescriptor? = null
|
||||||
|
|
||||||
override fun getScopeForMemberDeclarationResolution(declaration: JetDeclaration)
|
override fun getScopeForMemberDeclarationResolution(declaration: JetDeclaration)
|
||||||
= resolveSession.getScopeProvider().getFileScope(declaration.getContainingJetFile())
|
= resolveSession.getFileScopeProvider().getFileScope(declaration.getContainingJetFile())
|
||||||
|
|
||||||
override fun getNonDeclaredFunctions(name: Name, result: MutableSet<FunctionDescriptor>) {
|
override fun getNonDeclaredFunctions(name: Name, result: MutableSet<FunctionDescriptor>) {
|
||||||
// No extra functions
|
// No extra functions
|
||||||
|
|||||||
+1
-1
@@ -90,7 +90,7 @@ public class LazyScriptDescriptor(
|
|||||||
return ChainedScope(
|
return ChainedScope(
|
||||||
this,
|
this,
|
||||||
"Scope for body resolution for " + this,
|
"Scope for body resolution for " + this,
|
||||||
resolveSession.getScopeProvider().getFileScope(jetScript.getContainingJetFile()),
|
resolveSession.getFileScopeProvider().getFileScope(jetScript.getContainingJetFile()),
|
||||||
parametersScope
|
parametersScope
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-7
@@ -18,23 +18,20 @@ package org.jetbrains.kotlin.types.expressions
|
|||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
|
import org.jetbrains.kotlin.container.get
|
||||||
import org.jetbrains.kotlin.context.GlobalContext
|
import org.jetbrains.kotlin.context.GlobalContext
|
||||||
import org.jetbrains.kotlin.context.withModule
|
import org.jetbrains.kotlin.context.withModule
|
||||||
import org.jetbrains.kotlin.context.withProject
|
import org.jetbrains.kotlin.context.withProject
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.container.get
|
|
||||||
import org.jetbrains.kotlin.frontend.di.createContainerForLazyLocalClassifierAnalyzer
|
import org.jetbrains.kotlin.frontend.di.createContainerForLazyLocalClassifierAnalyzer
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.JetClassOrObject
|
import org.jetbrains.kotlin.psi.JetClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.debugText.getDebugText
|
import org.jetbrains.kotlin.psi.debugText.getDebugText
|
||||||
import org.jetbrains.kotlin.resolve.*
|
import org.jetbrains.kotlin.resolve.*
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
||||||
import org.jetbrains.kotlin.resolve.lazy.DeclarationScopeProvider
|
import org.jetbrains.kotlin.resolve.lazy.*
|
||||||
import org.jetbrains.kotlin.resolve.lazy.DeclarationScopeProviderImpl
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.LazyClassContext
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.LazyDeclarationResolver
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.data.JetClassInfoUtil
|
import org.jetbrains.kotlin.resolve.lazy.data.JetClassInfoUtil
|
||||||
import org.jetbrains.kotlin.resolve.lazy.data.JetClassLikeInfo
|
import org.jetbrains.kotlin.resolve.lazy.data.JetClassLikeInfo
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.ClassMemberDeclarationProvider
|
import org.jetbrains.kotlin.resolve.lazy.declarations.ClassMemberDeclarationProvider
|
||||||
@@ -114,7 +111,7 @@ class LocalClassDescriptorHolder(
|
|||||||
if (classDescriptor == null) {
|
if (classDescriptor == null) {
|
||||||
classDescriptor = LazyClassDescriptor(
|
classDescriptor = LazyClassDescriptor(
|
||||||
object : LazyClassContext {
|
object : LazyClassContext {
|
||||||
override val scopeProvider = declarationScopeProvider
|
override val declarationScopeProvider = declarationScopeProvider
|
||||||
override val storageManager = this@LocalClassDescriptorHolder.storageManager
|
override val storageManager = this@LocalClassDescriptorHolder.storageManager
|
||||||
override val trace = expressionTypingContext.trace
|
override val trace = expressionTypingContext.trace
|
||||||
override val moduleDescriptor = this@LocalClassDescriptorHolder.moduleDescriptor
|
override val moduleDescriptor = this@LocalClassDescriptorHolder.moduleDescriptor
|
||||||
@@ -167,8 +164,9 @@ class LocalLazyDeclarationResolver(
|
|||||||
|
|
||||||
class DeclarationScopeProviderForLocalClassifierAnalyzer(
|
class DeclarationScopeProviderForLocalClassifierAnalyzer(
|
||||||
lazyDeclarationResolver: LazyDeclarationResolver,
|
lazyDeclarationResolver: LazyDeclarationResolver,
|
||||||
|
fileScopeProvider: FileScopeProvider,
|
||||||
val localClassDescriptorManager: LocalClassDescriptorHolder
|
val localClassDescriptorManager: LocalClassDescriptorHolder
|
||||||
) : DeclarationScopeProviderImpl(lazyDeclarationResolver) {
|
) : DeclarationScopeProviderImpl(lazyDeclarationResolver, fileScopeProvider) {
|
||||||
override fun getResolutionScopeForDeclaration(elementOfDeclaration: PsiElement): JetScope {
|
override fun getResolutionScopeForDeclaration(elementOfDeclaration: PsiElement): JetScope {
|
||||||
if (localClassDescriptorManager.isMyClass(elementOfDeclaration)) {
|
if (localClassDescriptorManager.isMyClass(elementOfDeclaration)) {
|
||||||
return localClassDescriptorManager.getResolutionScopeForClass(elementOfDeclaration as JetClassOrObject)
|
return localClassDescriptorManager.getResolutionScopeForClass(elementOfDeclaration as JetClassOrObject)
|
||||||
|
|||||||
@@ -16,17 +16,15 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.resolve.lazy
|
package org.jetbrains.kotlin.resolve.lazy
|
||||||
|
|
||||||
import com.google.common.base.Function
|
|
||||||
import com.google.common.base.Functions
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.analyzer.computeTypeInContext
|
import org.jetbrains.kotlin.analyzer.computeTypeInContext
|
||||||
import org.jetbrains.kotlin.cfg.JetFlowInformationProvider
|
import org.jetbrains.kotlin.cfg.JetFlowInformationProvider
|
||||||
|
import org.jetbrains.kotlin.container.get
|
||||||
import org.jetbrains.kotlin.context.SimpleGlobalContext
|
import org.jetbrains.kotlin.context.SimpleGlobalContext
|
||||||
import org.jetbrains.kotlin.context.withModule
|
import org.jetbrains.kotlin.context.withModule
|
||||||
import org.jetbrains.kotlin.context.withProject
|
import org.jetbrains.kotlin.context.withProject
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.container.get
|
|
||||||
import org.jetbrains.kotlin.frontend.di.createContainerForBodyResolve
|
import org.jetbrains.kotlin.frontend.di.createContainerForBodyResolve
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -40,8 +38,6 @@ import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyPackageDescriptor
|
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyPackageDescriptor
|
||||||
import org.jetbrains.kotlin.resolve.scopes.ChainedScope
|
import org.jetbrains.kotlin.resolve.scopes.ChainedScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||||
import org.jetbrains.kotlin.storage.LockBasedLazyResolveStorageManager
|
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
|
||||||
import org.jetbrains.kotlin.types.DynamicTypesSettings
|
import org.jetbrains.kotlin.types.DynamicTypesSettings
|
||||||
import org.jetbrains.kotlin.types.TypeUtils
|
import org.jetbrains.kotlin.types.TypeUtils
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||||
@@ -138,7 +134,7 @@ public abstract class ElementResolver protected constructor(
|
|||||||
is JetInitializerList -> delegationSpecifierAdditionalResolve(resolveSession, resolveElement, resolveElement.getParent() as JetEnumEntry, file)
|
is JetInitializerList -> delegationSpecifierAdditionalResolve(resolveSession, resolveElement, resolveElement.getParent() as JetEnumEntry, file)
|
||||||
|
|
||||||
is JetImportDirective -> {
|
is JetImportDirective -> {
|
||||||
val scope = resolveSession.getScopeProvider().getFileScope(resolveElement.getContainingJetFile())
|
val scope = resolveSession.getFileScopeProvider().getFileScope(resolveElement.getContainingJetFile())
|
||||||
scope.forceResolveAllImports()
|
scope.forceResolveAllImports()
|
||||||
resolveSession.getTrace()
|
resolveSession.getTrace()
|
||||||
}
|
}
|
||||||
@@ -237,7 +233,7 @@ public abstract class ElementResolver protected constructor(
|
|||||||
|
|
||||||
if (scopeForContextElement == null) return trace
|
if (scopeForContextElement == null) return trace
|
||||||
|
|
||||||
val codeFragmentScope = resolveSession.getScopeProvider().getFileScope(codeFragment)
|
val codeFragmentScope = resolveSession.getFileScopeProvider().getFileScope(codeFragment)
|
||||||
val chainedScope = ChainedScope(scopeForContextElement.getContainingDeclaration(),
|
val chainedScope = ChainedScope(scopeForContextElement.getContainingDeclaration(),
|
||||||
"Scope for resolve code fragment", scopeForContextElement, codeFragmentScope)
|
"Scope for resolve code fragment", scopeForContextElement, codeFragmentScope)
|
||||||
|
|
||||||
@@ -323,7 +319,7 @@ public abstract class ElementResolver protected constructor(
|
|||||||
|
|
||||||
private fun propertyAdditionalResolve(resolveSession: ResolveSession, jetProperty: JetProperty, file: JetFile, statementFilter: StatementFilter): BindingTrace {
|
private fun propertyAdditionalResolve(resolveSession: ResolveSession, jetProperty: JetProperty, file: JetFile, statementFilter: StatementFilter): BindingTrace {
|
||||||
val trace = createDelegatingTrace(jetProperty)
|
val trace = createDelegatingTrace(jetProperty)
|
||||||
val propertyResolutionScope = resolveSession.getScopeProvider().getResolutionScopeForDeclaration(jetProperty)
|
val propertyResolutionScope = resolveSession.getDeclarationScopeProvider().getResolutionScopeForDeclaration(jetProperty)
|
||||||
|
|
||||||
val bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter)
|
val bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter)
|
||||||
val descriptor = resolveSession.resolveToDescriptor(jetProperty) as PropertyDescriptor
|
val descriptor = resolveSession.resolveToDescriptor(jetProperty) as PropertyDescriptor
|
||||||
@@ -341,7 +337,7 @@ public abstract class ElementResolver protected constructor(
|
|||||||
|
|
||||||
val bodyResolveContext = BodyResolveContextForLazy(TopDownAnalysisMode.LocalDeclarations, { declaration ->
|
val bodyResolveContext = BodyResolveContextForLazy(TopDownAnalysisMode.LocalDeclarations, { declaration ->
|
||||||
assert(declaration.getParent() == jetProperty) { "Must be called only for property accessors, but called for $declaration" }
|
assert(declaration.getParent() == jetProperty) { "Must be called only for property accessors, but called for $declaration" }
|
||||||
resolveSession.getScopeProvider().getResolutionScopeForDeclaration(declaration)
|
resolveSession.getDeclarationScopeProvider().getResolutionScopeForDeclaration(declaration)
|
||||||
})
|
})
|
||||||
|
|
||||||
bodyResolver.resolvePropertyAccessors(bodyResolveContext, jetProperty, descriptor)
|
bodyResolver.resolvePropertyAccessors(bodyResolveContext, jetProperty, descriptor)
|
||||||
@@ -356,7 +352,7 @@ public abstract class ElementResolver protected constructor(
|
|||||||
private fun functionAdditionalResolve(resolveSession: ResolveSession, namedFunction: JetNamedFunction, file: JetFile, statementFilter: StatementFilter): BindingTrace {
|
private fun functionAdditionalResolve(resolveSession: ResolveSession, namedFunction: JetNamedFunction, file: JetFile, statementFilter: StatementFilter): BindingTrace {
|
||||||
val trace = createDelegatingTrace(namedFunction)
|
val trace = createDelegatingTrace(namedFunction)
|
||||||
|
|
||||||
val scope = resolveSession.getScopeProvider().getResolutionScopeForDeclaration(namedFunction)
|
val scope = resolveSession.getDeclarationScopeProvider().getResolutionScopeForDeclaration(namedFunction)
|
||||||
val functionDescriptor = resolveSession.resolveToDescriptor(namedFunction) as FunctionDescriptor
|
val functionDescriptor = resolveSession.resolveToDescriptor(namedFunction) as FunctionDescriptor
|
||||||
ForceResolveUtil.forceResolveAllContents(functionDescriptor)
|
ForceResolveUtil.forceResolveAllContents(functionDescriptor)
|
||||||
|
|
||||||
@@ -369,7 +365,7 @@ public abstract class ElementResolver protected constructor(
|
|||||||
private fun secondaryConstructorAdditionalResolve(resolveSession: ResolveSession, constructor: JetSecondaryConstructor, file: JetFile, statementFilter: StatementFilter): BindingTrace {
|
private fun secondaryConstructorAdditionalResolve(resolveSession: ResolveSession, constructor: JetSecondaryConstructor, file: JetFile, statementFilter: StatementFilter): BindingTrace {
|
||||||
val trace = createDelegatingTrace(constructor)
|
val trace = createDelegatingTrace(constructor)
|
||||||
|
|
||||||
val scope = resolveSession.getScopeProvider().getResolutionScopeForDeclaration(constructor)
|
val scope = resolveSession.getDeclarationScopeProvider().getResolutionScopeForDeclaration(constructor)
|
||||||
val constructorDescriptor = resolveSession.resolveToDescriptor(constructor) as ConstructorDescriptor
|
val constructorDescriptor = resolveSession.resolveToDescriptor(constructor) as ConstructorDescriptor
|
||||||
ForceResolveUtil.forceResolveAllContents(constructorDescriptor)
|
ForceResolveUtil.forceResolveAllContents(constructorDescriptor)
|
||||||
|
|
||||||
@@ -381,7 +377,7 @@ public abstract class ElementResolver protected constructor(
|
|||||||
|
|
||||||
private fun constructorAdditionalResolve(resolveSession: ResolveSession, klass: JetClass, file: JetFile, statementFilter: StatementFilter): BindingTrace {
|
private fun constructorAdditionalResolve(resolveSession: ResolveSession, klass: JetClass, file: JetFile, statementFilter: StatementFilter): BindingTrace {
|
||||||
val trace = createDelegatingTrace(klass)
|
val trace = createDelegatingTrace(klass)
|
||||||
val scope = resolveSession.getScopeProvider().getResolutionScopeForDeclaration(klass)
|
val scope = resolveSession.getDeclarationScopeProvider().getResolutionScopeForDeclaration(klass)
|
||||||
|
|
||||||
val classDescriptor = resolveSession.resolveToDescriptor(klass) as ClassDescriptor
|
val classDescriptor = resolveSession.resolveToDescriptor(klass) as ClassDescriptor
|
||||||
val constructorDescriptor = classDescriptor.getUnsubstitutedPrimaryConstructor()
|
val constructorDescriptor = classDescriptor.getUnsubstitutedPrimaryConstructor()
|
||||||
@@ -420,12 +416,11 @@ public abstract class ElementResolver protected constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getExpressionResolutionScope(resolveSession: ResolveSession, expression: JetExpression): JetScope {
|
private fun getExpressionResolutionScope(resolveSession: ResolveSession, expression: JetExpression): JetScope {
|
||||||
val provider = resolveSession.getScopeProvider()
|
|
||||||
val parentDeclaration = expression.getParentOfType<JetDeclaration>(true)
|
val parentDeclaration = expression.getParentOfType<JetDeclaration>(true)
|
||||||
if (parentDeclaration == null) {
|
if (parentDeclaration == null) {
|
||||||
return provider.getFileScope(expression.getContainingJetFile())
|
return resolveSession.getFileScopeProvider().getFileScope(expression.getContainingJetFile())
|
||||||
}
|
}
|
||||||
return provider.getResolutionScopeForDeclaration(parentDeclaration)
|
return resolveSession.getDeclarationScopeProvider().getResolutionScopeForDeclaration(parentDeclaration)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getExpressionMemberScope(resolveSession: ResolveSession, expression: JetExpression): JetScope? {
|
private fun getExpressionMemberScope(resolveSession: ResolveSession, expression: JetExpression): JetScope? {
|
||||||
|
|||||||
+1
-1
@@ -222,7 +222,7 @@ private class ResolutionFacadeImpl(private val project: Project, private val cac
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getFileTopLevelScope(file: JetFile): JetScope {
|
override fun getFileTopLevelScope(file: JetFile): JetScope {
|
||||||
return cache.getLazyResolveSession(file).getScopeProvider().getFileScope(file)
|
return cache.getLazyResolveSession(file).getFileScopeProvider().getFileScope(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun resolveImportReference(moduleDescriptor: ModuleDescriptor, fqName: FqName): Collection<DeclarationDescriptor> {
|
override fun resolveImportReference(moduleDescriptor: ModuleDescriptor, fqName: FqName): Collection<DeclarationDescriptor> {
|
||||||
|
|||||||
+2
-2
@@ -29,11 +29,11 @@ import com.intellij.util.containers.SLRUCache
|
|||||||
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
||||||
import org.jetbrains.kotlin.analyzer.analyzeInContext
|
import org.jetbrains.kotlin.analyzer.analyzeInContext
|
||||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||||
|
import org.jetbrains.kotlin.container.get
|
||||||
import org.jetbrains.kotlin.context.SimpleGlobalContext
|
import org.jetbrains.kotlin.context.SimpleGlobalContext
|
||||||
import org.jetbrains.kotlin.context.withModule
|
import org.jetbrains.kotlin.context.withModule
|
||||||
import org.jetbrains.kotlin.context.withProject
|
import org.jetbrains.kotlin.context.withProject
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.container.get
|
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
|
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
|
||||||
import org.jetbrains.kotlin.frontend.di.createContainerForLazyBodyResolve
|
import org.jetbrains.kotlin.frontend.di.createContainerForLazyBodyResolve
|
||||||
import org.jetbrains.kotlin.idea.project.ResolveSessionForBodies
|
import org.jetbrains.kotlin.idea.project.ResolveSessionForBodies
|
||||||
@@ -299,7 +299,7 @@ private object KotlinResolveDataProvider {
|
|||||||
|
|
||||||
if (scopeForContextElement == null) return BindingContext.EMPTY
|
if (scopeForContextElement == null) return BindingContext.EMPTY
|
||||||
|
|
||||||
val codeFragmentScope = resolveSession.getScopeProvider().getFileScope(codeFragment)
|
val codeFragmentScope = resolveSession.getFileScopeProvider().getFileScope(codeFragment)
|
||||||
val chainedScope = ChainedScope(
|
val chainedScope = ChainedScope(
|
||||||
scopeForContextElement.getContainingDeclaration(),
|
scopeForContextElement.getContainingDeclaration(),
|
||||||
"Scope for resolve code fragment",
|
"Scope for resolve code fragment",
|
||||||
|
|||||||
+11
-8
@@ -26,12 +26,9 @@ import org.jetbrains.kotlin.psi.*;
|
|||||||
import org.jetbrains.kotlin.psi.psiUtil.PsiUtilPackage;
|
import org.jetbrains.kotlin.psi.psiUtil.PsiUtilPackage;
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||||
import org.jetbrains.kotlin.resolve.BindingContextUtils;
|
import org.jetbrains.kotlin.resolve.BindingContextUtils;
|
||||||
import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver;
|
|
||||||
import org.jetbrains.kotlin.resolve.BodyResolveCache;
|
import org.jetbrains.kotlin.resolve.BodyResolveCache;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode;
|
import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer;
|
import org.jetbrains.kotlin.resolve.lazy.*;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider;
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyPackageDescriptor;
|
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyPackageDescriptor;
|
||||||
import org.jetbrains.kotlin.storage.ExceptionTracker;
|
import org.jetbrains.kotlin.storage.ExceptionTracker;
|
||||||
import org.jetbrains.kotlin.storage.StorageManager;
|
import org.jetbrains.kotlin.storage.StorageManager;
|
||||||
@@ -119,10 +116,16 @@ public class ResolveSessionForBodies implements KotlinCodeAnalyzer {
|
|||||||
return resolveSession.getScriptDescriptor(script);
|
return resolveSession.getScriptDescriptor(script);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public ScopeProvider getScopeProvider() {
|
@Override
|
||||||
return resolveSession.getScopeProvider();
|
public DeclarationScopeProvider getDeclarationScopeProvider() {
|
||||||
|
return resolveSession.getDeclarationScopeProvider();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public FileScopeProvider getFileScopeProvider() {
|
||||||
|
return resolveSession.getFileScopeProvider();
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ import org.jetbrains.kotlin.js.resolve.KotlinJsCheckerProvider
|
|||||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||||
import org.jetbrains.kotlin.resolve.BodyResolveCache
|
import org.jetbrains.kotlin.resolve.BodyResolveCache
|
||||||
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel
|
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel
|
||||||
|
import org.jetbrains.kotlin.resolve.lazy.FileScopeProviderImpl
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
||||||
import org.jetbrains.kotlin.types.DynamicTypesAllowed
|
import org.jetbrains.kotlin.types.DynamicTypesAllowed
|
||||||
|
|
||||||
@@ -40,8 +40,8 @@ public fun createTopDownAnalyzerForJs(
|
|||||||
configureModule(moduleContext, KotlinJsCheckerProvider, bindingTrace)
|
configureModule(moduleContext, KotlinJsCheckerProvider, bindingTrace)
|
||||||
|
|
||||||
useInstance(declarationProviderFactory)
|
useInstance(declarationProviderFactory)
|
||||||
|
useImpl<FileScopeProviderImpl>()
|
||||||
useInstance(BodyResolveCache.ThrowException)
|
useInstance(BodyResolveCache.ThrowException)
|
||||||
useImpl<ScopeProvider>()
|
|
||||||
useImpl<ResolveSession>()
|
useImpl<ResolveSession>()
|
||||||
useImpl<LazyTopDownAnalyzerForTopLevel>()
|
useImpl<LazyTopDownAnalyzerForTopLevel>()
|
||||||
useImpl<DynamicTypesAllowed>()
|
useImpl<DynamicTypesAllowed>()
|
||||||
|
|||||||
Reference in New Issue
Block a user