Do not support LANGUAGE_VERSION directive in codegen tests

Test data of crossinline_1_2.txt has changed because now we do not
automatically enable 1.2 (with _all_ of its features) when we're
executing a common coroutines test with old coroutines; and so the
NewCapturedReceiverFieldNamingConvention language feature (which is
introduced in 1.3) is now enabled in this test
This commit is contained in:
Alexander Udalov
2018-12-17 17:56:11 +01:00
parent 77c87fa6c9
commit 00caa23307
2 changed files with 23 additions and 29 deletions
@@ -36,7 +36,7 @@ public final class CrossinlineKt$box$1$doResume$$inlined$filter$1$2$1 {
@kotlin.Metadata @kotlin.Metadata
public final class CrossinlineKt$box$1$doResume$$inlined$filter$1$2 { public final class CrossinlineKt$box$1$doResume$$inlined$filter$1$2 {
synthetic final field receiver$0$inlined: Sink synthetic final field $this_source$inlined: Sink
synthetic final field this$0: CrossinlineKt$box$1$doResume$$inlined$filter$1 synthetic final field this$0: CrossinlineKt$box$1$doResume$$inlined$filter$1
inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$2 inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$2
inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$2$1 inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$2$1
@@ -47,7 +47,7 @@ public final class CrossinlineKt$box$1$doResume$$inlined$filter$1$2 {
@kotlin.Metadata @kotlin.Metadata
public final class CrossinlineKt$box$1$doResume$$inlined$filter$1 { public final class CrossinlineKt$box$1$doResume$$inlined$filter$1 {
synthetic final field receiver$0$inlined: SourceCrossinline synthetic final field $this_filter$inlined: SourceCrossinline
inner class CrossinlineKt$box$1$doResume$$inlined$filter$1 inner class CrossinlineKt$box$1$doResume$$inlined$filter$1
inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$1 inner class CrossinlineKt$box$1$doResume$$inlined$filter$1$1
public method <init>(p0: SourceCrossinline): void public method <init>(p0: SourceCrossinline): void
@@ -102,7 +102,7 @@ public final class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1$1 {
@kotlin.Metadata @kotlin.Metadata
public final class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1 { public final class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1 {
synthetic final field receiver$0$inlined: Sink synthetic final field $this_source$inlined: Sink
synthetic final field this$0: CrossinlineKt$box$1$filter$$inlined$source$1 synthetic final field this$0: CrossinlineKt$box$1$filter$$inlined$source$1
inner class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1
inner class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1$1
@@ -114,7 +114,7 @@ public final class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1 {
@kotlin.Metadata @kotlin.Metadata
public final class CrossinlineKt$box$1$filter$$inlined$source$1 { public final class CrossinlineKt$box$1$filter$$inlined$source$1 {
synthetic final field $predicate$inlined: kotlin.jvm.functions.Function1 synthetic final field $predicate$inlined: kotlin.jvm.functions.Function1
synthetic final field receiver$0$inlined: SourceCrossinline synthetic final field $this_filter$inlined: SourceCrossinline
inner class CrossinlineKt$box$1$filter$$inlined$source$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1
inner class CrossinlineKt$box$1$filter$$inlined$source$1$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1$1
public method <init>(p0: SourceCrossinline, p1: kotlin.jvm.functions.Function1): void public method <init>(p0: SourceCrossinline, p1: kotlin.jvm.functions.Function1): void
@@ -221,7 +221,7 @@ public final class CrossinlineKt$filter$$inlined$source$1$lambda$1$1 {
@kotlin.Metadata @kotlin.Metadata
public final class CrossinlineKt$filter$$inlined$source$1$lambda$1 { public final class CrossinlineKt$filter$$inlined$source$1$lambda$1 {
synthetic final field receiver$0$inlined: Sink synthetic final field $this_source$inlined: Sink
synthetic final field this$0: CrossinlineKt$filter$$inlined$source$1 synthetic final field this$0: CrossinlineKt$filter$$inlined$source$1
inner class CrossinlineKt$filter$$inlined$source$1$lambda$1 inner class CrossinlineKt$filter$$inlined$source$1$lambda$1
inner class CrossinlineKt$filter$$inlined$source$1$lambda$1$1 inner class CrossinlineKt$filter$$inlined$source$1$lambda$1$1
@@ -233,7 +233,7 @@ public final class CrossinlineKt$filter$$inlined$source$1$lambda$1 {
@kotlin.Metadata @kotlin.Metadata
public final class CrossinlineKt$filter$$inlined$source$1 { public final class CrossinlineKt$filter$$inlined$source$1 {
synthetic final field $predicate$inlined: kotlin.jvm.functions.Function1 synthetic final field $predicate$inlined: kotlin.jvm.functions.Function1
synthetic final field receiver$0$inlined: SourceCrossinline synthetic final field $this_filter$inlined: SourceCrossinline
inner class CrossinlineKt$filter$$inlined$source$1 inner class CrossinlineKt$filter$$inlined$source$1
inner class CrossinlineKt$filter$$inlined$source$1$1 inner class CrossinlineKt$filter$$inlined$source$1$1
public method <init>(p0: SourceCrossinline, p1: kotlin.jvm.functions.Function1): void public method <init>(p0: SourceCrossinline, p1: kotlin.jvm.functions.Function1): void
@@ -167,7 +167,7 @@ public abstract class CodegenTestCase extends KtUsefulTestCase {
@NotNull String coroutinesPackage @NotNull String coroutinesPackage
) { ) {
LanguageVersionSettings explicitLanguageVersionSettings = null; LanguageVersionSettings explicitLanguageVersionSettings = null;
LanguageVersion explicitLanguageVersion = null; boolean disableReleaseCoroutines = false;
List<String> kotlinConfigurationFlags = new ArrayList<>(0); List<String> kotlinConfigurationFlags = new ArrayList<>(0);
for (TestFile testFile : testFilesWithConfigurationDirectives) { for (TestFile testFile : testFilesWithConfigurationDirectives) {
@@ -183,17 +183,18 @@ public abstract class CodegenTestCase extends KtUsefulTestCase {
String version = InTextDirectivesUtils.findStringWithPrefixes(testFile.content, "// LANGUAGE_VERSION:"); String version = InTextDirectivesUtils.findStringWithPrefixes(testFile.content, "// LANGUAGE_VERSION:");
if (version != null) { if (version != null) {
assertDirectivesToNull(explicitLanguageVersionSettings, explicitLanguageVersion); throw new AssertionError(
explicitLanguageVersion = LanguageVersion.fromVersionString(version); "Do not use LANGUAGE_VERSION directive in compiler tests because it's prone to limiting the test\n" +
"to a specific language version, which will become obsolete at some point and the test won't check\n" +
"things like feature intersection with newer releases. Use `// !LANGUAGE: [+-]FeatureName` directive instead,\n" +
"where FeatureName is an entry of the enum `LanguageFeature`\n"
);
} }
if (!InTextDirectivesUtils.findLinesWithPrefixesRemoved(testFile.content, "// COMMON_COROUTINES_TEST").isEmpty()) { if (!InTextDirectivesUtils.findLinesWithPrefixesRemoved(testFile.content, "// COMMON_COROUTINES_TEST").isEmpty()) {
assert(!testFile.content.contains("COROUTINES_PACKAGE")) : "Must replace COROUTINES_PACKAGE prior to tests compilation"; assert !testFile.content.contains("COROUTINES_PACKAGE") : "Must replace COROUTINES_PACKAGE prior to tests compilation";
if (!coroutinesPackage.isEmpty()) { if (coroutinesPackage.equals("kotlin.coroutines.experimental")) {
if (coroutinesPackage.equals("kotlin.coroutines.experimental")) { disableReleaseCoroutines = true;
explicitLanguageVersion = LanguageVersion.KOTLIN_1_2;
} else {
explicitLanguageVersion = LanguageVersion.KOTLIN_1_3;
}
} }
} }
@@ -201,7 +202,7 @@ public abstract class CodegenTestCase extends KtUsefulTestCase {
LanguageVersionSettings fileLanguageVersionSettings = parseLanguageVersionSettings(directives); LanguageVersionSettings fileLanguageVersionSettings = parseLanguageVersionSettings(directives);
if (fileLanguageVersionSettings != null) { if (fileLanguageVersionSettings != null) {
assertDirectivesToNull(explicitLanguageVersionSettings, null); assert explicitLanguageVersionSettings == null : "Should not specify !LANGUAGE directive twice";
explicitLanguageVersionSettings = fileLanguageVersionSettings; explicitLanguageVersionSettings = fileLanguageVersionSettings;
} }
} }
@@ -209,26 +210,19 @@ public abstract class CodegenTestCase extends KtUsefulTestCase {
if (explicitLanguageVersionSettings != null) { if (explicitLanguageVersionSettings != null) {
CommonConfigurationKeysKt.setLanguageVersionSettings(configuration, explicitLanguageVersionSettings); CommonConfigurationKeysKt.setLanguageVersionSettings(configuration, explicitLanguageVersionSettings);
} }
else if (explicitLanguageVersion != null) { else if (disableReleaseCoroutines) {
CompilerTestLanguageVersionSettings compilerLanguageVersionSettings = new CompilerTestLanguageVersionSettings( CompilerTestLanguageVersionSettings compilerLanguageVersionSettings = new CompilerTestLanguageVersionSettings(
Collections.emptyMap(), Collections.singletonMap(LanguageFeature.ReleaseCoroutines, LanguageFeature.State.DISABLED),
ApiVersion.createByLanguageVersion(explicitLanguageVersion), ApiVersion.LATEST_STABLE,
explicitLanguageVersion, LanguageVersion.LATEST_STABLE,
Collections.emptyMap() Collections.emptyMap()
); );
CommonConfigurationKeysKt.setLanguageVersionSettings( CommonConfigurationKeysKt.setLanguageVersionSettings(configuration, compilerLanguageVersionSettings);
configuration,
compilerLanguageVersionSettings
);
} }
updateConfigurationWithFlags(configuration, kotlinConfigurationFlags); updateConfigurationWithFlags(configuration, kotlinConfigurationFlags);
} }
private static void assertDirectivesToNull(@Nullable LanguageVersionSettings settings, @Nullable LanguageVersion version) {
assert settings == null && version == null : "Should not specify LANGUAGE_VERSION twice or together with !LANGUAGE directive";
}
private static final Map<String, Class<?>> FLAG_NAMESPACE_TO_CLASS = ImmutableMap.of( private static final Map<String, Class<?>> FLAG_NAMESPACE_TO_CLASS = ImmutableMap.of(
"CLI", CLIConfigurationKeys.class, "CLI", CLIConfigurationKeys.class,
"JVM", JVMConfigurationKeys.class "JVM", JVMConfigurationKeys.class