Make KotlinJvmCheckerProvider non-singleton, pass module to it
This commit is contained in:
@@ -38,7 +38,7 @@ public fun createContainerForReplWithJava(
|
||||
moduleContext: ModuleContext, bindingTrace: BindingTrace, declarationProviderFactory: DeclarationProviderFactory,
|
||||
moduleContentScope: GlobalSearchScope, additionalFileScopeProvider: FileScopeProvider.AdditionalScopes
|
||||
): ContainerForReplWithJava = createContainer("ReplWithJava") {
|
||||
configureModule(moduleContext, KotlinJvmCheckerProvider, bindingTrace)
|
||||
configureModule(moduleContext, KotlinJvmCheckerProvider(moduleContext.module), bindingTrace)
|
||||
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project)
|
||||
|
||||
useInstance(additionalFileScopeProvider)
|
||||
|
||||
@@ -71,7 +71,7 @@ public fun createContainerForLazyResolveWithJava(
|
||||
moduleContext: ModuleContext, bindingTrace: BindingTrace, declarationProviderFactory: DeclarationProviderFactory,
|
||||
moduleContentScope: GlobalSearchScope, moduleClassResolver: ModuleClassResolver
|
||||
): Pair<ResolveSession, JavaDescriptorResolver> = createContainer("LazyResolveWithJava") {
|
||||
configureModule(moduleContext, KotlinJvmCheckerProvider, bindingTrace)
|
||||
configureModule(moduleContext, KotlinJvmCheckerProvider(moduleContext.module), bindingTrace)
|
||||
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project)
|
||||
|
||||
useInstance(moduleClassResolver)
|
||||
@@ -92,7 +92,7 @@ public fun createContainerForTopDownAnalyzerForJvm(
|
||||
declarationProviderFactory: DeclarationProviderFactory,
|
||||
moduleContentScope: GlobalSearchScope
|
||||
): ContainerForTopDownAnalyzerForJvm = createContainer("TopDownAnalyzerForJvm") {
|
||||
configureModule(moduleContext, KotlinJvmCheckerProvider, bindingTrace)
|
||||
configureModule(moduleContext, KotlinJvmCheckerProvider(moduleContext.module), bindingTrace)
|
||||
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project)
|
||||
useInstance(declarationProviderFactory)
|
||||
useInstance(BodyResolveCache.ThrowException)
|
||||
|
||||
+1
-1
@@ -52,7 +52,7 @@ import org.jetbrains.kotlin.types.expressions.SenselessComparisonChecker
|
||||
import org.jetbrains.kotlin.types.flexibility
|
||||
import org.jetbrains.kotlin.types.isFlexible
|
||||
|
||||
public object KotlinJvmCheckerProvider : AdditionalCheckerProvider(
|
||||
public class KotlinJvmCheckerProvider(private val module: ModuleDescriptor) : AdditionalCheckerProvider(
|
||||
additionalDeclarationCheckers = listOf(PlatformStaticAnnotationChecker(),
|
||||
LocalFunInlineChecker(),
|
||||
ReifiedTypeParameterAnnotationChecker(),
|
||||
|
||||
@@ -53,7 +53,8 @@ public abstract class AbstractDescriptorRendererTest : KotlinTestWithEnvironment
|
||||
context,
|
||||
FileBasedDeclarationProviderFactory(context.storageManager, listOf(psiFile)),
|
||||
CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(),
|
||||
KotlinJvmCheckerProvider, DynamicTypesSettings())
|
||||
KotlinJvmCheckerProvider(context.module), DynamicTypesSettings()
|
||||
)
|
||||
|
||||
context.initializeModuleContents(resolveSession.getPackageFragmentProvider())
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ import org.jetbrains.kotlin.types.expressions.FakeCallResolver
|
||||
|
||||
public fun createContainerForTests(project: Project, module: ModuleDescriptor): ContainerForTests {
|
||||
return ContainerForTests(createContainer("Tests") {
|
||||
configureModule(ModuleContext(module, project), KotlinJvmCheckerProvider)
|
||||
configureModule(ModuleContext(module, project), KotlinJvmCheckerProvider(module))
|
||||
useImpl<ExpressionTypingServices>()
|
||||
})
|
||||
}
|
||||
|
||||
@@ -401,11 +401,17 @@ public abstract class ElementResolver protected constructor(
|
||||
return trace
|
||||
}
|
||||
|
||||
private fun createBodyResolver(resolveSession: ResolveSession, trace: BindingTrace, file: JetFile, statementFilter: StatementFilter): BodyResolver {
|
||||
private fun createBodyResolver(
|
||||
resolveSession: ResolveSession,
|
||||
trace: BindingTrace,
|
||||
file: JetFile,
|
||||
statementFilter: StatementFilter
|
||||
): BodyResolver {
|
||||
val globalContext = SimpleGlobalContext(resolveSession.getStorageManager(), resolveSession.getExceptionTracker())
|
||||
val module = resolveSession.getModuleDescriptor()
|
||||
return createContainerForBodyResolve(
|
||||
globalContext.withProject(file.getProject()).withModule(resolveSession.getModuleDescriptor()),
|
||||
trace, getAdditionalCheckerProvider(file), statementFilter, getDynamicTypesSettings(file)
|
||||
globalContext.withProject(file.getProject()).withModule(module),
|
||||
trace, createAdditionalCheckerProvider(file, module), statementFilter, getDynamicTypesSettings(file)
|
||||
).get<BodyResolver>()
|
||||
}
|
||||
|
||||
@@ -477,7 +483,7 @@ public abstract class ElementResolver protected constructor(
|
||||
return null
|
||||
}
|
||||
|
||||
protected abstract fun getAdditionalCheckerProvider(jetFile: JetFile): AdditionalCheckerProvider
|
||||
protected abstract fun createAdditionalCheckerProvider(jetFile: JetFile, module: ModuleDescriptor): AdditionalCheckerProvider
|
||||
protected abstract fun getDynamicTypesSettings(jetFile: JetFile): DynamicTypesSettings
|
||||
|
||||
private class BodyResolveContextForLazy(
|
||||
|
||||
+5
-7
@@ -215,11 +215,9 @@ private object KotlinResolveDataProvider {
|
||||
|
||||
fun analyze(project: Project, resolveSession: ResolveSessionForBodies, analyzableElement: JetElement): AnalysisResult {
|
||||
try {
|
||||
val module = resolveSession.getModuleDescriptor()
|
||||
if (analyzableElement is JetCodeFragment) {
|
||||
return AnalysisResult.success(
|
||||
analyzeExpressionCodeFragment(resolveSession, analyzableElement),
|
||||
resolveSession.getModuleDescriptor()
|
||||
)
|
||||
return AnalysisResult.success(analyzeExpressionCodeFragment(resolveSession, analyzableElement), module)
|
||||
}
|
||||
|
||||
val file = analyzableElement.getContainingJetFile()
|
||||
@@ -232,12 +230,12 @@ private object KotlinResolveDataProvider {
|
||||
|
||||
val targetPlatform = TargetPlatformDetector.getPlatform(analyzableElement.getContainingJetFile())
|
||||
val globalContext = SimpleGlobalContext(resolveSession.getStorageManager(), resolveSession.getExceptionTracker())
|
||||
val moduleContext = globalContext.withProject(project).withModule(resolveSession.getModuleDescriptor())
|
||||
val moduleContext = globalContext.withProject(project).withModule(module)
|
||||
val lazyTopDownAnalyzer = createContainerForLazyBodyResolve(
|
||||
moduleContext,
|
||||
resolveSession,
|
||||
trace,
|
||||
targetPlatform.getAdditionalCheckerProvider(),
|
||||
targetPlatform.createAdditionalCheckerProvider(module),
|
||||
targetPlatform.getDynamicTypesSettings(),
|
||||
resolveSession.getBodyResolveCache()
|
||||
).get<LazyTopDownAnalyzerForTopLevel>()
|
||||
@@ -248,7 +246,7 @@ private object KotlinResolveDataProvider {
|
||||
)
|
||||
return AnalysisResult.success(
|
||||
trace.getBindingContext(),
|
||||
resolveSession.getModuleDescriptor()
|
||||
module
|
||||
)
|
||||
}
|
||||
catch (e: ProcessCanceledException) {
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.intellij.psi.util.PsiModificationTracker;
|
||||
import kotlin.jvm.functions.Function1;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
|
||||
import org.jetbrains.kotlin.idea.stubindex.JetProbablyNothingFunctionShortNameIndex;
|
||||
import org.jetbrains.kotlin.idea.stubindex.JetProbablyNothingPropertyShortNameIndex;
|
||||
import org.jetbrains.kotlin.psi.JetElement;
|
||||
@@ -88,8 +89,8 @@ public class ResolveElementCache extends ElementResolver implements BodyResolveC
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public AdditionalCheckerProvider getAdditionalCheckerProvider(@NotNull JetFile jetFile) {
|
||||
return TargetPlatformDetector.getPlatform(jetFile).getAdditionalCheckerProvider();
|
||||
public AdditionalCheckerProvider createAdditionalCheckerProvider(@NotNull JetFile jetFile, @NotNull ModuleDescriptor module) {
|
||||
return TargetPlatformDetector.getPlatform(jetFile).createAdditionalCheckerProvider(module);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package org.jetbrains.kotlin.idea.project;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
|
||||
import org.jetbrains.kotlin.js.resolve.KotlinJsCheckerProvider;
|
||||
import org.jetbrains.kotlin.load.kotlin.KotlinJvmCheckerProvider;
|
||||
import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider;
|
||||
@@ -25,11 +26,24 @@ import org.jetbrains.kotlin.types.DynamicTypesSettings;
|
||||
|
||||
public interface TargetPlatform {
|
||||
@NotNull
|
||||
AdditionalCheckerProvider getAdditionalCheckerProvider();
|
||||
AdditionalCheckerProvider createAdditionalCheckerProvider(@NotNull ModuleDescriptor module);
|
||||
|
||||
@NotNull
|
||||
DynamicTypesSettings getDynamicTypesSettings();
|
||||
|
||||
TargetPlatform JVM = new TargetPlatformImpl("JVM", KotlinJvmCheckerProvider.INSTANCE$, new DynamicTypesSettings());
|
||||
TargetPlatform JS = new TargetPlatformImpl("JS", KotlinJsCheckerProvider.INSTANCE$, new DynamicTypesAllowed());
|
||||
TargetPlatform JVM = new TargetPlatformImpl("JVM", new DynamicTypesSettings()) {
|
||||
@NotNull
|
||||
@Override
|
||||
public AdditionalCheckerProvider createAdditionalCheckerProvider(@NotNull ModuleDescriptor module) {
|
||||
return new KotlinJvmCheckerProvider(module);
|
||||
}
|
||||
};
|
||||
|
||||
TargetPlatform JS = new TargetPlatformImpl("JS", new DynamicTypesAllowed()) {
|
||||
@NotNull
|
||||
@Override
|
||||
public AdditionalCheckerProvider createAdditionalCheckerProvider(@NotNull ModuleDescriptor module) {
|
||||
return KotlinJsCheckerProvider.INSTANCE$;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -17,30 +17,17 @@
|
||||
package org.jetbrains.kotlin.idea.project;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider;
|
||||
import org.jetbrains.kotlin.types.DynamicTypesSettings;
|
||||
|
||||
public class TargetPlatformImpl implements TargetPlatform {
|
||||
@NotNull private final String platformName;
|
||||
@NotNull private final AdditionalCheckerProvider additionalCheckerProvider;
|
||||
@NotNull private final DynamicTypesSettings dynamicTypesSettings;
|
||||
public abstract class TargetPlatformImpl implements TargetPlatform {
|
||||
private final String platformName;
|
||||
private final DynamicTypesSettings dynamicTypesSettings;
|
||||
|
||||
public TargetPlatformImpl(
|
||||
@NotNull String platformName,
|
||||
@NotNull AdditionalCheckerProvider additionalCheckerProvider,
|
||||
@NotNull DynamicTypesSettings dynamicTypesSettings
|
||||
) {
|
||||
public TargetPlatformImpl(@NotNull String platformName, @NotNull DynamicTypesSettings dynamicTypesSettings) {
|
||||
this.platformName = platformName;
|
||||
this.additionalCheckerProvider = additionalCheckerProvider;
|
||||
this.dynamicTypesSettings = dynamicTypesSettings;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public AdditionalCheckerProvider getAdditionalCheckerProvider() {
|
||||
return additionalCheckerProvider;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public DynamicTypesSettings getDynamicTypesSettings() {
|
||||
|
||||
Reference in New Issue
Block a user