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.
This commit is contained in:
+1
@@ -110,6 +110,7 @@ abstract class CommonCompilerArguments : CommonToolArguments() {
|
||||
return HashMap<AnalysisFlag<*>, Any>().apply {
|
||||
put(AnalysisFlag.skipMetadataVersionCheck, skipMetadataVersionCheck)
|
||||
put(AnalysisFlag.multiPlatformDoNotCheckActual, noCheckActual)
|
||||
put(AnalysisFlag.allowKotlinPackage, allowKotlinPackage)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -53,5 +53,8 @@ class AnalysisFlag<out T> internal constructor(
|
||||
|
||||
@JvmStatic
|
||||
val jsr305 by Flag.Jsr305StateWarnByDefault
|
||||
|
||||
@JvmStatic
|
||||
val allowKotlinPackage by Flag.Boolean
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user