Make fast class files reading mode default in compiler tests

This makes sense because this mode is the default in the production
compiler. Forgetting to enable it where necessary led to different
bizarre test failures, see for example changes around 3fee84b966 and
KT-34826
This commit is contained in:
Alexander Udalov
2019-11-08 14:45:31 +01:00
parent dde2d08cfc
commit 57a674e9e6
57 changed files with 265 additions and 264 deletions
@@ -19,9 +19,10 @@ package org.jetbrains.kotlin.checkers
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
abstract class AbstractForeignAnnotationsNoAnnotationInClasspathWithFastClassReadingTest : AbstractForeignAnnotationsNoAnnotationInClasspathTest() {
abstract class AbstractForeignAnnotationsNoAnnotationInClasspathWithPsiClassReadingTest :
AbstractForeignAnnotationsNoAnnotationInClasspathTest() {
override fun performCustomConfiguration(configuration: CompilerConfiguration) {
super.performCustomConfiguration(configuration)
configuration.put(JVMConfigurationKeys.USE_FAST_CLASS_FILES_READING, true)
configuration.put(JVMConfigurationKeys.USE_PSI_CLASS_FILES_READING, true)
}
}
@@ -34,7 +34,8 @@ abstract class AbstractForeignJava8AnnotationsNoAnnotationInClasspathTest : Abst
}
}
abstract class AbstractForeignJava8AnnotationsNoAnnotationInClasspathWithFastClassReadingTest : AbstractForeignAnnotationsNoAnnotationInClasspathWithFastClassReadingTest() {
abstract class AbstractForeignJava8AnnotationsNoAnnotationInClasspathWithPsiClassReadingTest :
AbstractForeignAnnotationsNoAnnotationInClasspathWithPsiClassReadingTest() {
override val annotationsPath: String
get() = JAVA8_ANNOTATION_SOURCES_PATH
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime;
import org.jetbrains.kotlin.config.CompilerConfiguration;
import org.jetbrains.kotlin.config.JVMConfigurationKeys;
import org.jetbrains.kotlin.parsing.KotlinParserDefinition;
import org.jetbrains.kotlin.test.*;
import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase;
@@ -71,6 +72,10 @@ public abstract class KotlinMultiFileTestWithJava<M, F> extends KtUsefulTestCase
ContentRootsKt.addKotlinSourceRoot(configuration, kotlinSourceRoot.getPath());
}
// Currently, we're testing IDE behavior when generating the .txt files for comparison, but this can be changed.
// The main difference is the fact that the new class file reading implementation doesn't load parameter names from JDK classes.
configuration.put(JVMConfigurationKeys.USE_PSI_CLASS_FILES_READING, true);
performCustomConfiguration(configuration);
return KotlinCoreEnvironment.createForTests(getTestRootDisposable(), configuration, getEnvironmentConfigFiles());
}
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoot
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import java.io.File
abstract class AbstractBlackBoxAgainstJavaCodegenTest : AbstractBlackBoxCodegenTest() {
@@ -37,10 +36,5 @@ abstract class AbstractBlackBoxAgainstJavaCodegenTest : AbstractBlackBoxCodegenT
override fun updateConfiguration(configuration: CompilerConfiguration) {
configuration.addJvmClasspathRoot(javaClassesOutputDirectory)
if (configuration.get(JVMConfigurationKeys.USE_FAST_CLASS_FILES_READING) == null) {
// By default (unless disabled in the test with a directive), use the fast class reading mode
configuration.put(JVMConfigurationKeys.USE_FAST_CLASS_FILES_READING, true)
}
}
}
@@ -80,11 +80,9 @@ abstract class AbstractCompileJavaAgainstKotlinTest : TestCaseWithTmpdir() {
if (!compiledSuccessfully) return
val environment = KotlinCoreEnvironment.createForTests(
testRootDisposable,
newConfiguration(ConfigurationKind.ALL, TestJdkKind.FULL_JDK, getAnnotationsJar(), out),
EnvironmentConfigFiles.JVM_CONFIG_FILES
)
val configuration = newConfiguration(ConfigurationKind.ALL, TestJdkKind.FULL_JDK, getAnnotationsJar(), out)
configuration.put(JVMConfigurationKeys.USE_PSI_CLASS_FILES_READING, true)
val environment = KotlinCoreEnvironment.createForTests(testRootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
setupLanguageVersionSettingsForCompilerTests(ktFile.readText(), environment)
val analysisResult = JvmResolveUtil.analyze(environment)
@@ -180,7 +180,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir {
}
}
protected boolean useFastClassFilesReading() {
protected boolean usePsiClassFilesReading() {
return false;
}
@@ -310,7 +310,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir {
) throws IOException {
compileJavaWithAnnotationsJar(javaFiles, outDir);
return loadTestPackageAndBindingContextFromJavaRoot(outDir, myTestRootDisposable, getJdkKind(), configurationKind, true,
useFastClassFilesReading(), useJavacWrapper(), null,
usePsiClassFilesReading(), useJavacWrapper(), null,
getExtraClasspath(), this::configureEnvironment);
}
@@ -19,11 +19,11 @@ package org.jetbrains.kotlin.jvm.compiler
import org.jetbrains.kotlin.test.KotlinTestUtils
import java.io.File
abstract class AbstractLoadJavaWithFastClassReadingTest : AbstractLoadJavaTest() {
override fun useFastClassFilesReading() = true
abstract class AbstractLoadJavaWithPsiClassReadingTest : AbstractLoadJavaTest() {
override fun usePsiClassFilesReading() = true
override fun getExpectedFile(expectedFileName: String): File {
val differentResultFile = KotlinTestUtils.replaceExtension(File(expectedFileName), "fast.txt")
val differentResultFile = KotlinTestUtils.replaceExtension(File(expectedFileName), "psi.txt")
if (differentResultFile.exists()) return differentResultFile
return super.getExpectedFile(expectedFileName)
}
@@ -78,7 +78,7 @@ public class LoadDescriptorUtil {
@NotNull TestJdkKind testJdkKind,
@NotNull ConfigurationKind configurationKind,
boolean isBinaryRoot,
boolean useFastClassReading,
boolean usePsiClassReading,
boolean useJavacWrapper,
@Nullable LanguageVersionSettings explicitLanguageVersionSettings
) {
@@ -88,7 +88,7 @@ public class LoadDescriptorUtil {
testJdkKind,
configurationKind,
isBinaryRoot,
useFastClassReading,
usePsiClassReading,
useJavacWrapper,
explicitLanguageVersionSettings,
Collections.emptyList(),
@@ -103,7 +103,7 @@ public class LoadDescriptorUtil {
@NotNull TestJdkKind testJdkKind,
@NotNull ConfigurationKind configurationKind,
boolean isBinaryRoot,
boolean useFastClassReading,
boolean usePsiClassReading,
boolean useJavacWrapper,
@Nullable LanguageVersionSettings explicitLanguageVersionSettings,
@NotNull List<File> additionalClasspath,
@@ -125,7 +125,7 @@ public class LoadDescriptorUtil {
}
CompilerConfiguration configuration =
KotlinTestUtils.newConfiguration(configurationKind, testJdkKind, javaBinaryRoots, javaSourceRoots);
configuration.put(JVMConfigurationKeys.USE_FAST_CLASS_FILES_READING, useFastClassReading);
configuration.put(JVMConfigurationKeys.USE_PSI_CLASS_FILES_READING, usePsiClassReading);
configuration.put(JVMConfigurationKeys.USE_JAVAC, useJavacWrapper);
if (explicitLanguageVersionSettings != null) {
configuration.put(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, explicitLanguageVersionSettings);
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.jvm.compiler.ir
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.jvm.compiler.AbstractLoadJavaWithFastClassReadingTest
import org.jetbrains.kotlin.jvm.compiler.AbstractLoadJavaWithPsiClassReadingTest
abstract class AbstractIrLoadJavaTest : AbstractLoadJavaWithFastClassReadingTest() {
abstract class AbstractIrLoadJavaTest : AbstractLoadJavaWithPsiClassReadingTest() {
override fun updateConfiguration(configuration: CompilerConfiguration) = configuration.put(JVMConfigurationKeys.IR, true)
}
@@ -7,12 +7,12 @@ package org.jetbrains.kotlin.resolve;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
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.JVMConfigurationKeys;
import org.jetbrains.kotlin.psi.KtFile;
import org.jetbrains.kotlin.test.ConfigurationKind;
import org.jetbrains.kotlin.test.KotlinTestUtils;
import org.jetbrains.kotlin.test.KotlinTestWithEnvironment;
import org.jetbrains.kotlin.test.TestFiles;
import org.jetbrains.kotlin.test.*;
import java.io.File;
import java.util.List;
@@ -23,7 +23,9 @@ public abstract class ExtensibleResolveTestCase extends KotlinTestWithEnvironmen
@Override
protected KotlinCoreEnvironment createEnvironment() {
return createEnvironmentWithMockJdk(ConfigurationKind.JDK_ONLY);
CompilerConfiguration configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.JDK_ONLY, TestJdkKind.MOCK_JDK);
configuration.put(JVMConfigurationKeys.USE_PSI_CLASS_FILES_READING, true);
return KotlinCoreEnvironment.createForTests(getTestRootDisposable(), configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES);
}
@Override