Propagate 'CompilerConfiguration' to frontend checkers
This commit is contained in:
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.frontend.java.di
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.builtins.JvmBuiltInsPackageFragmentProvider
|
import org.jetbrains.kotlin.builtins.JvmBuiltInsPackageFragmentProvider
|
||||||
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.container.*
|
import org.jetbrains.kotlin.container.*
|
||||||
@@ -89,11 +90,13 @@ fun createContainerForLazyResolveWithJava(
|
|||||||
packagePartProvider: PackagePartProvider,
|
packagePartProvider: PackagePartProvider,
|
||||||
languageVersionSettings: LanguageVersionSettings,
|
languageVersionSettings: LanguageVersionSettings,
|
||||||
useBuiltInsProvider: Boolean,
|
useBuiltInsProvider: Boolean,
|
||||||
useLazyResolve: Boolean
|
useLazyResolve: Boolean,
|
||||||
|
compilerConfiguration: CompilerConfiguration
|
||||||
): StorageComponentContainer = createContainer("LazyResolveWithJava", JvmPlatform) {
|
): StorageComponentContainer = createContainer("LazyResolveWithJava", JvmPlatform) {
|
||||||
configureModule(moduleContext, JvmPlatform, bindingTrace)
|
configureModule(moduleContext, JvmPlatform, bindingTrace)
|
||||||
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, lookupTracker, languageVersionSettings)
|
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, lookupTracker, languageVersionSettings)
|
||||||
|
|
||||||
|
useInstance(compilerConfiguration)
|
||||||
useInstance(packagePartProvider)
|
useInstance(packagePartProvider)
|
||||||
useInstance(moduleClassResolver)
|
useInstance(moduleClassResolver)
|
||||||
useInstance(declarationProviderFactory)
|
useInstance(declarationProviderFactory)
|
||||||
@@ -121,11 +124,12 @@ fun createContainerForTopDownAnalyzerForJvm(
|
|||||||
lookupTracker: LookupTracker,
|
lookupTracker: LookupTracker,
|
||||||
packagePartProvider: PackagePartProvider,
|
packagePartProvider: PackagePartProvider,
|
||||||
languageVersionSettings: LanguageVersionSettings,
|
languageVersionSettings: LanguageVersionSettings,
|
||||||
moduleClassResolver: ModuleClassResolver
|
moduleClassResolver: ModuleClassResolver,
|
||||||
|
compilerConfiguration: CompilerConfiguration
|
||||||
): ComponentProvider = createContainerForLazyResolveWithJava(
|
): ComponentProvider = createContainerForLazyResolveWithJava(
|
||||||
moduleContext, bindingTrace, declarationProviderFactory, moduleContentScope, moduleClassResolver,
|
moduleContext, bindingTrace, declarationProviderFactory, moduleContentScope, moduleClassResolver,
|
||||||
CompilerEnvironment, lookupTracker, packagePartProvider, languageVersionSettings,
|
CompilerEnvironment, lookupTracker, packagePartProvider, languageVersionSettings,
|
||||||
useBuiltInsProvider = true, useLazyResolve = false
|
useBuiltInsProvider = true, useLazyResolve = false, compilerConfiguration = compilerConfiguration
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ package org.jetbrains.kotlin.resolve.jvm
|
|||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.analyzer.*
|
import org.jetbrains.kotlin.analyzer.*
|
||||||
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
|
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||||
|
import org.jetbrains.kotlin.config.JvmTarget
|
||||||
import org.jetbrains.kotlin.container.get
|
import org.jetbrains.kotlin.container.get
|
||||||
import org.jetbrains.kotlin.context.ModuleContext
|
import org.jetbrains.kotlin.context.ModuleContext
|
||||||
import org.jetbrains.kotlin.descriptors.PackagePartProvider
|
import org.jetbrains.kotlin.descriptors.PackagePartProvider
|
||||||
@@ -78,7 +81,15 @@ object JvmAnalyzerFacade : AnalyzerFacade<JvmPlatformParameters>() {
|
|||||||
resolverForModule.componentProvider.get<JavaDescriptorResolver>()
|
resolverForModule.componentProvider.get<JavaDescriptorResolver>()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val languageSettingsProvider = LanguageSettingsProvider.getInstance(project)
|
||||||
val trace = CodeAnalyzerInitializer.getInstance(project).createTrace()
|
val trace = CodeAnalyzerInitializer.getInstance(project).createTrace()
|
||||||
|
//TODO: need to propagate full CompilerConfiguration to frontend
|
||||||
|
val compilerConfiguration = CompilerConfiguration()
|
||||||
|
val platform = languageSettingsProvider.getTargetPlatform(moduleInfo)
|
||||||
|
if (platform is JvmTarget) {
|
||||||
|
compilerConfiguration.put(JVMConfigurationKeys.JVM_TARGET, platform)
|
||||||
|
}
|
||||||
|
compilerConfiguration.isReadOnly = true
|
||||||
val container = createContainerForLazyResolveWithJava(
|
val container = createContainerForLazyResolveWithJava(
|
||||||
moduleContext,
|
moduleContext,
|
||||||
trace,
|
trace,
|
||||||
@@ -88,9 +99,10 @@ object JvmAnalyzerFacade : AnalyzerFacade<JvmPlatformParameters>() {
|
|||||||
targetEnvironment,
|
targetEnvironment,
|
||||||
LookupTracker.DO_NOTHING,
|
LookupTracker.DO_NOTHING,
|
||||||
packagePartProvider,
|
packagePartProvider,
|
||||||
LanguageVersionSettingsProvider.getInstance(project).getLanguageVersionSettings(moduleInfo),
|
languageSettingsProvider.getLanguageVersionSettings(moduleInfo),
|
||||||
useBuiltInsProvider = false, // TODO: load built-ins from module dependencies in IDE
|
useBuiltInsProvider = false, // TODO: load built-ins from module dependencies in IDE
|
||||||
useLazyResolve = true
|
useLazyResolve = true,
|
||||||
|
compilerConfiguration = compilerConfiguration
|
||||||
)
|
)
|
||||||
|
|
||||||
StorageComponentContainerContributor.getInstances(project).forEach { it.onContainerComposed(container, moduleInfo) }
|
StorageComponentContainerContributor.getInstances(project).forEach { it.onContainerComposed(container, moduleInfo) }
|
||||||
|
|||||||
+2
-2
@@ -157,7 +157,7 @@ object TopDownAnalyzerFacadeForJVM {
|
|||||||
|
|
||||||
val dependenciesContainer = createContainerForTopDownAnalyzerForJvm(
|
val dependenciesContainer = createContainerForTopDownAnalyzerForJvm(
|
||||||
dependenciesContext, trace, DeclarationProviderFactory.EMPTY, dependencyScope, lookupTracker,
|
dependenciesContext, trace, DeclarationProviderFactory.EMPTY, dependencyScope, lookupTracker,
|
||||||
packagePartProvider(dependencyScope), languageVersionSettings, moduleClassResolver
|
packagePartProvider(dependencyScope), languageVersionSettings, moduleClassResolver, configuration
|
||||||
)
|
)
|
||||||
|
|
||||||
StorageComponentContainerContributor.getInstances(project).forEach { it.onContainerComposed(dependenciesContainer, null) }
|
StorageComponentContainerContributor.getInstances(project).forEach { it.onContainerComposed(dependenciesContainer, null) }
|
||||||
@@ -182,7 +182,7 @@ object TopDownAnalyzerFacadeForJVM {
|
|||||||
IncrementalPackagePartProvider.create(
|
IncrementalPackagePartProvider.create(
|
||||||
packagePartProvider(sourceScope), targetIds, incrementalComponents, storageManager
|
packagePartProvider(sourceScope), targetIds, incrementalComponents, storageManager
|
||||||
),
|
),
|
||||||
languageVersionSettings, moduleClassResolver
|
languageVersionSettings, moduleClassResolver, configuration
|
||||||
).apply {
|
).apply {
|
||||||
initJvmBuiltInsForTopDownAnalysis(module, languageVersionSettings)
|
initJvmBuiltInsForTopDownAnalysis(module, languageVersionSettings)
|
||||||
StorageComponentContainerContributor.getInstances(project).forEach { it.onContainerComposed(this, null) }
|
StorageComponentContainerContributor.getInstances(project).forEach { it.onContainerComposed(this, null) }
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ import org.jetbrains.kotlin.resolve.CompilerEnvironment
|
|||||||
import org.jetbrains.kotlin.resolve.MultiTargetPlatform
|
import org.jetbrains.kotlin.resolve.MultiTargetPlatform
|
||||||
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
||||||
import org.jetbrains.kotlin.resolve.TargetPlatform
|
import org.jetbrains.kotlin.resolve.TargetPlatform
|
||||||
|
import org.jetbrains.kotlin.utils.DescriptionAware
|
||||||
import org.jetbrains.kotlin.utils.singletonOrEmptyList
|
import org.jetbrains.kotlin.utils.singletonOrEmptyList
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@@ -257,14 +258,18 @@ private class DelegatingPackageFragmentProvider(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface LanguageVersionSettingsProvider {
|
interface LanguageSettingsProvider {
|
||||||
fun getLanguageVersionSettings(moduleInfo: ModuleInfo): LanguageVersionSettings
|
fun getLanguageVersionSettings(moduleInfo: ModuleInfo): LanguageVersionSettings
|
||||||
|
|
||||||
object Default : LanguageVersionSettingsProvider {
|
fun getTargetPlatform(moduleInfo: ModuleInfo): DescriptionAware
|
||||||
|
|
||||||
|
object Default : LanguageSettingsProvider {
|
||||||
override fun getLanguageVersionSettings(moduleInfo: ModuleInfo) = LanguageVersionSettingsImpl.DEFAULT
|
override fun getLanguageVersionSettings(moduleInfo: ModuleInfo) = LanguageVersionSettingsImpl.DEFAULT
|
||||||
|
|
||||||
|
override fun getTargetPlatform(moduleInfo: ModuleInfo): DescriptionAware = DescriptionAware.NoVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun getInstance(project: Project) = ServiceManager.getService(project, LanguageVersionSettingsProvider::class.java) ?: Default
|
fun getInstance(project: Project) = ServiceManager.getService(project, LanguageSettingsProvider::class.java) ?: Default
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.frontend.di
|
package org.jetbrains.kotlin.frontend.di
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.container.StorageComponentContainer
|
import org.jetbrains.kotlin.container.StorageComponentContainer
|
||||||
import org.jetbrains.kotlin.container.get
|
import org.jetbrains.kotlin.container.get
|
||||||
@@ -142,6 +143,8 @@ fun createContainerForLazyResolve(
|
|||||||
useInstance(declarationProviderFactory)
|
useInstance(declarationProviderFactory)
|
||||||
useInstance(LookupTracker.DO_NOTHING)
|
useInstance(LookupTracker.DO_NOTHING)
|
||||||
useInstance(languageVersionSettings)
|
useInstance(languageVersionSettings)
|
||||||
|
//TODO: need to propagate full CompilerConfiguration to frontend
|
||||||
|
useInstance(CompilerConfiguration.EMPTY)
|
||||||
|
|
||||||
useImpl<FileScopeProviderImpl>()
|
useImpl<FileScopeProviderImpl>()
|
||||||
useImpl<CompilerDeserializationConfiguration>()
|
useImpl<CompilerDeserializationConfiguration>()
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.resolve.calls
|
|||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.getReturnTypeFromFunctionType
|
import org.jetbrains.kotlin.builtins.getReturnTypeFromFunctionType
|
||||||
import org.jetbrains.kotlin.builtins.isFunctionType
|
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||||
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
@@ -61,7 +62,8 @@ class CallCompleter(
|
|||||||
private val callCheckers: Iterable<CallChecker>,
|
private val callCheckers: Iterable<CallChecker>,
|
||||||
private val builtIns: KotlinBuiltIns,
|
private val builtIns: KotlinBuiltIns,
|
||||||
private val fakeCallResolver: FakeCallResolver,
|
private val fakeCallResolver: FakeCallResolver,
|
||||||
private val languageVersionSettings: LanguageVersionSettings
|
private val languageVersionSettings: LanguageVersionSettings,
|
||||||
|
private val compilerConfiguration: CompilerConfiguration
|
||||||
) {
|
) {
|
||||||
fun <D : CallableDescriptor> completeCall(
|
fun <D : CallableDescriptor> completeCall(
|
||||||
context: BasicCallResolutionContext,
|
context: BasicCallResolutionContext,
|
||||||
@@ -93,7 +95,7 @@ class CallCompleter(
|
|||||||
else resolvedCall.call.callElement
|
else resolvedCall.call.callElement
|
||||||
|
|
||||||
if (context.trace.wantsDiagnostics()) {
|
if (context.trace.wantsDiagnostics()) {
|
||||||
val callCheckerContext = CallCheckerContext(context, languageVersionSettings)
|
val callCheckerContext = CallCheckerContext(context, languageVersionSettings, compilerConfiguration)
|
||||||
for (callChecker in callCheckers) {
|
for (callChecker in callCheckers) {
|
||||||
callChecker.check(resolvedCall, reportOn, callCheckerContext)
|
callChecker.check(resolvedCall, reportOn, callCheckerContext)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.resolve.calls.checkers
|
package org.jetbrains.kotlin.resolve.calls.checkers
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext
|
import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext
|
||||||
@@ -37,7 +38,8 @@ interface CallChecker {
|
|||||||
class CallCheckerContext(
|
class CallCheckerContext(
|
||||||
val resolutionContext: ResolutionContext<*>,
|
val resolutionContext: ResolutionContext<*>,
|
||||||
val trace: BindingTrace,
|
val trace: BindingTrace,
|
||||||
val languageVersionSettings: LanguageVersionSettings
|
val languageVersionSettings: LanguageVersionSettings,
|
||||||
|
val compilerConfiguration: CompilerConfiguration
|
||||||
) {
|
) {
|
||||||
val scope: LexicalScope
|
val scope: LexicalScope
|
||||||
get() = resolutionContext.scope
|
get() = resolutionContext.scope
|
||||||
@@ -48,7 +50,7 @@ class CallCheckerContext(
|
|||||||
val isAnnotationContext: Boolean
|
val isAnnotationContext: Boolean
|
||||||
get() = resolutionContext.isAnnotationContext
|
get() = resolutionContext.isAnnotationContext
|
||||||
|
|
||||||
constructor(c: ResolutionContext<*>, languageVersionSettings: LanguageVersionSettings) : this(c, c.trace, languageVersionSettings)
|
constructor(c: ResolutionContext<*>, languageVersionSettings: LanguageVersionSettings, configuration: CompilerConfiguration) : this(c, c.trace, languageVersionSettings, configuration)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use this utility to avoid premature computation of deferred return type of a resolved callable descriptor.
|
// Use this utility to avoid premature computation of deferred return type of a resolved callable descriptor.
|
||||||
|
|||||||
+6
-3
@@ -672,7 +672,8 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
trace.record(CALL, expression, call);
|
trace.record(CALL, expression, call);
|
||||||
|
|
||||||
if (context.trace.wantsDiagnostics()) {
|
if (context.trace.wantsDiagnostics()) {
|
||||||
CallCheckerContext callCheckerContext = new CallCheckerContext(context, components.languageVersionSettings);
|
CallCheckerContext callCheckerContext =
|
||||||
|
new CallCheckerContext(context, components.languageVersionSettings, components.compilerConfiguration);
|
||||||
for (CallChecker checker : components.callCheckers) {
|
for (CallChecker checker : components.callCheckers) {
|
||||||
checker.check(resolvedCall, expression, callCheckerContext);
|
checker.check(resolvedCall, expression, callCheckerContext);
|
||||||
}
|
}
|
||||||
@@ -977,7 +978,8 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
if (resolvedCall != null && trace.wantsDiagnostics()) {
|
if (resolvedCall != null && trace.wantsDiagnostics()) {
|
||||||
// Call must be validated with the actual, not temporary trace in order to report operator diagnostic
|
// Call must be validated with the actual, not temporary trace in order to report operator diagnostic
|
||||||
// Only unary assignment expressions (++, --) and +=/... must be checked, normal assignments have the proper trace
|
// Only unary assignment expressions (++, --) and +=/... must be checked, normal assignments have the proper trace
|
||||||
CallCheckerContext callCheckerContext = new CallCheckerContext(context, trace, components.languageVersionSettings);
|
CallCheckerContext callCheckerContext =
|
||||||
|
new CallCheckerContext(context, trace, components.languageVersionSettings, components.compilerConfiguration);
|
||||||
for (CallChecker checker : components.callCheckers) {
|
for (CallChecker checker : components.callCheckers) {
|
||||||
checker.check(resolvedCall, expression, callCheckerContext);
|
checker.check(resolvedCall, expression, callCheckerContext);
|
||||||
}
|
}
|
||||||
@@ -1044,7 +1046,8 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
resolvedCall.markCallAsCompleted();
|
resolvedCall.markCallAsCompleted();
|
||||||
|
|
||||||
if (context.trace.wantsDiagnostics()) {
|
if (context.trace.wantsDiagnostics()) {
|
||||||
CallCheckerContext callCheckerContext = new CallCheckerContext(context, components.languageVersionSettings);
|
CallCheckerContext callCheckerContext =
|
||||||
|
new CallCheckerContext(context, components.languageVersionSettings, components.compilerConfiguration);
|
||||||
for (CallChecker checker : components.callCheckers) {
|
for (CallChecker checker : components.callCheckers) {
|
||||||
checker.check(resolvedCall, expression, callCheckerContext);
|
checker.check(resolvedCall, expression, callCheckerContext);
|
||||||
}
|
}
|
||||||
|
|||||||
+7
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.types.expressions;
|
|||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||||
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings;
|
import org.jetbrains.kotlin.config.LanguageVersionSettings;
|
||||||
import org.jetbrains.kotlin.context.GlobalContext;
|
import org.jetbrains.kotlin.context.GlobalContext;
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker;
|
import org.jetbrains.kotlin.incremental.components.LookupTracker;
|
||||||
@@ -60,6 +61,7 @@ public class ExpressionTypingComponents {
|
|||||||
/*package*/ OverloadChecker overloadChecker;
|
/*package*/ OverloadChecker overloadChecker;
|
||||||
/*package*/ LanguageVersionSettings languageVersionSettings;
|
/*package*/ LanguageVersionSettings languageVersionSettings;
|
||||||
/*package*/ Iterable<RttiExpressionChecker> rttiExpressionCheckers;
|
/*package*/ Iterable<RttiExpressionChecker> rttiExpressionCheckers;
|
||||||
|
/*package*/ CompilerConfiguration compilerConfiguration;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public void setGlobalContext(@NotNull GlobalContext globalContext) {
|
public void setGlobalContext(@NotNull GlobalContext globalContext) {
|
||||||
@@ -200,4 +202,9 @@ public class ExpressionTypingComponents {
|
|||||||
public void setRttiExpressionCheckers(@NotNull Iterable<RttiExpressionChecker> rttiExpressionCheckers) {
|
public void setRttiExpressionCheckers(@NotNull Iterable<RttiExpressionChecker> rttiExpressionCheckers) {
|
||||||
this.rttiExpressionCheckers = rttiExpressionCheckers;
|
this.rttiExpressionCheckers = rttiExpressionCheckers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public void setCompilerConfiguration(CompilerConfiguration compilerConfiguration) {
|
||||||
|
this.compilerConfiguration = compilerConfiguration;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -319,7 +319,8 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
LookupTracker.DO_NOTHING,
|
LookupTracker.DO_NOTHING,
|
||||||
JvmPackagePartProvider(environment, moduleContentScope),
|
JvmPackagePartProvider(environment, moduleContentScope),
|
||||||
languageVersionSettings,
|
languageVersionSettings,
|
||||||
moduleClassResolver
|
moduleClassResolver,
|
||||||
|
configuration
|
||||||
)
|
)
|
||||||
container.initJvmBuiltInsForTopDownAnalysis(moduleDescriptor, languageVersionSettings)
|
container.initJvmBuiltInsForTopDownAnalysis(moduleDescriptor, languageVersionSettings)
|
||||||
moduleClassResolver.resolver = container.get<JavaDescriptorResolver>()
|
moduleClassResolver.resolver = container.get<JavaDescriptorResolver>()
|
||||||
|
|||||||
@@ -18,4 +18,8 @@ package org.jetbrains.kotlin.utils;
|
|||||||
|
|
||||||
interface DescriptionAware {
|
interface DescriptionAware {
|
||||||
val description: String
|
val description: String
|
||||||
|
|
||||||
|
object NoVersion : DescriptionAware {
|
||||||
|
override val description = ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -61,7 +61,7 @@ object JsAnalyzerFacade : AnalyzerFacade<PlatformAnalysisParameters>() {
|
|||||||
BindingTraceContext(),
|
BindingTraceContext(),
|
||||||
JsPlatform,
|
JsPlatform,
|
||||||
targetEnvironment,
|
targetEnvironment,
|
||||||
LanguageVersionSettingsProvider.getInstance(project).getLanguageVersionSettings(moduleInfo)
|
LanguageSettingsProvider.getInstance(project).getLanguageVersionSettings(moduleInfo)
|
||||||
)
|
)
|
||||||
var packageFragmentProvider = container.get<ResolveSession>().packageFragmentProvider
|
var packageFragmentProvider = container.get<ResolveSession>().packageFragmentProvider
|
||||||
|
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ val Module.languageVersionSettings: LanguageVersionSettings
|
|||||||
return LanguageVersionSettingsImpl(languageVersion, ApiVersion.createByLanguageVersion(apiVersion), extraLanguageFeatures)
|
return LanguageVersionSettingsImpl(languageVersion, ApiVersion.createByLanguageVersion(apiVersion), extraLanguageFeatures)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val Module.targetPlatform: TargetPlatformKind<*>?
|
val Module.targetPlatform: TargetPlatformKind<*>?
|
||||||
get() = KotlinFacetSettingsProvider.getInstance(project).getSettings(this).versionInfo.targetPlatformKind
|
get() = KotlinFacetSettingsProvider.getInstance(project).getSettings(this).versionInfo.targetPlatformKind
|
||||||
|
|
||||||
private val Module.implementsCommonModule: Boolean
|
private val Module.implementsCommonModule: Boolean
|
||||||
|
|||||||
@@ -39,9 +39,9 @@ sealed class TargetPlatformKind<out Version : DescriptionAware>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object JavaScript : TargetPlatformKind<NoVersion>(NoVersion, "JavaScript")
|
object JavaScript : TargetPlatformKind<DescriptionAware.NoVersion>(DescriptionAware.NoVersion, "JavaScript")
|
||||||
|
|
||||||
object Common : TargetPlatformKind<NoVersion>(NoVersion, "Common (experimental)")
|
object Common : TargetPlatformKind<DescriptionAware.NoVersion>(DescriptionAware.NoVersion, "Common (experimental)")
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
@@ -49,10 +49,6 @@ sealed class TargetPlatformKind<out Version : DescriptionAware>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object NoVersion : DescriptionAware {
|
|
||||||
override val description = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
data class KotlinVersionInfo(
|
data class KotlinVersionInfo(
|
||||||
var languageLevel: LanguageVersion? = null,
|
var languageLevel: LanguageVersion? = null,
|
||||||
var apiLevel: LanguageVersion? = null,
|
var apiLevel: LanguageVersion? = null,
|
||||||
|
|||||||
@@ -305,7 +305,7 @@
|
|||||||
<projectService serviceInterface="org.jetbrains.kotlin.console.KotlinConsoleKeeper"
|
<projectService serviceInterface="org.jetbrains.kotlin.console.KotlinConsoleKeeper"
|
||||||
serviceImplementation="org.jetbrains.kotlin.console.KotlinConsoleKeeper"/>
|
serviceImplementation="org.jetbrains.kotlin.console.KotlinConsoleKeeper"/>
|
||||||
|
|
||||||
<projectService serviceInterface="org.jetbrains.kotlin.analyzer.LanguageVersionSettingsProvider"
|
<projectService serviceInterface="org.jetbrains.kotlin.analyzer.LanguageSettingsProvider"
|
||||||
serviceImplementation="org.jetbrains.kotlin.idea.compiler.LanguageVersionSettingsProviderImpl"/>
|
serviceImplementation="org.jetbrains.kotlin.idea.compiler.LanguageVersionSettingsProviderImpl"/>
|
||||||
|
|
||||||
<projectService serviceInterface="org.jetbrains.kotlin.config.KotlinFacetSettingsProvider"
|
<projectService serviceInterface="org.jetbrains.kotlin.config.KotlinFacetSettingsProvider"
|
||||||
|
|||||||
@@ -16,15 +16,21 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.compiler
|
package org.jetbrains.kotlin.idea.compiler
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analyzer.LanguageVersionSettingsProvider
|
import org.jetbrains.kotlin.analyzer.LanguageSettingsProvider
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.ModuleSourceInfo
|
import org.jetbrains.kotlin.idea.caches.resolve.ModuleSourceInfo
|
||||||
import org.jetbrains.kotlin.idea.project.languageVersionSettings
|
import org.jetbrains.kotlin.idea.project.languageVersionSettings
|
||||||
|
import org.jetbrains.kotlin.idea.project.targetPlatform
|
||||||
|
import org.jetbrains.kotlin.utils.DescriptionAware
|
||||||
|
|
||||||
class LanguageVersionSettingsProviderImpl : LanguageVersionSettingsProvider {
|
class LanguageVersionSettingsProviderImpl : LanguageSettingsProvider {
|
||||||
override fun getLanguageVersionSettings(moduleInfo: ModuleInfo): LanguageVersionSettings {
|
override fun getLanguageVersionSettings(moduleInfo: ModuleInfo): LanguageVersionSettings {
|
||||||
return (moduleInfo as? ModuleSourceInfo)?.module?.languageVersionSettings ?: LanguageVersionSettingsImpl.DEFAULT
|
return (moduleInfo as? ModuleSourceInfo)?.module?.languageVersionSettings ?: LanguageVersionSettingsImpl.DEFAULT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getTargetPlatform(moduleInfo: ModuleInfo): DescriptionAware {
|
||||||
|
return (moduleInfo as? ModuleSourceInfo)?.module?.targetPlatform?.version ?: DescriptionAware.NoVersion
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user