diff --git a/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt b/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt index 9cc42a6db32..2a9d3f53840 100644 --- a/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt +++ b/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt @@ -21,10 +21,7 @@ import org.jetbrains.kotlin.config.ApiVersion import org.jetbrains.kotlin.config.KotlinCompilerVersion import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion -import org.jetbrains.kotlin.load.kotlin.DeserializedDescriptorResolver import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion -import org.jetbrains.kotlin.build.deserializeFromPlainText -import org.jetbrains.kotlin.build.serializeToPlainText /** * If you want to add a new field, check its type is supported by [serializeToPlainText], [deserializeFromPlainText] @@ -62,7 +59,7 @@ data class JvmBuildMetaInfo( } fun JvmBuildMetaInfo(args: CommonCompilerArguments): JvmBuildMetaInfo = - JvmBuildMetaInfo(isEAP = DeserializedDescriptorResolver.IS_PRE_RELEASE, + JvmBuildMetaInfo(isEAP = KotlinCompilerVersion.isPreRelease(), compilerBuildVersion = KotlinCompilerVersion.VERSION, languageVersionString = args.languageVersion ?: LanguageVersion.LATEST.versionString, apiVersionString = args.apiVersion ?: ApiVersion.LATEST.versionString, @@ -75,4 +72,4 @@ fun JvmBuildMetaInfo(args: CommonCompilerArguments): JvmBuildMetaInfo = metadataVersionPatch = JvmMetadataVersion.INSTANCE.patch, bytecodeVersionMajor = JvmBytecodeBinaryVersion.INSTANCE.major, bytecodeVersionMinor = JvmBytecodeBinaryVersion.INSTANCE.minor, - bytecodeVersionPatch = JvmBytecodeBinaryVersion.INSTANCE.patch) \ No newline at end of file + bytecodeVersionPatch = JvmBytecodeBinaryVersion.INSTANCE.patch) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/writeAnnotationUtil.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/writeAnnotationUtil.kt index 0bcd560f941..d0b1c01c10c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/writeAnnotationUtil.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/writeAnnotationUtil.kt @@ -17,10 +17,10 @@ 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.load.java.JvmAnnotationNames import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion -import org.jetbrains.kotlin.load.kotlin.DeserializedDescriptorResolver import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader import org.jetbrains.org.objectweb.asm.AnnotationVisitor @@ -37,7 +37,7 @@ fun writeKotlinMetadata( av.visit(JvmAnnotationNames.BYTECODE_VERSION_FIELD_NAME, JvmBytecodeBinaryVersion.INSTANCE.toArray()) av.visit(JvmAnnotationNames.KIND_FIELD_NAME, kind.id) var flags = extraFlags - if (DeserializedDescriptorResolver.IS_PRE_RELEASE && state.languageVersionSettings.languageVersion == LanguageVersion.LATEST) { + if (KotlinCompilerVersion.isPreRelease() && state.languageVersionSettings.languageVersion == LanguageVersion.LATEST) { flags = flags or JvmAnnotationNames.METADATA_PRE_RELEASE_FLAG } if (flags != 0) { diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java index b6e0863f284..8364ca3dfe9 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java @@ -39,11 +39,9 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles; import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment; import org.jetbrains.kotlin.codegen.inline.InlineCodegenUtil; import org.jetbrains.kotlin.config.CompilerConfiguration; -import org.jetbrains.kotlin.config.KotlinCompilerVersion; import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; import org.jetbrains.kotlin.descriptors.PackageViewDescriptor; import org.jetbrains.kotlin.load.java.JvmAnnotationNames; -import org.jetbrains.kotlin.load.kotlin.DeserializedDescriptorResolver; import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion; import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.DescriptorUtils; @@ -69,6 +67,7 @@ import java.util.jar.JarFile; import java.util.regex.Pattern; import java.util.zip.ZipOutputStream; +import static org.jetbrains.kotlin.config.KotlinCompilerVersion.TEST_IS_PRE_RELEASE_SYSTEM_PROPERTY; import static org.jetbrains.kotlin.resolve.DescriptorUtils.isObject; import static org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator.validateAndCompareDescriptorWithFile; @@ -284,20 +283,20 @@ public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir { File library; try { - DeserializedDescriptorResolver.Companion.setIS_PRE_RELEASE(true); + System.setProperty(TEST_IS_PRE_RELEASE_SYSTEM_PROPERTY, "true"); library = compileLibrary(libraryName); } finally { - DeserializedDescriptorResolver.Companion.setIS_PRE_RELEASE(KotlinCompilerVersion.IS_PRE_RELEASE); + System.clearProperty(TEST_IS_PRE_RELEASE_SYSTEM_PROPERTY); } Pair output; try { - DeserializedDescriptorResolver.Companion.setIS_PRE_RELEASE(false); + System.setProperty(TEST_IS_PRE_RELEASE_SYSTEM_PROPERTY, "false"); output = compileKotlin("source.kt", tmpdir, Arrays.asList(additionalOptions), library); } finally { - DeserializedDescriptorResolver.Companion.setIS_PRE_RELEASE(KotlinCompilerVersion.IS_PRE_RELEASE); + System.clearProperty(TEST_IS_PRE_RELEASE_SYSTEM_PROPERTY); } KotlinTestUtils.assertEqualsToFile(new File(getTestDataDirectory(), "output.txt"), normalizeOutput(output)); diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.kt index b651351bf1e..cdb05acd3ce 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.kt @@ -75,7 +75,7 @@ class DeserializedDescriptorResolver { private val KotlinJvmBinaryClass.isPreReleaseInvisible: Boolean get() = !JvmMetadataVersion.skipCheck && - !IS_PRE_RELEASE && + !KotlinCompilerVersion.isPreRelease() && (classHeader.isPreRelease || classHeader.metadataVersion == KOTLIN_1_1_EAP_METADATA_VERSION) internal fun readData(kotlinClass: KotlinJvmBinaryClass, expectedKinds: Set): Array? { @@ -108,14 +108,5 @@ class DeserializedDescriptorResolver { setOf(KotlinClassHeader.Kind.FILE_FACADE, KotlinClassHeader.Kind.MULTIFILE_CLASS_PART) private val KOTLIN_1_1_EAP_METADATA_VERSION = JvmMetadataVersion(1, 1, 2) - - var IS_PRE_RELEASE = KotlinCompilerVersion.IS_PRE_RELEASE - get() { - val testOverrideValue = System.getProperty(TEST_IS_PRE_RELEASE_SYSTEM_PROPERTY) - return testOverrideValue?.toBoolean() ?: field - } - @Deprecated("Should only be used in tests") set - - const val TEST_IS_PRE_RELEASE_SYSTEM_PROPERTY = "kotlin.test.is.pre.release" } } diff --git a/core/util.runtime/src/org/jetbrains/kotlin/config/KotlinCompilerVersion.java b/core/util.runtime/src/org/jetbrains/kotlin/config/KotlinCompilerVersion.java index 37f39656d49..97123d1fe7f 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/config/KotlinCompilerVersion.java +++ b/core/util.runtime/src/org/jetbrains/kotlin/config/KotlinCompilerVersion.java @@ -24,7 +24,18 @@ public class KotlinCompilerVersion { // True if this compiler is of a non-stable (EAP or Beta) version. // Binaries produced by this compiler can not be loaded by release versions of the compiler. // Change this value before and after every major release - public static final boolean IS_PRE_RELEASE = false; + private static final boolean IS_PRE_RELEASE = false; + + public static final String TEST_IS_PRE_RELEASE_SYSTEM_PROPERTY = "kotlin.test.is.pre.release"; + + public static boolean isPreRelease() { + String overridden = System.getProperty(TEST_IS_PRE_RELEASE_SYSTEM_PROPERTY); + if (overridden != null) { + return Boolean.parseBoolean(overridden); + } + + return IS_PRE_RELEASE; + } static { if (!VERSION.equals("@snapshot@") && !VERSION.contains("-") && IS_PRE_RELEASE) { diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt index 3fbf62c0c2c..2fb9a5366eb 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt @@ -49,11 +49,11 @@ import org.jetbrains.jps.model.module.JpsModule import org.jetbrains.jps.util.JpsPathUtil import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.codegen.JvmCodegenUtil +import org.jetbrains.kotlin.config.KotlinCompilerVersion.TEST_IS_PRE_RELEASE_SYSTEM_PROPERTY import org.jetbrains.kotlin.incremental.CacheVersion import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.withIC import org.jetbrains.kotlin.jps.build.KotlinJpsBuildTest.LibraryDependency.* -import org.jetbrains.kotlin.load.kotlin.DeserializedDescriptorResolver.Companion.TEST_IS_PRE_RELEASE_SYSTEM_PROPERTY import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.test.KotlinTestUtils