From eae9923dbe66525d7f786d360749704251e71a03 Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Tue, 3 Oct 2017 15:02:54 +0300 Subject: [PATCH] Add allowKotlinPackage AnalysisFlag This flag is used internally by EffectSystem as a sign of compiling stdlib. If this flag is present, then EffectSystem will read contracts on functions and serialize them into metadata even if corresponding LanguageFeatures are turned off. This is done solely for building 1.2-runtime with contracts in it without the need to turn on LanguageFeatures manually. ====== This commit finishes a first series of commits related to effect system. After it, compiler is ready to work with contracts, but it is impossible to actually annotate anything, because there are no contracts DSL in stdlib yet. --- .../kotlin/cli/common/arguments/CommonCompilerArguments.kt | 1 + .../kotlin/contracts/parsing/ContractParsingServices.kt | 4 +++- .../jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt | 4 +++- compiler/util/src/org/jetbrains/kotlin/config/AnalysisFlag.kt | 3 +++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt index de31381bfe7..0b9859cba2c 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt @@ -110,6 +110,7 @@ abstract class CommonCompilerArguments : CommonToolArguments() { return HashMap, Any>().apply { put(AnalysisFlag.skipMetadataVersionCheck, skipMetadataVersionCheck) put(AnalysisFlag.multiPlatformDoNotCheckActual, noCheckActual) + put(AnalysisFlag.allowKotlinPackage, allowKotlinPackage) } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/ContractParsingServices.kt b/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/ContractParsingServices.kt index f1e5574f4e2..73627216969 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/ContractParsingServices.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/ContractParsingServices.kt @@ -44,7 +44,9 @@ class ContractParsingServices(val languageVersionSettings: LanguageVersionSettin val contractProvider = ownerDescriptor.getUserData(ContractProviderKey) ?: return val isFeatureTurnedOn = languageVersionSettings.supportsFeature(LanguageFeature.CallsInPlaceEffect) || - languageVersionSettings.supportsFeature(LanguageFeature.ReturnsEffect) + languageVersionSettings.supportsFeature(LanguageFeature.ReturnsEffect) || + // This condition is here for technical purposes of compiling 1.2-runtime with contracts + languageVersionSettings.getFlag(AnalysisFlag.Flags.allowKotlinPackage) val contractDescriptor = when { !isFeatureTurnedOn || !isContractDescriptionCallPreciseCheck(expression, trace.bindingContext) -> null diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt index f3d3ed06329..f66fc96c116 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt @@ -221,7 +221,9 @@ class FunctionDescriptorResolver( val emptyContract = LazyContractProvider.createInitialized(null) val isContractsEnabled = languageVersionSettings.supportsFeature(LanguageFeature.CallsInPlaceEffect) || - languageVersionSettings.supportsFeature(LanguageFeature.ReturnsEffect) + languageVersionSettings.supportsFeature(LanguageFeature.ReturnsEffect) || + // We need to enable contracts if we're compiling "kotlin"-package to be able to ship contracts in stdlib in 1.2 + languageVersionSettings.getFlag(AnalysisFlag.allowKotlinPackage) if (!isContractsEnabled || !contractParsingServices.fastCheckIfContractPresent(function)) return emptyContract diff --git a/compiler/util/src/org/jetbrains/kotlin/config/AnalysisFlag.kt b/compiler/util/src/org/jetbrains/kotlin/config/AnalysisFlag.kt index 223f60ea81f..e8a469113a9 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/AnalysisFlag.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/AnalysisFlag.kt @@ -53,5 +53,8 @@ class AnalysisFlag internal constructor( @JvmStatic val jsr305 by Flag.Jsr305StateWarnByDefault + + @JvmStatic + val allowKotlinPackage by Flag.Boolean } }