Move testable IS_PRE_RELEASE flag to KotlinCompilerVersion
It'll be used in the JS back-end as well soon, so DeserializedDescriptorResolver is not the best place for it
This commit is contained in:
@@ -21,10 +21,7 @@ import org.jetbrains.kotlin.config.ApiVersion
|
|||||||
import org.jetbrains.kotlin.config.KotlinCompilerVersion
|
import org.jetbrains.kotlin.config.KotlinCompilerVersion
|
||||||
import org.jetbrains.kotlin.config.LanguageVersion
|
import org.jetbrains.kotlin.config.LanguageVersion
|
||||||
import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion
|
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.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]
|
* 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 =
|
fun JvmBuildMetaInfo(args: CommonCompilerArguments): JvmBuildMetaInfo =
|
||||||
JvmBuildMetaInfo(isEAP = DeserializedDescriptorResolver.IS_PRE_RELEASE,
|
JvmBuildMetaInfo(isEAP = KotlinCompilerVersion.isPreRelease(),
|
||||||
compilerBuildVersion = KotlinCompilerVersion.VERSION,
|
compilerBuildVersion = KotlinCompilerVersion.VERSION,
|
||||||
languageVersionString = args.languageVersion ?: LanguageVersion.LATEST.versionString,
|
languageVersionString = args.languageVersion ?: LanguageVersion.LATEST.versionString,
|
||||||
apiVersionString = args.apiVersion ?: ApiVersion.LATEST.versionString,
|
apiVersionString = args.apiVersion ?: ApiVersion.LATEST.versionString,
|
||||||
@@ -75,4 +72,4 @@ fun JvmBuildMetaInfo(args: CommonCompilerArguments): JvmBuildMetaInfo =
|
|||||||
metadataVersionPatch = JvmMetadataVersion.INSTANCE.patch,
|
metadataVersionPatch = JvmMetadataVersion.INSTANCE.patch,
|
||||||
bytecodeVersionMajor = JvmBytecodeBinaryVersion.INSTANCE.major,
|
bytecodeVersionMajor = JvmBytecodeBinaryVersion.INSTANCE.major,
|
||||||
bytecodeVersionMinor = JvmBytecodeBinaryVersion.INSTANCE.minor,
|
bytecodeVersionMinor = JvmBytecodeBinaryVersion.INSTANCE.minor,
|
||||||
bytecodeVersionPatch = JvmBytecodeBinaryVersion.INSTANCE.patch)
|
bytecodeVersionPatch = JvmBytecodeBinaryVersion.INSTANCE.patch)
|
||||||
|
|||||||
@@ -17,10 +17,10 @@
|
|||||||
package org.jetbrains.kotlin.codegen
|
package org.jetbrains.kotlin.codegen
|
||||||
|
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||||
|
import org.jetbrains.kotlin.config.KotlinCompilerVersion
|
||||||
import org.jetbrains.kotlin.config.LanguageVersion
|
import org.jetbrains.kotlin.config.LanguageVersion
|
||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||||
import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion
|
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.JvmMetadataVersion
|
||||||
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
|
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
|
||||||
import org.jetbrains.org.objectweb.asm.AnnotationVisitor
|
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.BYTECODE_VERSION_FIELD_NAME, JvmBytecodeBinaryVersion.INSTANCE.toArray())
|
||||||
av.visit(JvmAnnotationNames.KIND_FIELD_NAME, kind.id)
|
av.visit(JvmAnnotationNames.KIND_FIELD_NAME, kind.id)
|
||||||
var flags = extraFlags
|
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
|
flags = flags or JvmAnnotationNames.METADATA_PRE_RELEASE_FLAG
|
||||||
}
|
}
|
||||||
if (flags != 0) {
|
if (flags != 0) {
|
||||||
|
|||||||
+5
-6
@@ -39,11 +39,9 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
|||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
||||||
import org.jetbrains.kotlin.codegen.inline.InlineCodegenUtil;
|
import org.jetbrains.kotlin.codegen.inline.InlineCodegenUtil;
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
import org.jetbrains.kotlin.config.KotlinCompilerVersion;
|
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor;
|
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor;
|
||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
|
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.load.kotlin.JvmMetadataVersion;
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||||
@@ -69,6 +67,7 @@ import java.util.jar.JarFile;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.zip.ZipOutputStream;
|
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.resolve.DescriptorUtils.isObject;
|
||||||
import static org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator.validateAndCompareDescriptorWithFile;
|
import static org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator.validateAndCompareDescriptorWithFile;
|
||||||
|
|
||||||
@@ -284,20 +283,20 @@ public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir {
|
|||||||
|
|
||||||
File library;
|
File library;
|
||||||
try {
|
try {
|
||||||
DeserializedDescriptorResolver.Companion.setIS_PRE_RELEASE(true);
|
System.setProperty(TEST_IS_PRE_RELEASE_SYSTEM_PROPERTY, "true");
|
||||||
library = compileLibrary(libraryName);
|
library = compileLibrary(libraryName);
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
DeserializedDescriptorResolver.Companion.setIS_PRE_RELEASE(KotlinCompilerVersion.IS_PRE_RELEASE);
|
System.clearProperty(TEST_IS_PRE_RELEASE_SYSTEM_PROPERTY);
|
||||||
}
|
}
|
||||||
|
|
||||||
Pair<String, ExitCode> output;
|
Pair<String, ExitCode> output;
|
||||||
try {
|
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);
|
output = compileKotlin("source.kt", tmpdir, Arrays.asList(additionalOptions), library);
|
||||||
}
|
}
|
||||||
finally {
|
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));
|
KotlinTestUtils.assertEqualsToFile(new File(getTestDataDirectory(), "output.txt"), normalizeOutput(output));
|
||||||
|
|||||||
+1
-10
@@ -75,7 +75,7 @@ class DeserializedDescriptorResolver {
|
|||||||
|
|
||||||
private val KotlinJvmBinaryClass.isPreReleaseInvisible: Boolean
|
private val KotlinJvmBinaryClass.isPreReleaseInvisible: Boolean
|
||||||
get() = !JvmMetadataVersion.skipCheck &&
|
get() = !JvmMetadataVersion.skipCheck &&
|
||||||
!IS_PRE_RELEASE &&
|
!KotlinCompilerVersion.isPreRelease() &&
|
||||||
(classHeader.isPreRelease || classHeader.metadataVersion == KOTLIN_1_1_EAP_METADATA_VERSION)
|
(classHeader.isPreRelease || classHeader.metadataVersion == KOTLIN_1_1_EAP_METADATA_VERSION)
|
||||||
|
|
||||||
internal fun readData(kotlinClass: KotlinJvmBinaryClass, expectedKinds: Set<KotlinClassHeader.Kind>): Array<String>? {
|
internal fun readData(kotlinClass: KotlinJvmBinaryClass, expectedKinds: Set<KotlinClassHeader.Kind>): Array<String>? {
|
||||||
@@ -108,14 +108,5 @@ class DeserializedDescriptorResolver {
|
|||||||
setOf(KotlinClassHeader.Kind.FILE_FACADE, KotlinClassHeader.Kind.MULTIFILE_CLASS_PART)
|
setOf(KotlinClassHeader.Kind.FILE_FACADE, KotlinClassHeader.Kind.MULTIFILE_CLASS_PART)
|
||||||
|
|
||||||
private val KOTLIN_1_1_EAP_METADATA_VERSION = JvmMetadataVersion(1, 1, 2)
|
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"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,18 @@ public class KotlinCompilerVersion {
|
|||||||
// True if this compiler is of a non-stable (EAP or Beta) version.
|
// 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.
|
// Binaries produced by this compiler can not be loaded by release versions of the compiler.
|
||||||
// Change this value before and after every major release
|
// 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 {
|
static {
|
||||||
if (!VERSION.equals("@snapshot@") && !VERSION.contains("-") && IS_PRE_RELEASE) {
|
if (!VERSION.equals("@snapshot@") && !VERSION.contains("-") && IS_PRE_RELEASE) {
|
||||||
|
|||||||
@@ -49,11 +49,11 @@ import org.jetbrains.jps.model.module.JpsModule
|
|||||||
import org.jetbrains.jps.util.JpsPathUtil
|
import org.jetbrains.jps.util.JpsPathUtil
|
||||||
import org.jetbrains.kotlin.codegen.AsmUtil
|
import org.jetbrains.kotlin.codegen.AsmUtil
|
||||||
import org.jetbrains.kotlin.codegen.JvmCodegenUtil
|
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.CacheVersion
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.incremental.withIC
|
import org.jetbrains.kotlin.incremental.withIC
|
||||||
import org.jetbrains.kotlin.jps.build.KotlinJpsBuildTest.LibraryDependency.*
|
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.load.kotlin.PackagePartClassUtils
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
|
|||||||
Reference in New Issue
Block a user