Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Refactor: Remove ScopeProvider, introduce FileScopeProviderImpl
Rename NoFileScopeProvider -> FileScopeProvider.ThrowException, ScopeProvider.AdditionalScopeProvider -> FileScopeProvider.AdditionalScopes
  • Loading branch information
pTalanov committed Jun 30, 2015
1 parent 7bcc3dd commit b173f96
Show file tree
Hide file tree
Showing 23 changed files with 153 additions and 220 deletions.
Expand Up @@ -56,8 +56,8 @@
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
import org.jetbrains.kotlin.resolve.jvm.JvmClassName;
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.ScopeProvider;
import org.jetbrains.kotlin.resolve.lazy.data.JetClassLikeInfo;
import org.jetbrains.kotlin.resolve.lazy.declarations.*;
import org.jetbrains.kotlin.resolve.scopes.JetScope;
Expand Down Expand Up @@ -111,7 +111,7 @@ public ReplInterpreter(@NotNull Disposable disposable, @NotNull CompilerConfigur

scriptDeclarationFactory = new ScriptMutableDeclarationProviderFactory();

ScopeProvider.AdditionalFileScopeProvider scopeProvider = new ScopeProvider.AdditionalFileScopeProvider() {
FileScopeProvider.AdditionalScopes scopeProvider = new FileScopeProvider.AdditionalScopes() {
@NotNull
@Override
public List<JetScope> scopes(@NotNull JetFile file) {
Expand All @@ -128,7 +128,7 @@ public List<JetScope> scopes(@NotNull JetFile file) {
);

this.topDownAnalysisContext = new TopDownAnalysisContext(TopDownAnalysisMode.LocalDeclarations, DataFlowInfo.EMPTY,
container.getResolveSession().getScopeProvider());
container.getResolveSession().getDeclarationScopeProvider());
this.topDownAnalyzer = container.getLazyTopDownAnalyzerForTopLevel();
this.resolveSession = container.getResolveSession();

Expand Down
Expand Up @@ -29,13 +29,14 @@ import org.jetbrains.kotlin.resolve.BodyResolveCache
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel
import org.jetbrains.kotlin.resolve.jvm.JavaClassFinderPostConstruct
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.ScopeProvider
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory

public fun createContainerForReplWithJava(
moduleContext: ModuleContext, bindingTrace: BindingTrace, declarationProviderFactory: DeclarationProviderFactory,
moduleContentScope: GlobalSearchScope, additionalFileScopeProvider: ScopeProvider.AdditionalFileScopeProvider
moduleContentScope: GlobalSearchScope, additionalFileScopeProvider: FileScopeProvider.AdditionalScopes
): ContainerForReplWithJava = createContainer("ReplWithJava") {
configureModule(moduleContext, KotlinJvmCheckerProvider, bindingTrace)
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project)
Expand All @@ -44,7 +45,7 @@ public fun createContainerForReplWithJava(
useInstance(declarationProviderFactory)
useInstance(BodyResolveCache.ThrowException)

useImpl<ScopeProvider>()
useImpl<FileScopeProviderImpl>()
useImpl<SingleModuleClassResolver>()
}.let {
it.get<JavaClassFinderImpl>().initialize()
Expand Down
Expand Up @@ -39,8 +39,8 @@ import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel
import org.jetbrains.kotlin.resolve.jvm.JavaClassFinderPostConstruct
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
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.ScopeProvider
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory

public fun StorageComponentContainer.configureJavaTopDownAnalysis(moduleContentScope: GlobalSearchScope, project: Project) {
Expand Down Expand Up @@ -78,7 +78,7 @@ public fun createContainerForLazyResolveWithJava(

useInstance(declarationProviderFactory)
useInstance(BodyResolveCache.ThrowException)
useImpl<ScopeProvider>()
useImpl<FileScopeProviderImpl>()
useImpl<LazyResolveToken>()
}.let {
it.javaAnalysisInit()
Expand All @@ -98,7 +98,7 @@ public fun createContainerForTopDownAnalyzerForJvm(
useInstance(BodyResolveCache.ThrowException)

useImpl<SingleModuleClassResolver>()
useImpl<ScopeProvider>()
useImpl<FileScopeProviderImpl>()
}.let {
it.javaAnalysisInit()

Expand Down
Expand Up @@ -23,8 +23,8 @@ import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.resolve.*
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.NoFileScopeProvider
import org.jetbrains.kotlin.resolve.lazy.NoTopLevelDescriptorProvider
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
Expand Down Expand Up @@ -73,7 +73,7 @@ public fun createContainerForLazyBodyResolve(
configureModule(moduleContext, additionalCheckerProvider, bindingTrace)

useInstance(kotlinCodeAnalyzer)
useInstance(kotlinCodeAnalyzer.getScopeProvider())
useInstance(kotlinCodeAnalyzer.getFileScopeProvider())
useInstance(dynamicTypesSettings)
useInstance(bodyResolveCache)
useImpl<LazyTopDownAnalyzerForTopLevel>()
Expand All @@ -94,8 +94,8 @@ public fun createContainerForLazyLocalClassifierAnalyzer(
useImpl<LazyTopDownAnalyzer>()

useInstance(NoTopLevelDescriptorProvider)
useInstance(NoFileScopeProvider)
useInstance(BodyResolveCache.ThrowException)
useInstance(FileScopeProvider.ThrowException)

useImpl<DeclarationScopeProviderForLocalClassifierAnalyzer>()
useImpl<LocalLazyDeclarationResolver>()
Expand Down
Expand Up @@ -92,7 +92,7 @@ private static void resolveImportsInAllFiles(TopDownAnalysisContext c, KotlinCod
}

private static void resolveAndCheckImports(@NotNull JetFile file, @NotNull KotlinCodeAnalyzer resolveSession) {
LazyFileScope fileScope = resolveSession.getScopeProvider().getFileScope(file);
LazyFileScope fileScope = resolveSession.getFileScopeProvider().getFileScope(file);
fileScope.forceResolveAllImports();
}
}
Expand Down
Expand Up @@ -24,21 +24,18 @@
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor;
import org.jetbrains.kotlin.resolve.scopes.JetScope;

import javax.inject.Inject;

public class DeclarationScopeProviderImpl implements DeclarationScopeProvider {

private final LazyDeclarationResolver lazyDeclarationResolver;

private FileScopeProvider fileScopeProvider;
private final FileScopeProvider fileScopeProvider;

@Inject
public void setFileScopeProvider(@NotNull FileScopeProvider fileScopeProvider) {
this.fileScopeProvider = fileScopeProvider;
}

public DeclarationScopeProviderImpl(@NotNull LazyDeclarationResolver lazyDeclarationResolver) {
public DeclarationScopeProviderImpl(
@NotNull LazyDeclarationResolver lazyDeclarationResolver,
@NotNull FileScopeProvider fileScopeProvider
) {
this.lazyDeclarationResolver = lazyDeclarationResolver;
this.fileScopeProvider = fileScopeProvider;
}

@Override
Expand Down
Expand Up @@ -19,12 +19,19 @@ package org.jetbrains.kotlin.resolve.lazy
import org.jetbrains.kotlin.psi.JetFile
import org.jetbrains.kotlin.resolve.scopes.JetScope

public trait FileScopeProvider {
fun getFileScope(jetFile: JetFile): JetScope
}
public interface FileScopeProvider {
fun getFileScope(file: JetFile): LazyFileScope

public object ThrowException : FileScopeProvider {
override fun getFileScope(file: JetFile): LazyFileScope {
throw UnsupportedOperationException("Should not be called")
}
}

public object NoFileScopeProvider : FileScopeProvider {
override fun getFileScope(jetFile: JetFile): JetScope {
throw UnsupportedOperationException("Should not be called")
public open class AdditionalScopes {
public open fun scopes(file: JetFile): List<JetScope> {
return emptyList()
}
}
}
}

@@ -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()
)
}
}
Expand Up @@ -17,18 +17,14 @@
package org.jetbrains.kotlin.resolve.lazy;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.ReadOnly;
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.psi.JetClassOrObject;
import org.jetbrains.kotlin.psi.JetDeclaration;
import org.jetbrains.kotlin.resolve.BindingContext;

import java.util.Collection;

public interface KotlinCodeAnalyzer extends TopLevelDescriptorProvider {

@NotNull
Expand All @@ -44,7 +40,10 @@ public interface KotlinCodeAnalyzer extends TopLevelDescriptorProvider {
DeclarationDescriptor resolveToDescriptor(@NotNull JetDeclaration declaration);

@NotNull
ScopeProvider getScopeProvider();
DeclarationScopeProvider getDeclarationScopeProvider();

@NotNull
FileScopeProvider getFileScopeProvider();

/**
* Forces all descriptors to be resolved.
Expand Down
Expand Up @@ -16,13 +16,13 @@

package org.jetbrains.kotlin.resolve.lazy

import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.resolve.*
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
import org.jetbrains.kotlin.storage.StorageManager

public trait LazyClassContext {
val scopeProvider: DeclarationScopeProvider
val declarationScopeProvider: DeclarationScopeProvider

val storageManager: StorageManager
val trace: BindingTrace
Expand Down
Expand Up @@ -29,9 +29,8 @@ import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver.LookupMode
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.resolve.scopes.JetScope
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
import org.jetbrains.kotlin.utils.Printer
import org.jetbrains.kotlin.util.collectionUtils.concat
import java.util.HashSet
import org.jetbrains.kotlin.utils.Printer
import java.util.LinkedHashSet
import kotlin.properties.Delegates

Expand Down Expand Up @@ -127,7 +126,7 @@ class LazyImportResolver(

val status = importedScopesProvider(importDirective).importResolveStatus
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)
}
}
Expand Down
Expand Up @@ -64,8 +64,6 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
private final MemoizedFunctionToNotNull<JetFile, LazyAnnotations> fileAnnotations;
private final MemoizedFunctionToNotNull<JetFile, LazyAnnotations> danglingAnnotations;

private ScopeProvider scopeProvider;

private JetImportsFactory jetImportFactory;
private AnnotationResolver annotationResolve;
private DescriptorResolver descriptorResolver;
Expand All @@ -74,6 +72,8 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
private QualifiedExpressionResolver qualifiedExpressionResolver;
private ScriptBodyResolver scriptBodyResolver;
private LazyDeclarationResolver lazyDeclarationResolver;
private FileScopeProvider fileScopeProvider;
private DeclarationScopeProvider declarationScopeProvider;

@Inject
public void setJetImportFactory(JetImportsFactory jetImportFactory) {
Expand Down Expand Up @@ -105,11 +105,6 @@ public void setQualifiedExpressionResolver(QualifiedExpressionResolver qualified
this.qualifiedExpressionResolver = qualifiedExpressionResolver;
}

@Inject
public void setScopeProvider(ScopeProvider scopeProvider) {
this.scopeProvider = scopeProvider;
}

@Inject
public void setScriptBodyResolver(ScriptBodyResolver scriptBodyResolver) {
this.scriptBodyResolver = scriptBodyResolver;
Expand All @@ -120,6 +115,16 @@ public void setLazyDeclarationResolver(LazyDeclarationResolver lazyDeclarationRe
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
@Deprecated
public ResolveSession(
Expand Down Expand Up @@ -197,7 +202,7 @@ public LazyAnnotations invoke(JetFile file) {
}

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);
return new LazyAnnotations(lazyAnnotationContext, annotationEntries);
}
Expand Down Expand Up @@ -349,12 +354,6 @@ public void forceResolveAll() {
}
}

@Override
@NotNull
public ScopeProvider getScopeProvider() {
return scopeProvider;
}

@NotNull
public JetImportsFactory getJetImportsFactory() {
return jetImportFactory;
Expand Down Expand Up @@ -388,4 +387,16 @@ public QualifiedExpressionResolver getQualifiedExpressionResolver() {
public FunctionDescriptorResolver getFunctionDescriptorResolver() {
return functionDescriptorResolver;
}

@NotNull
@Override
public DeclarationScopeProvider getDeclarationScopeProvider() {
return declarationScopeProvider;
}

@Override
@NotNull
public FileScopeProvider getFileScopeProvider() {
return fileScopeProvider;
}
}

0 comments on commit b173f96

Please sign in to comment.