Refactor codegen test utilities
Use GenerationUtils.compileFiles instead of CodegenTestUtil.generateFiles
This commit is contained in:
committed by
Mikhael Bogdanov
parent
7613ec54f5
commit
c2f275faec
@@ -75,7 +75,8 @@ abstract class AbstractBytecodeListingTest : CodegenTestCase() {
|
|||||||
val environment = KotlinCoreEnvironment.createForTests(disposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
|
val environment = KotlinCoreEnvironment.createForTests(disposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
|
||||||
setupEnvironment(environment)
|
setupEnvironment(environment)
|
||||||
|
|
||||||
return CodegenTestUtil.generateFiles(environment, loadMultiFiles(files, environment.project), classBuilderFactory)
|
val testFiles = loadMultiFiles(files, environment.project)
|
||||||
|
return GenerationUtils.compileFiles(testFiles.psiFiles, environment, classBuilderFactory).factory
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,13 +19,8 @@ package org.jetbrains.kotlin.codegen;
|
|||||||
import kotlin.collections.CollectionsKt;
|
import kotlin.collections.CollectionsKt;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.analyzer.AnalysisResult;
|
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
||||||
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime;
|
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime;
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
|
||||||
import org.jetbrains.kotlin.resolve.AnalyzingUtils;
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil;
|
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||||
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
|
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
|
||||||
import org.jetbrains.kotlin.utils.StringsKt;
|
import org.jetbrains.kotlin.utils.StringsKt;
|
||||||
@@ -45,35 +40,7 @@ public class CodegenTestUtil {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static ClassFileFactory generateFiles(@NotNull KotlinCoreEnvironment environment, @NotNull CodegenTestFiles files) {
|
public static ClassFileFactory generateFiles(@NotNull KotlinCoreEnvironment environment, @NotNull CodegenTestFiles files) {
|
||||||
return generateFiles(environment, files, ClassBuilderFactories.TEST);
|
return GenerationUtils.compileFiles(files.getPsiFiles(), environment).getFactory();
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static ClassFileFactory generateFiles(
|
|
||||||
@NotNull KotlinCoreEnvironment environment,
|
|
||||||
@NotNull CodegenTestFiles files,
|
|
||||||
@NotNull ClassBuilderFactory classBuilderFactory) {
|
|
||||||
AnalysisResult analysisResult = JvmResolveUtil.analyzeAndCheckForErrors(files.getPsiFiles(), environment);
|
|
||||||
analysisResult.throwIfError();
|
|
||||||
AnalyzingUtils.throwExceptionOnErrors(analysisResult.getBindingContext());
|
|
||||||
CompilerConfiguration configuration = environment.getConfiguration();
|
|
||||||
GenerationState state = new GenerationState(
|
|
||||||
environment.getProject(),
|
|
||||||
classBuilderFactory,
|
|
||||||
analysisResult.getModuleDescriptor(),
|
|
||||||
analysisResult.getBindingContext(),
|
|
||||||
files.getPsiFiles(),
|
|
||||||
configuration
|
|
||||||
);
|
|
||||||
|
|
||||||
if (analysisResult.getShouldGenerateCode()) {
|
|
||||||
KotlinCodegenFacade.compileCorrectFiles(state, CompilationErrorHandler.THROW_EXCEPTION);
|
|
||||||
}
|
|
||||||
|
|
||||||
// For JVM-specific errors
|
|
||||||
AnalyzingUtils.throwExceptionOnErrors(state.getCollectedExtraJvmDiagnostics());
|
|
||||||
|
|
||||||
return state.getFactory();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void assertThrows(@NotNull Method foo, @NotNull Class<? extends Throwable> exceptionClass,
|
public static void assertThrows(@NotNull Method foo, @NotNull Class<? extends Throwable> exceptionClass,
|
||||||
|
|||||||
@@ -40,23 +40,35 @@ object GenerationUtils {
|
|||||||
compileFiles(listOf(ktFile), environment).factory
|
compileFiles(listOf(ktFile), environment).factory
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun compileFiles(files: List<KtFile>, environment: KotlinCoreEnvironment): GenerationState =
|
@JvmOverloads
|
||||||
compileFiles(files, environment.configuration) { scope -> JvmPackagePartProvider(environment, scope) }
|
fun compileFiles(
|
||||||
|
files: List<KtFile>,
|
||||||
|
environment: KotlinCoreEnvironment,
|
||||||
|
classBuilderFactory: ClassBuilderFactory = ClassBuilderFactories.TEST
|
||||||
|
): GenerationState =
|
||||||
|
compileFiles(files, environment.configuration, classBuilderFactory) { scope ->
|
||||||
|
JvmPackagePartProvider(environment, scope)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun compileFiles(
|
fun compileFiles(
|
||||||
files: List<KtFile>,
|
files: List<KtFile>,
|
||||||
configuration: CompilerConfiguration,
|
configuration: CompilerConfiguration,
|
||||||
|
classBuilderFactory: ClassBuilderFactory,
|
||||||
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider
|
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider
|
||||||
): GenerationState {
|
): GenerationState {
|
||||||
val analysisResult = JvmResolveUtil.analyzeAndCheckForErrors(files.first().project, files, configuration, packagePartProvider)
|
val analysisResult = JvmResolveUtil.analyzeAndCheckForErrors(files.first().project, files, configuration, packagePartProvider)
|
||||||
analysisResult.throwIfError()
|
analysisResult.throwIfError()
|
||||||
|
|
||||||
val state = GenerationState(
|
val state = GenerationState(
|
||||||
files.first().project, ClassBuilderFactories.TEST, analysisResult.moduleDescriptor, analysisResult.bindingContext,
|
files.first().project, classBuilderFactory, analysisResult.moduleDescriptor, analysisResult.bindingContext,
|
||||||
files, configuration
|
files, configuration
|
||||||
)
|
)
|
||||||
KotlinCodegenFacade.compileCorrectFiles(state, CompilationErrorHandler.THROW_EXCEPTION)
|
if (analysisResult.shouldGenerateCode) {
|
||||||
|
KotlinCodegenFacade.compileCorrectFiles(state, CompilationErrorHandler.THROW_EXCEPTION)
|
||||||
|
}
|
||||||
|
|
||||||
// For JVM-specific errors
|
// For JVM-specific errors
|
||||||
AnalyzingUtils.throwExceptionOnErrors(state.collectedExtraJvmDiagnostics)
|
AnalyzingUtils.throwExceptionOnErrors(state.collectedExtraJvmDiagnostics)
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.kotlin.idea.debugger;
|
package org.jetbrains.kotlin.idea.debugger;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
|
||||||
import com.intellij.debugger.NoDataException;
|
import com.intellij.debugger.NoDataException;
|
||||||
import com.intellij.debugger.PositionManager;
|
import com.intellij.debugger.PositionManager;
|
||||||
import com.intellij.debugger.SourcePosition;
|
import com.intellij.debugger.SourcePosition;
|
||||||
@@ -39,8 +38,8 @@ import kotlin.jvm.functions.Function1;
|
|||||||
import kotlin.sequences.SequencesKt;
|
import kotlin.sequences.SequencesKt;
|
||||||
import kotlin.text.StringsKt;
|
import kotlin.text.StringsKt;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.backend.common.output.OutputFile;
|
|
||||||
import org.jetbrains.kotlin.backend.common.output.OutputFileCollection;
|
import org.jetbrains.kotlin.backend.common.output.OutputFileCollection;
|
||||||
|
import org.jetbrains.kotlin.codegen.ClassBuilderFactories;
|
||||||
import org.jetbrains.kotlin.codegen.GenerationUtils;
|
import org.jetbrains.kotlin.codegen.GenerationUtils;
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
@@ -147,16 +146,8 @@ public abstract class AbstractPositionManagerTest extends KotlinLightCodeInsight
|
|||||||
// TODO: delete this once IDEVirtualFileFinder supports loading .kotlin_builtins files
|
// TODO: delete this once IDEVirtualFileFinder supports loading .kotlin_builtins files
|
||||||
configuration.put(JVMConfigurationKeys.ADD_BUILT_INS_FROM_COMPILER_TO_DEPENDENCIES, true);
|
configuration.put(JVMConfigurationKeys.ADD_BUILT_INS_FROM_COMPILER_TO_DEPENDENCIES, true);
|
||||||
|
|
||||||
GenerationState state = GenerationUtils.compileFiles(
|
GenerationState state =
|
||||||
files,
|
GenerationUtils.compileFiles(files, configuration, ClassBuilderFactories.TEST, scope -> PackagePartProvider.Empty.INSTANCE);
|
||||||
configuration,
|
|
||||||
new Function1<GlobalSearchScope, PackagePartProvider>() {
|
|
||||||
@Override
|
|
||||||
public PackagePartProvider invoke(GlobalSearchScope scope) {
|
|
||||||
return PackagePartProvider.Empty.INSTANCE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
Map<String, ReferenceType> referencesByName = getReferenceMap(state.getFactory());
|
Map<String, ReferenceType> referencesByName = getReferenceMap(state.getFactory());
|
||||||
|
|
||||||
|
|||||||
+2
-5
@@ -20,10 +20,8 @@ import com.intellij.openapi.extensions.Extensions
|
|||||||
import com.intellij.openapi.util.text.StringUtil
|
import com.intellij.openapi.util.text.StringUtil
|
||||||
import com.sun.tools.javac.tree.JCTree
|
import com.sun.tools.javac.tree.JCTree
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
|
|
||||||
import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector
|
|
||||||
import org.jetbrains.kotlin.codegen.CodegenTestCase
|
import org.jetbrains.kotlin.codegen.CodegenTestCase
|
||||||
import org.jetbrains.kotlin.codegen.CodegenTestUtil
|
import org.jetbrains.kotlin.codegen.GenerationUtils
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||||
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
|
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
|
||||||
import org.jetbrains.kotlin.kapt3.AbstractKapt3Extension
|
import org.jetbrains.kotlin.kapt3.AbstractKapt3Extension
|
||||||
@@ -134,8 +132,7 @@ abstract class AbstractKotlinKapt3IntegrationTest : CodegenTestCase() {
|
|||||||
try {
|
try {
|
||||||
loadMultiFiles(files)
|
loadMultiFiles(files)
|
||||||
|
|
||||||
val classBuilderFactory = Kapt3BuilderFactory()
|
GenerationUtils.compileFiles(myFiles.psiFiles, myEnvironment, Kapt3BuilderFactory()).factory
|
||||||
CodegenTestUtil.generateFiles(myEnvironment, myFiles, classBuilderFactory)
|
|
||||||
|
|
||||||
val actualRaw = kapt3Extension.savedStubs ?: error("Stubs were not saved")
|
val actualRaw = kapt3Extension.savedStubs ?: error("Stubs were not saved")
|
||||||
val actual = StringUtil.convertLineSeparators(actualRaw.trim({ it <= ' ' })).trimTrailingWhitespacesAndAddNewlineAtEOF()
|
val actual = StringUtil.convertLineSeparators(actualRaw.trim({ it <= ' ' })).trimTrailingWhitespacesAndAddNewlineAtEOF()
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import com.sun.tools.javac.util.Log
|
|||||||
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
|
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
|
||||||
import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector
|
import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector
|
||||||
import org.jetbrains.kotlin.codegen.CodegenTestCase
|
import org.jetbrains.kotlin.codegen.CodegenTestCase
|
||||||
import org.jetbrains.kotlin.codegen.CodegenTestUtil
|
import org.jetbrains.kotlin.codegen.GenerationUtils
|
||||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||||
import org.jetbrains.kotlin.kapt3.Kapt3BuilderFactory
|
import org.jetbrains.kotlin.kapt3.Kapt3BuilderFactory
|
||||||
import org.jetbrains.kotlin.kapt3.KaptContext
|
import org.jetbrains.kotlin.kapt3.KaptContext
|
||||||
@@ -58,15 +58,15 @@ abstract class AbstractKotlinKapt3Test : CodegenTestCase() {
|
|||||||
|
|
||||||
val txtFile = File(wholeFile.parentFile, wholeFile.nameWithoutExtension + ".txt")
|
val txtFile = File(wholeFile.parentFile, wholeFile.nameWithoutExtension + ".txt")
|
||||||
val classBuilderFactory = Kapt3BuilderFactory()
|
val classBuilderFactory = Kapt3BuilderFactory()
|
||||||
val factory = CodegenTestUtil.generateFiles(myEnvironment, myFiles, classBuilderFactory)
|
val state = GenerationUtils.compileFiles(myFiles.psiFiles, myEnvironment, classBuilderFactory)
|
||||||
val typeMapper = factory.generationState.typeMapper
|
|
||||||
|
|
||||||
val logger = KaptLogger(isVerbose = true, messageCollector = messageCollector)
|
val logger = KaptLogger(isVerbose = true, messageCollector = messageCollector)
|
||||||
val kaptContext = KaptContext(logger, factory.generationState.bindingContext, classBuilderFactory.compiledClasses,
|
val kaptContext = KaptContext(logger, state.bindingContext, classBuilderFactory.compiledClasses,
|
||||||
classBuilderFactory.origins, processorOptions = emptyMap())
|
classBuilderFactory.origins, processorOptions = emptyMap())
|
||||||
try {
|
try {
|
||||||
check(kaptContext, typeMapper, txtFile, wholeFile)
|
check(kaptContext, state.typeMapper, txtFile, wholeFile)
|
||||||
} finally {
|
}
|
||||||
|
finally {
|
||||||
kaptContext.close()
|
kaptContext.close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user