Uninherit LanguageVersion from LanguageFeatureSettings

Introduce LanguageVersionSettingsImpl to store everything related to the
selected language version
This commit is contained in:
Alexander Udalov
2016-09-13 11:32:05 +03:00
parent 7dbada0d06
commit aec31bd88f
17 changed files with 46 additions and 42 deletions
@@ -33,10 +33,7 @@ import org.jetbrains.kotlin.cli.common.messages.*;
import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler;
import org.jetbrains.kotlin.cli.jvm.compiler.CompileEnvironmentException;
import org.jetbrains.kotlin.cli.jvm.compiler.CompilerJarLocator;
import org.jetbrains.kotlin.config.CommonConfigurationKeys;
import org.jetbrains.kotlin.config.CompilerConfiguration;
import org.jetbrains.kotlin.config.LanguageVersion;
import org.jetbrains.kotlin.config.Services;
import org.jetbrains.kotlin.config.*;
import org.jetbrains.kotlin.progress.CompilationCanceledException;
import org.jetbrains.kotlin.progress.CompilationCanceledStatus;
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus;
@@ -250,9 +247,9 @@ public abstract class CLICompiler<A extends CommonCompilerArguments> {
}
if (arguments.languageVersion != null) {
LanguageVersion languageFeatureSettings = LanguageVersion.fromVersionString(arguments.languageVersion);
if (languageFeatureSettings != null) {
configuration.put(CommonConfigurationKeys.LANGUAGE_FEATURE_SETTINGS, languageFeatureSettings);
LanguageVersion languageVersion = LanguageVersion.fromVersionString(arguments.languageVersion);
if (languageVersion != null) {
configuration.put(CommonConfigurationKeys.LANGUAGE_FEATURE_SETTINGS, new LanguageVersionSettingsImpl(languageVersion));
}
else {
List<String> versionStrings = ArraysKt.map(LanguageVersion.values(), new Function1<LanguageVersion, String>() {
@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.cli.jvm.repl.di
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.*
import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.PackagePartProvider
@@ -44,7 +44,7 @@ fun createContainerForReplWithJava(
): ContainerForReplWithJava = createContainer("ReplWithJava") {
useInstance(packagePartProvider)
configureModule(moduleContext, JvmPlatform, bindingTrace)
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, LookupTracker.DO_NOTHING, LanguageVersion.LATEST)
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, LookupTracker.DO_NOTHING, LanguageVersionSettingsImpl.DEFAULT)
useInstance(declarationProviderFactory)
@@ -20,7 +20,7 @@ import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analyzer.*
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.PackagePartProvider
@@ -91,7 +91,7 @@ object JvmAnalyzerFacade : AnalyzerFacade<JvmPlatformParameters>() {
moduleClassResolver,
targetEnvironment,
packagePartProvider,
LanguageVersion.LATEST // TODO: see KT-12410
LanguageVersionSettingsImpl.DEFAULT // TODO: see KT-12410
)
val resolveSession = container.get<ResolveSession>()
val javaDescriptorResolver = container.get<JavaDescriptorResolver>()
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.analyzer.AnalysisResult;
import org.jetbrains.kotlin.config.CommonConfigurationKeys;
import org.jetbrains.kotlin.config.CompilerConfiguration;
import org.jetbrains.kotlin.config.JVMConfigurationKeys;
import org.jetbrains.kotlin.config.LanguageVersion;
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl;
import org.jetbrains.kotlin.context.ContextKt;
import org.jetbrains.kotlin.context.ModuleContext;
import org.jetbrains.kotlin.context.MutableModuleContext;
@@ -102,7 +102,7 @@ public enum TopDownAnalyzerFacadeForJVM {
GlobalSearchScope.allScope(project),
lookupTracker,
packagePartProvider,
configuration.get(CommonConfigurationKeys.LANGUAGE_FEATURE_SETTINGS, LanguageVersion.LATEST)
configuration.get(CommonConfigurationKeys.LANGUAGE_FEATURE_SETTINGS, LanguageVersionSettingsImpl.DEFAULT)
);
List<PackageFragmentProvider> additionalProviders = new ArrayList<PackageFragmentProvider>();
@@ -36,14 +36,10 @@ enum class LanguageFeature(val sinceVersion: LanguageVersion) {
}
}
enum class LanguageVersion(val versionString: String): LanguageFeatureSettings {
enum class LanguageVersion(val versionString: String) {
KOTLIN_1_0("1.0"),
KOTLIN_1_1("1.1");
override fun supportsFeature(feature: LanguageFeature): Boolean {
return this.ordinal >= feature.sinceVersion.ordinal
}
companion object {
@JvmStatic
fun fromVersionString(str: String) = values().find { it.versionString == str }
@@ -56,3 +52,14 @@ enum class LanguageVersion(val versionString: String): LanguageFeatureSettings {
interface LanguageFeatureSettings {
fun supportsFeature(feature: LanguageFeature): Boolean
}
class LanguageVersionSettingsImpl(private val languageVersion: LanguageVersion) : LanguageFeatureSettings {
override fun supportsFeature(feature: LanguageFeature): Boolean {
return languageVersion.ordinal >= feature.sinceVersion.ordinal
}
companion object {
@JvmField
val DEFAULT = LanguageVersionSettingsImpl(LanguageVersion.LATEST)
}
}
@@ -20,7 +20,7 @@ import com.intellij.openapi.editor.impl.DocumentImpl
import com.intellij.openapi.util.io.FileUtil
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.ComponentProvider
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.descriptors.ClassDescriptor
@@ -62,7 +62,7 @@ abstract class AbstractDescriptorRendererTest : KotlinTestWithEnvironment() {
CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(),
JvmPlatform,
targetEnvironment,
LanguageVersion.LATEST
LanguageVersionSettingsImpl.DEFAULT
)
val resolveSession = container.get<ResolveSession>()
@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.tests.di
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.*
import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
@@ -34,7 +34,7 @@ fun createContainerForTests(project: Project, module: ModuleDescriptor): Contain
return ContainerForTests(createContainer("Tests") {
configureModule(ModuleContext(module, project), JvmPlatform)
useInstance(LookupTracker.DO_NOTHING)
useInstance(LanguageVersion.LATEST)
useInstance(LanguageVersionSettingsImpl.DEFAULT)
useImpl<ExpressionTypingServices>()
})
}
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.serialization.builtins
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.PackagePartProvider
import org.jetbrains.kotlin.descriptors.resolveClassByFqName
@@ -56,7 +56,7 @@ class AdditionalBuiltInsMembersSignatureListsTest : KotlinTestWithEnvironment()
val container = createContainerForTopDownAnalyzerForJvm(
moduleContext, CliLightClassGenerationSupport.CliBindingTrace(), providerFactory,
GlobalSearchScope.allScope(environment.project), LookupTracker.DO_NOTHING, PackagePartProvider.EMPTY,
LanguageVersion.LATEST
LanguageVersionSettingsImpl.DEFAULT
)
emptyModule.initialize(container.javaDescriptorResolver.packageFragmentProvider)
@@ -36,7 +36,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.asJava.DuplicateJvmSignatureUtilKt;
import org.jetbrains.kotlin.config.LanguageFeature;
import org.jetbrains.kotlin.config.LanguageFeatureSettings;
import org.jetbrains.kotlin.config.LanguageVersion;
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.diagnostics.*;
import org.jetbrains.kotlin.load.java.InternalFlexibleTypeTransformer;
@@ -194,7 +194,7 @@ public abstract class BaseDiagnosticsTest
if (enabled != null) {
return enabled;
}
return LanguageVersion.LATEST.supportsFeature(feature);
return LanguageVersionSettingsImpl.DEFAULT.supportsFeature(feature);
}
};
}
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.descriptors.PackagePartProvider
import org.jetbrains.kotlin.frontend.java.di.createContainerForTopDownAnalyzerForJvm
import org.jetbrains.kotlin.incremental.components.LookupTracker
@@ -61,7 +61,7 @@ abstract class AbstractLocalClassProtoTest : TestCaseWithTmpdir() {
val container = createContainerForTopDownAnalyzerForJvm(
moduleContext, CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(),
providerFactory, GlobalSearchScope.allScope(environment.project), LookupTracker.DO_NOTHING, PackagePartProvider.EMPTY,
LanguageVersion.LATEST
LanguageVersionSettingsImpl.DEFAULT
)
moduleContext.initializeModuleContents(container.javaDescriptorResolver.packageFragmentProvider)
@@ -20,7 +20,7 @@ import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.builtins.KotlinBuiltIns.*
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.PackagePartProvider
import org.jetbrains.kotlin.frontend.java.di.createContainerForTopDownAnalyzerForJvm
@@ -64,7 +64,7 @@ abstract class AbstractBuiltInsWithJDKMembersTest : KotlinTestWithEnvironment()
val container = createContainerForTopDownAnalyzerForJvm(
moduleContext, CliLightClassGenerationSupport.CliBindingTrace(), providerFactory,
GlobalSearchScope.allScope(environment.project), LookupTracker.DO_NOTHING, PackagePartProvider.EMPTY,
LanguageVersion.LATEST
LanguageVersionSettingsImpl.DEFAULT
)
emptyModule.initialize(container.javaDescriptorResolver.packageFragmentProvider)
@@ -21,7 +21,7 @@ import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.analyzer.AnalysisResult;
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
import org.jetbrains.kotlin.config.LanguageVersion;
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl;
import org.jetbrains.kotlin.context.ContextKt;
import org.jetbrains.kotlin.context.ModuleContext;
import org.jetbrains.kotlin.descriptors.*;
@@ -111,7 +111,7 @@ public class DefaultModalityModifiersTest extends KotlinTestWithEnvironment {
Collections.singleton(aClass.getContainingKtFile())),
new BindingTraceContext(),
TargetPlatform.Default.INSTANCE,
LanguageVersion.LATEST
LanguageVersionSettingsImpl.DEFAULT
);
return (ClassDescriptorWithResolutionScopes) resolveSession.getClassDescriptor(aClass, NoLookupLocation.FROM_TEST);
@@ -20,7 +20,7 @@ import com.intellij.openapi.roots.OrderRootType
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.util.PathUtil
import org.jetbrains.kotlin.analyzer.*
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.PackagePartProvider
@@ -57,7 +57,7 @@ object JsAnalyzerFacade : AnalyzerFacade<PlatformAnalysisParameters>() {
val container = createContainerForLazyResolve(
moduleContext, declarationProviderFactory, BindingTraceContext(), JsPlatform, targetEnvironment,
LanguageVersion.LATEST // TODO: see KT-12410
LanguageVersionSettingsImpl.DEFAULT // TODO: see KT-12410
)
var packageFragmentProvider = container.get<ResolveSession>().packageFragmentProvider
@@ -23,7 +23,7 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.analyzer.AnalysisResult
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.ComponentProvider
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.context.GlobalContext
@@ -173,7 +173,7 @@ private object KotlinResolveDataProvider {
trace,
targetPlatform,
componentProvider.get<BodyResolveCache>(),
LanguageVersion.LATEST // TODO: see KT-12410
LanguageVersionSettingsImpl.DEFAULT // TODO: see KT-12410
).get<LazyTopDownAnalyzerForTopLevel>()
lazyTopDownAnalyzer.analyzeDeclarations(
@@ -40,7 +40,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
import org.jetbrains.kotlin.builtins.DefaultBuiltIns;
import org.jetbrains.kotlin.config.LanguageVersion;
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl;
import org.jetbrains.kotlin.context.ContextKt;
import org.jetbrains.kotlin.context.MutableModuleContext;
import org.jetbrains.kotlin.descriptors.CallableDescriptor;
@@ -260,7 +260,7 @@ public class SourceNavigationHelper {
providerFactory,
new BindingTraceContext(),
platform,
LanguageVersion.LATEST // TODO: see KT-12410
LanguageVersionSettingsImpl.DEFAULT // TODO: see KT-12410
);
newModuleContext.initializeModuleContents(resolveSession.getPackageFragmentProvider());
@@ -23,7 +23,7 @@ import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.PsiModificationTracker
import com.intellij.util.containers.ContainerUtil
import org.jetbrains.kotlin.cfg.ControlFlowInformationProvider
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.context.SimpleGlobalContext
import org.jetbrains.kotlin.context.withModule
@@ -590,7 +590,7 @@ class ResolveElementCache(
trace,
targetPlatform,
statementFilter,
LanguageVersion.LATEST // TODO: see KT-12410
LanguageVersionSettingsImpl.DEFAULT // TODO: see KT-12410
).get<BodyResolver>()
}
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.js.analyze;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.config.CommonConfigurationKeys;
import org.jetbrains.kotlin.config.LanguageVersion;
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl;
import org.jetbrains.kotlin.context.ContextKt;
import org.jetbrains.kotlin.context.ModuleContext;
import org.jetbrains.kotlin.context.MutableModuleContext;
@@ -78,7 +78,7 @@ public final class TopDownAnalyzerFacadeForJS {
LazyTopDownAnalyzerForTopLevel analyzerForJs = InjectionKt.createTopDownAnalyzerForJs(
moduleContext, trace,
new FileBasedDeclarationProviderFactory(moduleContext.getStorageManager(), allFiles),
config.getConfiguration().get(CommonConfigurationKeys.LANGUAGE_FEATURE_SETTINGS, LanguageVersion.LATEST)
config.getConfiguration().get(CommonConfigurationKeys.LANGUAGE_FEATURE_SETTINGS, LanguageVersionSettingsImpl.DEFAULT)
);
analyzerForJs.analyzeFiles(TopDownAnalysisMode.TopLevelDeclarations, files, Collections.<PackageFragmentProvider>emptyList());
return JsAnalysisResult.success(trace, moduleContext.getModule());