Use NoScopeRecordCliBindingTrace for codegen tests

This commit is contained in:
Dmitry Petrov
2018-02-13 17:50:53 +03:00
parent 10916b2046
commit 8bfbbe456f
31 changed files with 1013 additions and 41 deletions
@@ -35,9 +35,11 @@ import org.jetbrains.kotlin.checkers.CheckerTestUtil;
import org.jetbrains.kotlin.checkers.CompilerTestLanguageVersionSettings;
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys;
import org.jetbrains.kotlin.cli.common.output.outputUtils.OutputUtilsKt;
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport;
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.codegen.state.GenerationState;
import org.jetbrains.kotlin.config.*;
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
import org.jetbrains.kotlin.name.FqName;
@@ -462,8 +464,11 @@ public abstract class CodegenTestCase extends KtUsefulTestCase {
protected ClassFileFactory generateClassesInFile() {
if (classFileFactory == null) {
try {
classFileFactory =
GenerationUtils.compileFiles(myFiles.getPsiFiles(), myEnvironment, getClassBuilderFactory()).getFactory();
GenerationState generationState = GenerationUtils.compileFiles(
myFiles.getPsiFiles(), myEnvironment, getClassBuilderFactory(),
new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace()
);
classFileFactory = generationState.getFactory();
if (verifyWithDex() && DxChecker.RUN_DX_CHECKER) {
DxChecker.check(classFileFactory);
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.codegen
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
import org.jetbrains.kotlin.cli.common.output.outputUtils.writeAllTo
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.config.CompilerConfiguration
@@ -26,6 +27,7 @@ import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.descriptors.PackagePartProvider
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.AnalyzingUtils
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil
import java.io.File
@@ -45,18 +47,21 @@ object GenerationUtils {
fun compileFiles(
files: List<KtFile>,
environment: KotlinCoreEnvironment,
classBuilderFactory: ClassBuilderFactory = ClassBuilderFactories.TEST
classBuilderFactory: ClassBuilderFactory = ClassBuilderFactories.TEST,
trace: BindingTrace = CliLightClassGenerationSupport.CliBindingTrace()
): GenerationState =
compileFiles(files, environment.configuration, classBuilderFactory, environment::createPackagePartProvider)
compileFiles(files, environment.configuration, classBuilderFactory, environment::createPackagePartProvider, trace)
@JvmStatic
fun compileFiles(
files: List<KtFile>,
configuration: CompilerConfiguration,
classBuilderFactory: ClassBuilderFactory,
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
trace: BindingTrace = CliLightClassGenerationSupport.CliBindingTrace()
): GenerationState {
val analysisResult = JvmResolveUtil.analyzeAndCheckForErrors(files.first().project, files, configuration, packagePartProvider)
val analysisResult =
JvmResolveUtil.analyzeAndCheckForErrors(files.first().project, files, configuration, packagePartProvider, trace)
analysisResult.throwIfError()
val state = GenerationState.Builder(
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.container.ComponentProvider
import org.jetbrains.kotlin.descriptors.PackagePartProvider
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.AnalyzingUtils
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
object JvmResolveUtil {
@@ -51,13 +52,14 @@ object JvmResolveUtil {
project: Project,
files: Collection<KtFile>,
configuration: CompilerConfiguration,
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
trace: BindingTrace = CliLightClassGenerationSupport.CliBindingTrace()
): AnalysisResult {
for (file in files) {
AnalyzingUtils.checkForSyntacticErrors(file)
}
return analyze(project, files, configuration, packagePartProvider).apply {
return analyze(project, files, configuration, packagePartProvider, trace).apply {
AnalyzingUtils.throwExceptionOnErrors(bindingContext)
}
}
@@ -82,10 +84,11 @@ object JvmResolveUtil {
project: Project,
files: Collection<KtFile>,
configuration: CompilerConfiguration,
packagePartProviderFactory: (GlobalSearchScope) -> PackagePartProvider
packagePartProviderFactory: (GlobalSearchScope) -> PackagePartProvider,
trace: BindingTrace = CliLightClassGenerationSupport.CliBindingTrace()
): AnalysisResult {
return TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(
project, files, CliLightClassGenerationSupport.CliBindingTrace(), configuration, packagePartProviderFactory
project, files, trace, configuration, packagePartProviderFactory
)
}
}