LTDA: Add addition scope provider component for lazy resolve and create additional injector for REPL
This commit is contained in:
committed by
Nikolay Krasko
parent
4342740195
commit
ce45108fe9
@@ -48,6 +48,7 @@ import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
|
||||
import org.jetbrains.jet.lang.resolve.calls.tasks.TaskPrioritizer;
|
||||
import org.jetbrains.jet.lang.psi.JetImportsFactory;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider.AdditionalFileScopeProvider;
|
||||
import org.jetbrains.jet.lang.resolve.ScriptBodyResolver;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import javax.annotation.PreDestroy;
|
||||
@@ -88,6 +89,7 @@ public class InjectorForLazyResolve {
|
||||
private final TaskPrioritizer taskPrioritizer;
|
||||
private final JetImportsFactory jetImportsFactory;
|
||||
private final ScopeProvider scopeProvider;
|
||||
private final AdditionalFileScopeProvider additionalFileScopeProvider;
|
||||
private final ScriptBodyResolver scriptBodyResolver;
|
||||
|
||||
public InjectorForLazyResolve(
|
||||
@@ -130,6 +132,7 @@ public class InjectorForLazyResolve {
|
||||
this.taskPrioritizer = new TaskPrioritizer(storageManager);
|
||||
this.jetImportsFactory = new JetImportsFactory();
|
||||
this.scopeProvider = new ScopeProvider(getResolveSession());
|
||||
this.additionalFileScopeProvider = new AdditionalFileScopeProvider();
|
||||
this.scriptBodyResolver = new ScriptBodyResolver();
|
||||
|
||||
this.resolveSession.setAnnotationResolve(annotationResolver);
|
||||
@@ -192,6 +195,8 @@ public class InjectorForLazyResolve {
|
||||
|
||||
jetImportsFactory.setProject(project);
|
||||
|
||||
scopeProvider.setAdditionalFileScopesProvider(additionalFileScopeProvider);
|
||||
|
||||
scriptBodyResolver.setExpressionTypingServices(expressionTypingServices);
|
||||
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
|
||||
import org.jetbrains.jet.lang.resolve.calls.tasks.TaskPrioritizer;
|
||||
import org.jetbrains.jet.lang.psi.JetImportsFactory;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider.AdditionalFileScopeProvider;
|
||||
import org.jetbrains.jet.lang.resolve.ScriptBodyResolver;
|
||||
import org.jetbrains.jet.lang.resolve.BodyResolver;
|
||||
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
|
||||
@@ -103,6 +104,7 @@ public class InjectorForLazyTopDownAnalyzerBasic {
|
||||
private final TaskPrioritizer taskPrioritizer;
|
||||
private final JetImportsFactory jetImportsFactory;
|
||||
private final ScopeProvider scopeProvider;
|
||||
private final AdditionalFileScopeProvider additionalFileScopeProvider;
|
||||
private final ScriptBodyResolver scriptBodyResolver;
|
||||
private final BodyResolver bodyResolver;
|
||||
private final ControlFlowAnalyzer controlFlowAnalyzer;
|
||||
@@ -158,6 +160,7 @@ public class InjectorForLazyTopDownAnalyzerBasic {
|
||||
this.taskPrioritizer = new TaskPrioritizer(storageManager);
|
||||
this.jetImportsFactory = new JetImportsFactory();
|
||||
this.scopeProvider = new ScopeProvider(getResolveSession());
|
||||
this.additionalFileScopeProvider = new AdditionalFileScopeProvider();
|
||||
this.scriptBodyResolver = new ScriptBodyResolver();
|
||||
this.bodyResolver = new BodyResolver();
|
||||
this.controlFlowAnalyzer = new ControlFlowAnalyzer();
|
||||
@@ -242,6 +245,8 @@ public class InjectorForLazyTopDownAnalyzerBasic {
|
||||
|
||||
jetImportsFactory.setProject(project);
|
||||
|
||||
scopeProvider.setAdditionalFileScopesProvider(additionalFileScopeProvider);
|
||||
|
||||
scriptBodyResolver.setExpressionTypingServices(expressionTypingServices);
|
||||
|
||||
bodyResolver.setAnnotationResolver(annotationResolver);
|
||||
|
||||
@@ -30,21 +30,36 @@ import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.ChainedScope;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.storage.LockBasedStorageManager;
|
||||
import org.jetbrains.jet.storage.MemoizedFunctionToNotNull;
|
||||
import org.jetbrains.jet.storage.NotNullLazyValue;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class ScopeProvider {
|
||||
public static class AdditionalFileScopeProvider {
|
||||
@NotNull
|
||||
public List<JetScope> scopes(@NotNull JetFile file) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
||||
private final ResolveSession resolveSession;
|
||||
|
||||
private final MemoizedFunctionToNotNull<JetFile, LazyImportScope> explicitImportScopes;
|
||||
|
||||
private final NotNullLazyValue<JetScope> defaultImportsScope;
|
||||
private Function1<JetFile, JetScope> additionalScopesProvider;
|
||||
|
||||
@SuppressWarnings("ConstantConditions") @NotNull
|
||||
private AdditionalFileScopeProvider additionalFileScopeProvider = null;
|
||||
|
||||
@Inject
|
||||
public void setAdditionalFileScopesProvider(@NotNull AdditionalFileScopeProvider additionalFileScopeProvider) {
|
||||
this.additionalFileScopeProvider = additionalFileScopeProvider;
|
||||
}
|
||||
|
||||
public ScopeProvider(@NotNull ResolveSession resolveSession) {
|
||||
this.resolveSession = resolveSession;
|
||||
@@ -85,23 +100,12 @@ public class ScopeProvider {
|
||||
list.add(getFilePackageDescriptor(file).getMemberScope());
|
||||
list.add(JetModuleUtil.getSubpackagesOfRootScope(resolveSession.getModuleDescriptor()));
|
||||
list.add(explicitImportScopes.invoke(file));
|
||||
|
||||
if (additionalScopesProvider != null) {
|
||||
JetScope additionalScope = additionalScopesProvider.invoke(file);
|
||||
if (additionalScope != null) {
|
||||
list.add(additionalScope);
|
||||
}
|
||||
}
|
||||
|
||||
list.addAll(additionalFileScopeProvider.scopes(file));
|
||||
list.add(defaultImportsScope.invoke());
|
||||
|
||||
return list.toArray(new JetScope[list.size()]);
|
||||
}
|
||||
|
||||
public void setAdditionalFileScopesProvider(@NotNull Function1<JetFile, JetScope> scopeProvider) {
|
||||
this.additionalScopesProvider = scopeProvider;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public LazyImportScope getExplicitImportsScopeForFile(@NotNull JetFile file) {
|
||||
return explicitImportScopes.invoke(file);
|
||||
|
||||
Reference in New Issue
Block a user