Compile logic moved from AbstractBlackBoxCodegenTest to CodegenTestCase
This commit is contained in:
+1
-44
@@ -19,15 +19,9 @@ package org.jetbrains.kotlin.codegen;
|
|||||||
import com.intellij.ide.highlighter.JavaFileType;
|
import com.intellij.ide.highlighter.JavaFileType;
|
||||||
import com.intellij.openapi.util.io.FileUtil;
|
import com.intellij.openapi.util.io.FileUtil;
|
||||||
import com.intellij.util.Processor;
|
import com.intellij.util.Processor;
|
||||||
import kotlin.collections.ArraysKt;
|
|
||||||
import kotlin.io.FilesKt;
|
import kotlin.io.FilesKt;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.cli.common.output.outputUtils.OutputUtilsKt;
|
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
|
||||||
import org.jetbrains.kotlin.cli.jvm.config.JvmContentRootsKt;
|
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration;
|
import org.jetbrains.kotlin.psi.KtDeclaration;
|
||||||
import org.jetbrains.kotlin.psi.KtFile;
|
import org.jetbrains.kotlin.psi.KtFile;
|
||||||
@@ -35,19 +29,14 @@ import org.jetbrains.kotlin.psi.KtNamedFunction;
|
|||||||
import org.jetbrains.kotlin.psi.KtProperty;
|
import org.jetbrains.kotlin.psi.KtProperty;
|
||||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||||
import org.jetbrains.kotlin.test.InTextDirectivesUtils;
|
import org.jetbrains.kotlin.test.InTextDirectivesUtils;
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
|
||||||
import org.jetbrains.kotlin.test.TestJdkKind;
|
import org.jetbrains.kotlin.test.TestJdkKind;
|
||||||
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
|
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.jetbrains.kotlin.test.KotlinTestUtils.getAnnotationsJar;
|
|
||||||
|
|
||||||
public abstract class AbstractBlackBoxCodegenTest extends CodegenTestCase {
|
public abstract class AbstractBlackBoxCodegenTest extends CodegenTestCase {
|
||||||
private boolean addRuntime = false;
|
private boolean addRuntime = false;
|
||||||
private boolean addReflect = false;
|
private boolean addReflect = false;
|
||||||
@@ -83,39 +72,7 @@ public abstract class AbstractBlackBoxCodegenTest extends CodegenTestCase {
|
|||||||
@NotNull TestJdkKind jdkKind,
|
@NotNull TestJdkKind jdkKind,
|
||||||
@NotNull List<String> javacOptions
|
@NotNull List<String> javacOptions
|
||||||
) {
|
) {
|
||||||
CompilerConfiguration configuration = createConfiguration(
|
compile(files, javaSourceDir, configurationKind, jdkKind, javacOptions);
|
||||||
configurationKind, jdkKind,
|
|
||||||
Collections.singletonList(getAnnotationsJar()),
|
|
||||||
ArraysKt.filterNotNull(new File[] {javaSourceDir}),
|
|
||||||
files
|
|
||||||
);
|
|
||||||
|
|
||||||
myEnvironment = KotlinCoreEnvironment.createForTests(
|
|
||||||
getTestRootDisposable(), configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES
|
|
||||||
);
|
|
||||||
|
|
||||||
loadMultiFiles(files);
|
|
||||||
|
|
||||||
classFileFactory = GenerationUtils.compileFiles(myFiles.getPsiFiles(), myEnvironment).getFactory();
|
|
||||||
|
|
||||||
if (javaSourceDir != null) {
|
|
||||||
// If there are Java files, they should be compiled against the class files produced by Kotlin, so we dump them to the disk
|
|
||||||
File kotlinOut;
|
|
||||||
try {
|
|
||||||
kotlinOut = KotlinTestUtils.tmpDir(toString());
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
throw ExceptionUtilsKt.rethrow(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
OutputUtilsKt.writeAllTo(classFileFactory, kotlinOut);
|
|
||||||
|
|
||||||
File output = CodegenTestUtil.compileJava(
|
|
||||||
findJavaSourcesInDirectory(javaSourceDir), Collections.singletonList(kotlinOut.getPath()), javacOptions
|
|
||||||
);
|
|
||||||
// Add javac output to classpath so that the created class loader can find generated Java classes
|
|
||||||
JvmContentRootsKt.addJvmClasspathRoot(configuration, output);
|
|
||||||
}
|
|
||||||
|
|
||||||
blackBox();
|
blackBox();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
import org.jetbrains.kotlin.backend.common.output.OutputFile;
|
import org.jetbrains.kotlin.backend.common.output.OutputFile;
|
||||||
import org.jetbrains.kotlin.checkers.CheckerTestUtil;
|
import org.jetbrains.kotlin.checkers.CheckerTestUtil;
|
||||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys;
|
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys;
|
||||||
|
import org.jetbrains.kotlin.cli.common.output.outputUtils.OutputUtilsKt;
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
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.cli.jvm.config.JvmContentRootsKt;
|
import org.jetbrains.kotlin.cli.jvm.config.JvmContentRootsKt;
|
||||||
@@ -71,6 +72,7 @@ import java.util.Map;
|
|||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import static org.jetbrains.kotlin.codegen.AbstractBlackBoxCodegenTest.findJavaSourcesInDirectory;
|
||||||
import static org.jetbrains.kotlin.codegen.CodegenTestUtil.*;
|
import static org.jetbrains.kotlin.codegen.CodegenTestUtil.*;
|
||||||
import static org.jetbrains.kotlin.test.KotlinTestUtils.getAnnotationsJar;
|
import static org.jetbrains.kotlin.test.KotlinTestUtils.getAnnotationsJar;
|
||||||
|
|
||||||
@@ -461,6 +463,48 @@ public abstract class CodegenTestCase extends KtUsefulTestCase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void compile(
|
||||||
|
@NotNull List<TestFile> files,
|
||||||
|
@Nullable File javaSourceDir,
|
||||||
|
@NotNull ConfigurationKind configurationKind,
|
||||||
|
@NotNull TestJdkKind jdkKind,
|
||||||
|
@NotNull List<String> javacOptions
|
||||||
|
) {
|
||||||
|
CompilerConfiguration configuration = createConfiguration(
|
||||||
|
configurationKind, jdkKind,
|
||||||
|
Collections.singletonList(getAnnotationsJar()),
|
||||||
|
ArraysKt.filterNotNull(new File[] {javaSourceDir}),
|
||||||
|
files
|
||||||
|
);
|
||||||
|
|
||||||
|
myEnvironment = KotlinCoreEnvironment.createForTests(
|
||||||
|
getTestRootDisposable(), configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES
|
||||||
|
);
|
||||||
|
|
||||||
|
loadMultiFiles(files);
|
||||||
|
|
||||||
|
classFileFactory = GenerationUtils.compileFiles(myFiles.getPsiFiles(), myEnvironment).getFactory();
|
||||||
|
|
||||||
|
if (javaSourceDir != null) {
|
||||||
|
// If there are Java files, they should be compiled against the class files produced by Kotlin, so we dump them to the disk
|
||||||
|
File kotlinOut;
|
||||||
|
try {
|
||||||
|
kotlinOut = KotlinTestUtils.tmpDir(toString());
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
throw ExceptionUtilsKt.rethrow(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputUtilsKt.writeAllTo(classFileFactory, kotlinOut);
|
||||||
|
|
||||||
|
File output = CodegenTestUtil.compileJava(
|
||||||
|
findJavaSourcesInDirectory(javaSourceDir), Collections.singletonList(kotlinOut.getPath()), javacOptions
|
||||||
|
);
|
||||||
|
// Add javac output to classpath so that the created class loader can find generated Java classes
|
||||||
|
JvmContentRootsKt.addJvmClasspathRoot(configuration, output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class TestFile implements Comparable<TestFile> {
|
public static class TestFile implements Comparable<TestFile> {
|
||||||
public final String name;
|
public final String name;
|
||||||
public final String content;
|
public final String content;
|
||||||
|
|||||||
Reference in New Issue
Block a user