Refactor/simplify KotlinMultiFileTestWithJava and subclasses
This commit is contained in:
committed by
Alexander Udalov
parent
06af22b2c1
commit
5f7bc601a8
+10
-17
@@ -16,27 +16,20 @@
|
||||
|
||||
package org.jetbrains.kotlin.checkers;
|
||||
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||
import org.jetbrains.kotlin.test.TestJdkKind;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
|
||||
public abstract class AbstractDiagnosticsWithFullJdkTest extends AbstractDiagnosticsTest {
|
||||
@NotNull
|
||||
@Override
|
||||
protected KotlinCoreEnvironment createEnvironment() {
|
||||
File javaFilesDir = createJavaFilesDir();
|
||||
return KotlinCoreEnvironment.createForTests(getTestRootDisposable(),
|
||||
KotlinTestUtils.compilerConfigurationForTests(
|
||||
ConfigurationKind.ALL,
|
||||
TestJdkKind.FULL_JDK,
|
||||
Arrays.asList(KotlinTestUtils.getAnnotationsJar()),
|
||||
Arrays.asList(javaFilesDir)
|
||||
),
|
||||
EnvironmentConfigFiles.JVM_CONFIG_FILES);
|
||||
protected ConfigurationKind getConfigurationKind() {
|
||||
return ConfigurationKind.ALL;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected TestJdkKind getTestJdkKind() {
|
||||
return TestJdkKind.FULL_JDK;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,34 +22,25 @@ import kotlin.jvm.functions.Function1;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.checkers.KotlinMultiFileTestWithJava;
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||
import org.jetbrains.kotlin.test.TestJdkKind;
|
||||
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class AbstractCompilerLightClassTest extends KotlinMultiFileTestWithJava<Void, Void> {
|
||||
@Override
|
||||
@NotNull
|
||||
protected CompilerConfiguration createCompilerConfiguration(File javaFilesDir) {
|
||||
return KotlinTestUtils.compilerConfigurationForTests(
|
||||
ConfigurationKind.ALL,
|
||||
TestJdkKind.MOCK_JDK,
|
||||
Arrays.asList(KotlinTestUtils.getAnnotationsJar()),
|
||||
Arrays.asList(javaFilesDir)
|
||||
);
|
||||
@Override
|
||||
protected ConfigurationKind getConfigurationKind() {
|
||||
return ConfigurationKind.ALL;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected File getKotlinSourceRoot() {
|
||||
return createTmpDir("kotlin-src");
|
||||
protected boolean isKotlinSourceRootNeeded() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+3
-6
@@ -16,11 +16,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.checkers;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
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.context.ModuleContext;
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
|
||||
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS;
|
||||
@@ -55,8 +52,8 @@ public abstract class AbstractDiagnosticsTestWithJsStdLib extends AbstractDiagno
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
protected KotlinCoreEnvironment createEnvironment(@NotNull Disposable disposable, @NotNull CompilerConfiguration configuration) {
|
||||
return KotlinCoreEnvironment.createForTests(disposable, configuration, EnvironmentConfigFiles.JS_CONFIG_FILES);
|
||||
protected List<String> getEnvironmentConfigFiles() {
|
||||
return EnvironmentConfigFiles.JS_CONFIG_FILES;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -84,7 +81,7 @@ public abstract class AbstractDiagnosticsTestWithJsStdLib extends AbstractDiagno
|
||||
protected ModuleDescriptorImpl createSealedModule(@NotNull StorageManager storageManager) {
|
||||
ModuleDescriptorImpl module = createModule("<kotlin-js-test-module>", storageManager);
|
||||
|
||||
List<ModuleDescriptorImpl> dependencies = new ArrayList<ModuleDescriptorImpl>();;
|
||||
List<ModuleDescriptorImpl> dependencies = new ArrayList<ModuleDescriptorImpl>();
|
||||
dependencies.add(module);
|
||||
|
||||
for (ModuleDescriptorImpl moduleDescriptor : config.getModuleDescriptors()) {
|
||||
|
||||
+4
-17
@@ -16,26 +16,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.checkers;
|
||||
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||
import org.jetbrains.kotlin.test.TestJdkKind;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
|
||||
public abstract class AbstractDiagnosticsTestWithStdLib extends AbstractDiagnosticsTest {
|
||||
@NotNull
|
||||
@Override
|
||||
protected KotlinCoreEnvironment createEnvironment() {
|
||||
File javaFilesDir = createJavaFilesDir();
|
||||
return KotlinCoreEnvironment.createForTests(getTestRootDisposable(),
|
||||
KotlinTestUtils.compilerConfigurationForTests(
|
||||
ConfigurationKind.ALL,
|
||||
TestJdkKind.MOCK_JDK,
|
||||
Arrays.asList(KotlinTestUtils.getAnnotationsJar()),
|
||||
Arrays.asList(javaFilesDir)
|
||||
),
|
||||
EnvironmentConfigFiles.JVM_CONFIG_FILES);
|
||||
protected ConfigurationKind getConfigurationKind() {
|
||||
return ConfigurationKind.ALL;
|
||||
}
|
||||
}
|
||||
|
||||
+10
-17
@@ -16,27 +16,20 @@
|
||||
|
||||
package org.jetbrains.kotlin.checkers;
|
||||
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||
import org.jetbrains.kotlin.test.TestJdkKind;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
|
||||
public abstract class AbstractDiagnosticsWithFullJdkTest extends AbstractDiagnosticsTest {
|
||||
@NotNull
|
||||
@Override
|
||||
protected KotlinCoreEnvironment createEnvironment() {
|
||||
File javaFilesDir = createJavaFilesDir();
|
||||
return KotlinCoreEnvironment.createForTests(getTestRootDisposable(),
|
||||
KotlinTestUtils.compilerConfigurationForTests(
|
||||
ConfigurationKind.ALL,
|
||||
TestJdkKind.FULL_JDK,
|
||||
Arrays.asList(KotlinTestUtils.getAnnotationsJar()),
|
||||
Arrays.asList(javaFilesDir)
|
||||
),
|
||||
EnvironmentConfigFiles.JVM_CONFIG_FILES);
|
||||
protected ConfigurationKind getConfigurationKind() {
|
||||
return ConfigurationKind.ALL;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected TestJdkKind getTestJdkKind() {
|
||||
return TestJdkKind.FULL_JDK;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,26 +16,14 @@
|
||||
|
||||
package org.jetbrains.kotlin.checkers
|
||||
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.test.MockLibraryUtil
|
||||
import org.jetbrains.kotlin.test.TestJdkKind
|
||||
import java.io.File
|
||||
|
||||
|
||||
abstract class AbstractForeignAnnotationsTest : AbstractDiagnosticsTest() {
|
||||
lateinit var annotationsFile: File
|
||||
|
||||
override fun createCompilerConfiguration(javaFilesDir: File?): CompilerConfiguration {
|
||||
val annotationsFile = MockLibraryUtil.compileLibraryToJar(
|
||||
override fun getExtraClasspath(): List<File> {
|
||||
return listOf(MockLibraryUtil.compileLibraryToJar(
|
||||
"compiler/testData/foreignAnnotations/annotations",
|
||||
"foreign-annotations", /* addSources = */false, /* allowKotlinPackage =*/ false)
|
||||
|
||||
return KotlinTestUtils.compilerConfigurationForTests(
|
||||
ConfigurationKind.JDK_ONLY,
|
||||
TestJdkKind.MOCK_JDK,
|
||||
listOf(KotlinTestUtils.getAnnotationsJar(), annotationsFile),
|
||||
listOf(javaFilesDir))
|
||||
"foreign-annotations", /* addSources = */false, /* allowKotlinPackage = */ false
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.checkers;
|
||||
|
||||
import com.google.common.io.Files;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import kotlin.collections.CollectionsKt;
|
||||
import kotlin.io.FilesKt;
|
||||
import kotlin.text.Charsets;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
||||
@@ -31,17 +31,17 @@ import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||
import org.jetbrains.kotlin.test.KotlinLiteFixture;
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||
import org.jetbrains.kotlin.test.TestJdkKind;
|
||||
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class KotlinMultiFileTestWithJava<M, F> extends KotlinLiteFixture {
|
||||
private File javaFilesDir;
|
||||
private File kotlinSourceRoot;
|
||||
|
||||
protected class ModuleAndDependencies {
|
||||
final M module;
|
||||
final List<String> dependencies;
|
||||
@@ -52,69 +52,49 @@ public abstract class KotlinMultiFileTestWithJava<M, F> extends KotlinLiteFixtur
|
||||
}
|
||||
}
|
||||
|
||||
protected static boolean writeSourceFile(@NotNull String fileName, @NotNull String content, @NotNull File targetDir) {
|
||||
try {
|
||||
File sourceFile = new File(targetDir, fileName);
|
||||
KotlinTestUtils.mkdirs(sourceFile.getParentFile());
|
||||
Files.write(content, sourceFile, Charset.forName("utf-8"));
|
||||
return true;
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw ExceptionUtilsKt.rethrow(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected KotlinCoreEnvironment createEnvironment() {
|
||||
File javaFilesDir = createJavaFilesDir();
|
||||
CompilerConfiguration configuration = createCompilerConfiguration(javaFilesDir);
|
||||
configuration.add(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY, StandardScriptDefinition.INSTANCE);
|
||||
File kotlinSourceRoot = getKotlinSourceRoot();
|
||||
if (kotlinSourceRoot != null) {
|
||||
ContentRootsKt.addKotlinSourceRoot(configuration, kotlinSourceRoot.getPath());
|
||||
}
|
||||
return createEnvironment(getTestRootDisposable(), configuration);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected CompilerConfiguration createCompilerConfiguration(File javaFilesDir) {
|
||||
return KotlinTestUtils.compilerConfigurationForTests(
|
||||
ConfigurationKind.MOCK_RUNTIME,
|
||||
TestJdkKind.MOCK_JDK,
|
||||
Collections.singletonList(KotlinTestUtils.getAnnotationsJar()),
|
||||
protected KotlinCoreEnvironment createEnvironment() throws Exception {
|
||||
javaFilesDir = KotlinTestUtils.tmpDir("java-files");
|
||||
CompilerConfiguration configuration = KotlinTestUtils.compilerConfigurationForTests(
|
||||
getConfigurationKind(),
|
||||
getTestJdkKind(),
|
||||
CollectionsKt.plus(Collections.singletonList(KotlinTestUtils.getAnnotationsJar()), getExtraClasspath()),
|
||||
Collections.singletonList(javaFilesDir)
|
||||
);
|
||||
configuration.add(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY, StandardScriptDefinition.INSTANCE);
|
||||
if (isKotlinSourceRootNeeded()) {
|
||||
kotlinSourceRoot = KotlinTestUtils.tmpDir("kotlin-src");
|
||||
ContentRootsKt.addKotlinSourceRoot(configuration, kotlinSourceRoot.getPath());
|
||||
}
|
||||
return KotlinCoreEnvironment.createForTests(getTestRootDisposable(), configuration, getEnvironmentConfigFiles());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected KotlinCoreEnvironment createEnvironment(@NotNull Disposable disposable, @NotNull CompilerConfiguration configuration) {
|
||||
return KotlinCoreEnvironment.createForTests(disposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES);
|
||||
protected ConfigurationKind getConfigurationKind() {
|
||||
return ConfigurationKind.MOCK_RUNTIME;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected File getKotlinSourceRoot() {
|
||||
return null;
|
||||
@NotNull
|
||||
protected TestJdkKind getTestJdkKind() {
|
||||
return TestJdkKind.MOCK_JDK;
|
||||
}
|
||||
|
||||
protected File createJavaFilesDir() {
|
||||
return createTmpDir("java-files");
|
||||
@NotNull
|
||||
protected List<File> getExtraClasspath() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
protected static File createTmpDir(String dirName) {
|
||||
File dir = new File(FileUtil.getTempDirectory(), dirName);
|
||||
try {
|
||||
KotlinTestUtils.mkdirs(dir);
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw ExceptionUtilsKt.rethrow(e);
|
||||
}
|
||||
return dir;
|
||||
@NotNull
|
||||
protected List<String> getEnvironmentConfigFiles() {
|
||||
return EnvironmentConfigFiles.JVM_CONFIG_FILES;
|
||||
}
|
||||
|
||||
protected boolean isKotlinSourceRootNeeded() {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected void doTest(String filePath) throws Exception {
|
||||
File file = new File(filePath);
|
||||
final File javaFilesDir = createJavaFilesDir();
|
||||
final File kotlinFilesDir = getKotlinSourceRoot();
|
||||
|
||||
String expectedText = KotlinTestUtils.doLoadFile(file);
|
||||
|
||||
@@ -133,8 +113,8 @@ public abstract class KotlinMultiFileTestWithJava<M, F> extends KotlinLiteFixtur
|
||||
writeSourceFile(fileName, text, javaFilesDir);
|
||||
}
|
||||
|
||||
if (fileName.endsWith(".kt") && kotlinFilesDir != null) {
|
||||
writeSourceFile(fileName, text, kotlinFilesDir);
|
||||
if (fileName.endsWith(".kt") && kotlinSourceRoot != null) {
|
||||
writeSourceFile(fileName, text, kotlinSourceRoot);
|
||||
}
|
||||
|
||||
return createTestFile(module, fileName, text, directives);
|
||||
@@ -148,6 +128,12 @@ public abstract class KotlinMultiFileTestWithJava<M, F> extends KotlinLiteFixtur
|
||||
|
||||
return module;
|
||||
}
|
||||
|
||||
private void writeSourceFile(@NotNull String fileName, @NotNull String content, @NotNull File targetDir) {
|
||||
File file = new File(targetDir, fileName);
|
||||
KotlinTestUtils.mkdirs(file.getParentFile());
|
||||
FilesKt.writeText(file, content, Charsets.UTF_8);
|
||||
}
|
||||
});
|
||||
|
||||
doMultiFileTest(file, modules, testFiles);
|
||||
|
||||
@@ -36,7 +36,7 @@ public abstract class KotlinTestWithEnvironment extends KotlinTestWithEnvironmen
|
||||
super.tearDown();
|
||||
}
|
||||
|
||||
protected abstract KotlinCoreEnvironment createEnvironment();
|
||||
protected abstract KotlinCoreEnvironment createEnvironment() throws Exception;
|
||||
|
||||
@NotNull
|
||||
public KotlinCoreEnvironment getEnvironment() {
|
||||
|
||||
@@ -337,15 +337,15 @@ public class KotlinTestUtils {
|
||||
return new File(getHomeDirectory(), "compiler/testData/mockJDK/jre/lib/annotations.jar");
|
||||
}
|
||||
|
||||
public static void mkdirs(File file) throws IOException {
|
||||
public static void mkdirs(@NotNull File file) {
|
||||
if (file.isDirectory()) {
|
||||
return;
|
||||
}
|
||||
if (!file.mkdirs()) {
|
||||
if (file.exists()) {
|
||||
throw new IOException("failed to create " + file + " file exists and not a directory");
|
||||
throw new IllegalStateException("Failed to create " + file + ": file exists and not a directory");
|
||||
}
|
||||
throw new IOException();
|
||||
throw new IllegalStateException("Failed to create " + file);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user