Extract shouldWritePreReleaseFlag(), use in JS as well as JVM

Fix the difference in behavior between JS and JVM
This commit is contained in:
Alexander Udalov
2017-10-12 18:29:12 +02:00
parent 0510c553c3
commit 8b0b334601
6 changed files with 47 additions and 23 deletions
@@ -17,8 +17,7 @@
package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.config.KotlinCompilerVersion
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.config.shouldWritePreReleaseFlag
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion
import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion
@@ -37,9 +36,7 @@ fun writeKotlinMetadata(
av.visit(JvmAnnotationNames.BYTECODE_VERSION_FIELD_NAME, JvmBytecodeBinaryVersion.INSTANCE.toArray())
av.visit(JvmAnnotationNames.KIND_FIELD_NAME, kind.id)
var flags = extraFlags
val languageVersion = state.languageVersionSettings.languageVersion
if (KotlinCompilerVersion.isPreRelease() && languageVersion == LanguageVersion.LATEST_STABLE ||
!languageVersion.isStable) {
if (state.languageVersionSettings.shouldWritePreReleaseFlag()) {
flags = flags or JvmAnnotationNames.METADATA_PRE_RELEASE_FLAG
}
if (flags != 0) {
@@ -53,4 +50,4 @@ fun writeSyntheticClassMetadata(cb: ClassBuilder, state: GenerationState) {
writeKotlinMetadata(cb, state, KotlinClassHeader.Kind.SYNTHETIC_CLASS, 0) { _ ->
// Do nothing
}
}
}
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.addKotlinSourceRoots
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS
@@ -78,7 +79,9 @@ class KotlinJavascriptSerializerTest : TestCaseWithTmpdir() {
imported = listOf(),
data = analysisResult.moduleDescriptor
)
FileUtil.writeToFile(metaFile, KotlinJavascriptSerializationUtil.metadataAsString(analysisResult.bindingContext, description))
FileUtil.writeToFile(metaFile, KotlinJavascriptSerializationUtil.metadataAsString(
analysisResult.bindingContext, description, configuration.languageVersionSettings
))
}
finally {
Disposer.dispose(rootDisposable)
@@ -184,3 +184,9 @@ class LanguageVersionSettingsImpl @JvmOverloads constructor(
val DEFAULT = LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE)
}
}
fun LanguageVersionSettings.shouldWritePreReleaseFlag(): Boolean {
if (!languageVersion.isStable) return true
return KotlinCompilerVersion.isPreRelease() && languageVersion == LanguageVersion.LATEST_STABLE
}