Skip to content

Commit 4b31e75

Browse files
committed
Refactor createContainerForLazyResolve/createLazyResolveSession
1 parent ee1152b commit 4b31e75

File tree

5 files changed

+41
-57
lines changed

5 files changed

+41
-57
lines changed

compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.frontend.di
1919
import org.jetbrains.kotlin.config.CommonConfigurationKeys
2020
import org.jetbrains.kotlin.config.CompilerConfiguration
2121
import org.jetbrains.kotlin.config.LanguageVersionSettings
22+
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
2223
import org.jetbrains.kotlin.container.StorageComponentContainer
2324
import org.jetbrains.kotlin.container.get
2425
import org.jetbrains.kotlin.container.useImpl
@@ -27,9 +28,11 @@ import org.jetbrains.kotlin.context.LazyResolveToken
2728
import org.jetbrains.kotlin.context.ModuleContext
2829
import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor
2930
import org.jetbrains.kotlin.incremental.components.LookupTracker
31+
import org.jetbrains.kotlin.psi.KtFile
3032
import org.jetbrains.kotlin.resolve.*
3133
import org.jetbrains.kotlin.resolve.lazy.*
3234
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
35+
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
3336
import org.jetbrains.kotlin.types.expressions.DeclarationScopeProviderForLocalClassifierAnalyzer
3437
import org.jetbrains.kotlin.types.expressions.LocalClassDescriptorHolder
3538
import org.jetbrains.kotlin.types.expressions.LocalLazyDeclarationResolver
@@ -137,17 +140,15 @@ fun createContainerForLazyResolve(
137140
bindingTrace: BindingTrace,
138141
platform: TargetPlatform,
139142
targetEnvironment: TargetEnvironment,
140-
languageVersionSettings: LanguageVersionSettings
143+
compilerConfiguration: CompilerConfiguration
141144
): StorageComponentContainer = createContainer("LazyResolve", platform) {
142145
configureModule(moduleContext, platform, bindingTrace)
143146

144147
useInstance(declarationProviderFactory)
145148
useInstance(LookupTracker.DO_NOTHING)
146-
useInstance(languageVersionSettings)
147-
//TODO: need to propagate full CompilerConfiguration to frontend
148-
useInstance(CompilerConfiguration().apply {
149-
put(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, languageVersionSettings)
150-
})
149+
useInstance(compilerConfiguration)
150+
151+
useInstance(compilerConfiguration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT))
151152

152153
useImpl<FileScopeProviderImpl>()
153154
useImpl<CompilerDeserializationConfiguration>()
@@ -157,14 +158,12 @@ fun createContainerForLazyResolve(
157158
useImpl<ResolveSession>()
158159
}
159160

160-
@JvmOverloads
161-
fun createLazyResolveSession(
162-
moduleContext: ModuleContext,
163-
declarationProviderFactory: DeclarationProviderFactory,
164-
bindingTrace: BindingTrace,
165-
platform: TargetPlatform,
166-
languageVersionSettings: LanguageVersionSettings,
167-
targetEnvironment: TargetEnvironment = CompilerEnvironment
168-
): ResolveSession = createContainerForLazyResolve(
169-
moduleContext, declarationProviderFactory, bindingTrace, platform, targetEnvironment, languageVersionSettings
170-
).get<ResolveSession>()
161+
fun createLazyResolveSession(moduleContext: ModuleContext, files: Collection<KtFile>): ResolveSession =
162+
createContainerForLazyResolve(
163+
moduleContext,
164+
FileBasedDeclarationProviderFactory(moduleContext.storageManager, files),
165+
BindingTraceContext(),
166+
TargetPlatform.Default,
167+
CompilerEnvironment,
168+
CompilerConfiguration.EMPTY
169+
).get<ResolveSession>()

compiler/tests-common/org/jetbrains/kotlin/renderer/AbstractDescriptorRendererTest.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import com.intellij.openapi.editor.impl.DocumentImpl
2020
import com.intellij.openapi.util.io.FileUtil
2121
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
2222
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
23-
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
23+
import org.jetbrains.kotlin.config.CompilerConfiguration
2424
import org.jetbrains.kotlin.container.ComponentProvider
2525
import org.jetbrains.kotlin.container.get
2626
import org.jetbrains.kotlin.descriptors.ClassDescriptor
@@ -62,7 +62,7 @@ abstract class AbstractDescriptorRendererTest : KotlinTestWithEnvironment() {
6262
CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(),
6363
JvmPlatform,
6464
targetEnvironment,
65-
LanguageVersionSettingsImpl.DEFAULT
65+
CompilerConfiguration.EMPTY
6666
)
6767

6868
val resolveSession = container.get<ResolveSession>()
@@ -148,12 +148,10 @@ abstract class AbstractDescriptorRendererTest : KotlinTestWithEnvironment() {
148148
val renderedDescriptors = descriptors.map { renderer.render(it) }.joinToString(separator = "\n")
149149

150150
val document = DocumentImpl(psiFile.text)
151-
KtUsefulTestCase.assertSameLines(KotlinTestUtils.getLastCommentedLines(document), renderedDescriptors.toString())
151+
KtUsefulTestCase.assertSameLines(KotlinTestUtils.getLastCommentedLines(document), renderedDescriptors)
152152
}
153153

154154
override fun createEnvironment(): KotlinCoreEnvironment {
155155
return createEnvironmentWithMockJdk(ConfigurationKind.JDK_ONLY)
156156
}
157157
}
158-
159-

compiler/tests/org/jetbrains/kotlin/types/DefaultModalityModifiersTest.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,17 @@
2121
import org.jetbrains.annotations.NotNull;
2222
import org.jetbrains.kotlin.analyzer.AnalysisResult;
2323
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
24-
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl;
2524
import org.jetbrains.kotlin.context.ContextKt;
26-
import org.jetbrains.kotlin.context.ModuleContext;
2725
import org.jetbrains.kotlin.descriptors.*;
2826
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
2927
import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
3028
import org.jetbrains.kotlin.psi.*;
31-
import org.jetbrains.kotlin.resolve.*;
29+
import org.jetbrains.kotlin.resolve.BindingContext;
30+
import org.jetbrains.kotlin.resolve.DescriptorResolver;
31+
import org.jetbrains.kotlin.resolve.FunctionDescriptorResolver;
3232
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfoFactory;
3333
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil;
3434
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
35-
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
3635
import org.jetbrains.kotlin.resolve.scopes.*;
3736
import org.jetbrains.kotlin.resolve.scopes.utils.ScopeUtilsKt;
3837
import org.jetbrains.kotlin.test.ConfigurationKind;
@@ -104,14 +103,9 @@ public Unit invoke(LexicalScopeImpl.InitializeHandler handler) {
104103
}
105104

106105
private ClassDescriptorWithResolutionScopes createClassDescriptor(ClassKind kind, KtClass aClass) {
107-
ModuleContext moduleContext = ContextKt.ModuleContext(root, getProject());
108106
ResolveSession resolveSession = createLazyResolveSession(
109-
moduleContext,
110-
new FileBasedDeclarationProviderFactory(moduleContext.getStorageManager(),
111-
Collections.singleton(aClass.getContainingKtFile())),
112-
new BindingTraceContext(),
113-
TargetPlatform.Default.INSTANCE,
114-
LanguageVersionSettingsImpl.DEFAULT
107+
ContextKt.ModuleContext(root, getProject()),
108+
Collections.singleton(aClass.getContainingKtFile())
115109
);
116110

117111
return (ClassDescriptorWithResolutionScopes) resolveSession.getClassDescriptor(aClass, NoLookupLocation.FROM_TEST);

idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JsAnalyzerFacade.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ import com.intellij.openapi.roots.OrderRootType
2020
import com.intellij.psi.search.GlobalSearchScope
2121
import com.intellij.util.PathUtil
2222
import org.jetbrains.kotlin.analyzer.*
23+
import org.jetbrains.kotlin.config.CommonConfigurationKeys
24+
import org.jetbrains.kotlin.config.CompilerConfiguration
25+
import org.jetbrains.kotlin.config.JVMConfigurationKeys
26+
import org.jetbrains.kotlin.config.JvmTarget
2327
import org.jetbrains.kotlin.container.get
2428
import org.jetbrains.kotlin.context.ModuleContext
2529
import org.jetbrains.kotlin.descriptors.PackagePartProvider
@@ -55,13 +59,20 @@ object JsAnalyzerFacade : AnalyzerFacade<PlatformAnalysisParameters>() {
5559
project, moduleContext.storageManager, syntheticFiles, if (moduleInfo.isLibrary) GlobalSearchScope.EMPTY_SCOPE else moduleContentScope
5660
)
5761

62+
// TODO: deduplicate this with JvmAnalyzerFacade
63+
val configuration = CompilerConfiguration().apply {
64+
val languageSettingsProvider = LanguageSettingsProvider.getInstance(project)
65+
put(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, languageSettingsProvider.getLanguageVersionSettings(moduleInfo, project))
66+
isReadOnly = true
67+
}
68+
5869
val container = createContainerForLazyResolve(
5970
moduleContext,
6071
declarationProviderFactory,
6172
BindingTraceContext(),
6273
JsPlatform,
6374
targetEnvironment,
64-
LanguageSettingsProvider.getInstance(project).getLanguageVersionSettings(moduleInfo, project)
75+
configuration
6576
)
6677
var packageFragmentProvider = container.get<ResolveSession>().packageFragmentProvider
6778

idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.java

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
import org.jetbrains.annotations.Nullable;
4343
import org.jetbrains.annotations.TestOnly;
4444
import org.jetbrains.kotlin.builtins.DefaultBuiltIns;
45-
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl;
4645
import org.jetbrains.kotlin.context.ContextKt;
4746
import org.jetbrains.kotlin.context.MutableModuleContext;
4847
import org.jetbrains.kotlin.descriptors.CallableDescriptor;
@@ -55,11 +54,8 @@
5554
import org.jetbrains.kotlin.name.Name;
5655
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap;
5756
import org.jetbrains.kotlin.psi.*;
58-
import org.jetbrains.kotlin.resolve.BindingTraceContext;
59-
import org.jetbrains.kotlin.resolve.TargetPlatform;
6057
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer;
6158
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
62-
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
6359

6460
import java.util.Collection;
6561
import java.util.Collections;
@@ -235,26 +231,12 @@ private static KotlinCodeAnalyzer createAnalyzer(
235231
@NotNull Collection<KtNamedDeclaration> candidates,
236232
@NotNull Project project
237233
) {
238-
MutableModuleContext newModuleContext = ContextKt.ContextForNewModule(
234+
MutableModuleContext context = ContextKt.ContextForNewModule(
239235
ContextKt.ProjectContext(project), Name.special("<library module>"), DefaultBuiltIns.getInstance(), null
240236
);
241-
242-
newModuleContext.setDependencies(newModuleContext.getModule(), newModuleContext.getModule().getBuiltIns().getBuiltInsModule());
243-
244-
FileBasedDeclarationProviderFactory providerFactory = new FileBasedDeclarationProviderFactory(
245-
newModuleContext.getStorageManager(),
246-
getContainingFiles(candidates)
247-
);
248-
249-
ResolveSession resolveSession = InjectionKt.createLazyResolveSession(
250-
newModuleContext,
251-
providerFactory,
252-
new BindingTraceContext(),
253-
TargetPlatform.Default.INSTANCE,
254-
LanguageVersionSettingsImpl.DEFAULT
255-
);
256-
257-
newModuleContext.initializeModuleContents(resolveSession.getPackageFragmentProvider());
237+
context.setDependencies(context.getModule(), context.getModule().getBuiltIns().getBuiltInsModule());
238+
ResolveSession resolveSession = InjectionKt.createLazyResolveSession(context, getContainingFiles(candidates));
239+
context.initializeModuleContents(resolveSession.getPackageFragmentProvider());
258240
return resolveSession;
259241
}
260242

@@ -453,7 +435,7 @@ public static KtDeclaration getOriginalElement(@NotNull KtDeclaration declaratio
453435
}
454436

455437
@NotNull
456-
public static KtDeclaration navigateToDeclaration(
438+
private static KtDeclaration navigateToDeclaration(
457439
@NotNull KtDeclaration from,
458440
@NotNull NavigationKind navigationKind
459441
) {

0 commit comments

Comments
 (0)