Extract directive map to separate class

This commit is contained in:
Mikhail Bogdanov
2020-03-15 20:02:19 +01:00
parent bc214868ef
commit 420dd0d440
24 changed files with 86 additions and 59 deletions
@@ -242,7 +242,7 @@ class CodegenTestsOnAndroidGenerator private constructor(private val pathManager
file.name, file.name,
expectedText, expectedText,
object : TestFiles.TestFileFactoryNoModules<TestFile>() { object : TestFiles.TestFileFactoryNoModules<TestFile>() {
override fun create(fileName: String, text: String, directives: Map<String, String>): TestFile { override fun create(fileName: String, text: String, directives: Directives): TestFile {
return TestFile(fileName, text, directives) return TestFile(fileName, text, directives)
} }
}, false, }, false,
@@ -105,7 +105,7 @@ abstract class AbstractFirTypeEnhancementTest : KtUsefulTestCase() {
val srcFiles = TestFiles.createTestFiles( val srcFiles = TestFiles.createTestFiles(
javaFile.name, FileUtil.loadFile(javaFile, true), javaFile.name, FileUtil.loadFile(javaFile, true),
object : TestFiles.TestFileFactoryNoModules<File>() { object : TestFiles.TestFileFactoryNoModules<File>() {
override fun create(fileName: String, text: String, directives: Map<String, String>): File { override fun create(fileName: String, text: String, directives: Directives): File {
var currentDir = javaFilesDir var currentDir = javaFilesDir
if ("/" !in fileName) { if ("/" !in fileName) {
val packageFqName = val packageFqName =
@@ -19,13 +19,10 @@ package org.jetbrains.kotlin.asJava
import com.intellij.psi.PsiClass import com.intellij.psi.PsiClass
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
import org.jetbrains.kotlin.test.KotlinBaseTest
import org.jetbrains.kotlin.checkers.KotlinMultiFileTestWithJava import org.jetbrains.kotlin.checkers.KotlinMultiFileTestWithJava
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.*
import org.jetbrains.kotlin.test.InTextDirectivesUtils
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.util.KotlinFrontEndException import org.jetbrains.kotlin.util.KotlinFrontEndException
import org.junit.Assert import org.junit.Assert
import java.io.File import java.io.File
@@ -57,7 +54,7 @@ abstract class AbstractCompilerLightClassTest : KotlinMultiFileTestWithJava<Kotl
module: TestModule?, module: TestModule?,
fileName: String, fileName: String,
text: String, text: String,
directives: Map<String, String?> directives: Directives
): TestFile = TestFile(fileName, text, directives) ): TestFile = TestFile(fileName, text, directives)
companion object { companion object {
@@ -20,7 +20,6 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Condition import com.intellij.openapi.util.Condition
import com.intellij.openapi.util.Conditions import com.intellij.openapi.util.Conditions
import com.intellij.openapi.util.TextRange import com.intellij.openapi.util.TextRange
import com.intellij.openapi.util.text.StringUtil
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.PsiTreeUtil
import com.intellij.util.containers.ContainerUtil import com.intellij.util.containers.ContainerUtil
@@ -52,10 +51,10 @@ import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactoryImpl import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactoryImpl
import org.jetbrains.kotlin.test.Directives
import org.jetbrains.kotlin.test.InTextDirectivesUtils.isDirectiveDefined import org.jetbrains.kotlin.test.InTextDirectivesUtils.isDirectiveDefined
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.KotlinBaseTest import org.jetbrains.kotlin.test.KotlinBaseTest
import org.jetbrains.kotlin.test.util.trimTrailingWhitespacesAndAddNewlineAtEOF
import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addIfNotNull
import org.junit.Assert import org.junit.Assert
import java.io.File import java.io.File
@@ -83,7 +82,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
): TestModule = ): TestModule =
TestModule(name, dependencies, friends) TestModule(name, dependencies, friends)
override fun createTestFile(module: TestModule?, fileName: String, text: String, directives: Map<String, String?>): TestFile = override fun createTestFile(module: TestModule?, fileName: String, text: String, directives: Directives): TestFile =
TestFile(module, fileName, text, directives) TestFile(module, fileName, text, directives)
@@ -138,7 +137,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
val module: TestModule?, val module: TestModule?,
val fileName: String, val fileName: String,
textWithMarkers: String, textWithMarkers: String,
directives: Map<String, String?> directives: Directives
) : KotlinBaseTest.TestFile(fileName, textWithMarkers, directives) { ) : KotlinBaseTest.TestFile(fileName, textWithMarkers, directives) {
val diagnosedRanges: MutableList<DiagnosedRange> = mutableListOf() val diagnosedRanges: MutableList<DiagnosedRange> = mutableListOf()
private val diagnosedRangesToDiagnosticNames: MutableMap<IntRange, MutableSet<String>> = mutableMapOf() private val diagnosedRangesToDiagnosticNames: MutableMap<IntRange, MutableSet<String>> = mutableMapOf()
@@ -411,7 +410,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
val DIAGNOSTIC_IN_TESTDATA_PATTERN = Regex("<!>|<!(.*?(\\(\".*?\"\\)|\\(\\))??)+(?<!<)!>") val DIAGNOSTIC_IN_TESTDATA_PATTERN = Regex("<!>|<!(.*?(\\(\".*?\"\\)|\\(\\))??)+(?<!<)!>")
fun parseDiagnosticFilterDirective( fun parseDiagnosticFilterDirective(
directiveMap: Map<String, String?>, directiveMap: Directives,
allowUnderscoreUsage: Boolean allowUnderscoreUsage: Boolean
): Condition<Diagnostic> { ): Condition<Diagnostic> {
val directives = directiveMap[DIAGNOSTICS_DIRECTIVE] val directives = directiveMap[DIAGNOSTICS_DIRECTIVE]
@@ -499,7 +498,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
} }
} }
private fun parseJvmTarget(directiveMap: Map<String, String?>) = directiveMap[JVM_TARGET]?.let { JvmTarget.fromString(it) } private fun parseJvmTarget(directiveMap: Directives) = directiveMap[JVM_TARGET]?.let { JvmTarget.fromString(it) }
protected fun parseModulePlatformByName(moduleName: String): TargetPlatform? { protected fun parseModulePlatformByName(moduleName: String): TargetPlatform? {
val nameSuffix = moduleName.substringAfterLast("-", "").toUpperCase() val nameSuffix = moduleName.substringAfterLast("-", "").toUpperCase()
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.checkers
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.test.Directives
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.junit.Assert import org.junit.Assert
import java.io.File import java.io.File
@@ -50,10 +51,10 @@ private fun specificFeaturesForTests(): Map<LanguageFeature, LanguageFeature.Sta
emptyMap() emptyMap()
} }
fun parseLanguageVersionSettingsOrDefault(directiveMap: Map<String, String>): CompilerTestLanguageVersionSettings = fun parseLanguageVersionSettingsOrDefault(directiveMap: Directives): CompilerTestLanguageVersionSettings =
parseLanguageVersionSettings(directiveMap) ?: defaultLanguageVersionSettings() parseLanguageVersionSettings(directiveMap) ?: defaultLanguageVersionSettings()
fun parseLanguageVersionSettings(directives: Map<String, String?>): CompilerTestLanguageVersionSettings? { fun parseLanguageVersionSettings(directives: Directives): CompilerTestLanguageVersionSettings? {
val apiVersionString = directives[API_VERSION_DIRECTIVE] val apiVersionString = directives[API_VERSION_DIRECTIVE]
val languageFeaturesString = directives[LANGUAGE_DIRECTIVE] val languageFeaturesString = directives[LANGUAGE_DIRECTIVE]
@@ -93,9 +94,9 @@ fun defaultLanguageVersionSettings(): CompilerTestLanguageVersionSettings =
CompilerTestLanguageVersionSettings(emptyMap(), ApiVersion.LATEST_STABLE, LanguageVersion.LATEST_STABLE) CompilerTestLanguageVersionSettings(emptyMap(), ApiVersion.LATEST_STABLE, LanguageVersion.LATEST_STABLE)
fun languageVersionSettingsFromText(fileTexts: List<String>): LanguageVersionSettings { fun languageVersionSettingsFromText(fileTexts: List<String>): LanguageVersionSettings {
val allDirectives = HashMap<String, String>() val allDirectives = Directives()
for (fileText in fileTexts) { for (fileText in fileTexts) {
allDirectives.putAll(KotlinTestUtils.parseDirectives(fileText)) KotlinTestUtils.parseDirectives(fileText, allDirectives)
} }
return parseLanguageVersionSettingsOrDefault(allDirectives) return parseLanguageVersionSettingsOrDefault(allDirectives)
} }
@@ -119,7 +119,7 @@ abstract class KotlinMultiFileTestWithJava<M : KotlinBaseTest.TestModule, F : Ko
protected abstract fun createTestModule(name: String, dependencies: List<String>, friends: List<String>): M? protected abstract fun createTestModule(name: String, dependencies: List<String>, friends: List<String>): M?
protected abstract fun createTestFile(module: M?, fileName: String, text: String, directives: Map<String, String?>): F protected abstract fun createTestFile(module: M?, fileName: String, text: String, directives: Directives): F
protected open fun createTestFiles( protected open fun createTestFiles(
file: File, file: File,
@@ -131,7 +131,7 @@ abstract class KotlinMultiFileTestWithJava<M : KotlinBaseTest.TestModule, F : Ko
module: M?, module: M?,
fileName: String, fileName: String,
text: String, text: String,
directives: Map<String, String> directives: Directives
): F? { ): F? {
if (fileName.endsWith(".java")) { if (fileName.endsWith(".java")) {
writeSourceFile(fileName, text, javaFilesDir!!) writeSourceFile(fileName, text, javaFilesDir!!)
@@ -161,7 +161,7 @@ public abstract class CodegenTestCase extends KotlinBaseTest<KotlinBaseTest.Test
List<String> kotlinConfigurationFlags = new ArrayList<>(0); List<String> kotlinConfigurationFlags = new ArrayList<>(0);
for (TestFile testFile : testFilesWithConfigurationDirectives) { for (TestFile testFile : testFilesWithConfigurationDirectives) {
String content = testFile.content; String content = testFile.content;
Map<String, String> directives = usePreparsedDirectives ? testFile.directives : parseDirectivesAndFlags(content); Directives directives = usePreparsedDirectives ? testFile.directives : parseDirectivesAndFlags(content);
String configurationFlags = directives.get("KOTLIN_CONFIGURATION_FLAGS"); String configurationFlags = directives.get("KOTLIN_CONFIGURATION_FLAGS");
if (configurationFlags != null) { if (configurationFlags != null) {
@@ -185,8 +185,8 @@ public abstract class CodegenTestCase extends KotlinBaseTest<KotlinBaseTest.Test
); );
} }
if (directives.containsKey("COMMON_COROUTINES_TEST")) { if (directives.contains("COMMON_COROUTINES_TEST")) {
assert !directives.containsKey("COROUTINES_PACKAGE") : "Must replace COROUTINES_PACKAGE prior to tests compilation"; assert !directives.contains("COROUTINES_PACKAGE") : "Must replace COROUTINES_PACKAGE prior to tests compilation";
if (DescriptorUtils.COROUTINES_PACKAGE_FQ_NAME_EXPERIMENTAL.asString().equals(coroutinesPackage)) { if (DescriptorUtils.COROUTINES_PACKAGE_FQ_NAME_EXPERIMENTAL.asString().equals(coroutinesPackage)) {
disableReleaseCoroutines = true; disableReleaseCoroutines = true;
includeCompatExperimentalCoroutines = true; includeCompatExperimentalCoroutines = true;
@@ -779,7 +779,7 @@ public abstract class CodegenTestCase extends KotlinBaseTest<KotlinBaseTest.Test
List testFiles = TestFiles.createTestFiles(file.getName(), expectedText, new TestFiles.TestFileFactoryNoModules<TestFile>() { List testFiles = TestFiles.createTestFiles(file.getName(), expectedText, new TestFiles.TestFileFactoryNoModules<TestFile>() {
@NotNull @NotNull
@Override @Override
public TestFile create(@NotNull String fileName, @NotNull String text, @NotNull Map<String, String> directives) { public TestFile create(@NotNull String fileName, @NotNull String text, @NotNull Directives directives) {
return new TestFile(fileName, text, directives); return new TestFile(fileName, text, directives);
} }
}, false, coroutinesPackage, parseDirectivesPerFiles()); }, false, coroutinesPackage, parseDirectivesPerFiles());
@@ -42,7 +42,7 @@ object InlineTestUtil {
assert(notInlinedCalls.isEmpty()) { "All inline methods should be inlined but:\n" + notInlinedCalls.joinToString("\n") } assert(notInlinedCalls.isEmpty()) { "All inline methods should be inlined but:\n" + notInlinedCalls.joinToString("\n") }
val skipParameterChecking = files.any { val skipParameterChecking = files.any {
it.directives.containsKey("NO_CHECK_LAMBDA_INLINING") "NO_CHECK_LAMBDA_INLINING" in it.directives
} || !doLambdaInliningCheck(outputFiles, inlineInfo) } || !doLambdaInliningCheck(outputFiles, inlineInfo)
if (!skipParameterChecking) { if (!skipParameterChecking) {
@@ -25,7 +25,7 @@ abstract class AbstractFirOldFrontendDiagnosticsTest : AbstractFirDiagnosticsTes
} }
override fun runAnalysis(testDataFile: File, testFiles: List<TestFile>, firFilesPerSession: Map<FirSession, List<FirFile>>) { override fun runAnalysis(testDataFile: File, testFiles: List<TestFile>, firFilesPerSession: Map<FirSession, List<FirFile>>) {
if (testFiles.any { it.directives.containsKey("FIR_IGNORE") }) return if (testFiles.any { "FIR_IGNORE" in it.directives }) return
val failure: AssertionError? = try { val failure: AssertionError? = try {
for ((_, firFiles) in firFilesPerSession) { for ((_, firFiles) in firFilesPerSession) {
doFirResolveTestBench(firFiles, FirTotalResolveTransformer().transformers, gc = false) doFirResolveTestBench(firFiles, FirTotalResolveTransformer().transformers, gc = false)
@@ -45,7 +45,7 @@ abstract class AbstractFirOldFrontendDiagnosticsTest : AbstractFirDiagnosticsTes
compareAndMergeFirFileAndOldFrontendFile(oldFrontendTestDataFile, testDataFile) compareAndMergeFirFileAndOldFrontendFile(oldFrontendTestDataFile, testDataFile)
} }
val needDump = testFiles.any { it.directives.containsKey("FIR_DUMP") } val needDump = testFiles.any { "FIR_DUMP" in it.directives }
if (needDump) { if (needDump) {
checkFir(testDataFile, allFirFiles) checkFir(testDataFile, allFirFiles)
} }
@@ -163,7 +163,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir {
} }
public static void updateConfigurationWithDirectives(String content, CompilerConfiguration configuration) { public static void updateConfigurationWithDirectives(String content, CompilerConfiguration configuration) {
Map<String, String> directives = KotlinTestUtils.parseDirectives(content); Directives directives = KotlinTestUtils.parseDirectives(content);
LanguageVersionSettings languageVersionSettings = CompilerTestLanguageVersionSettingsKt.parseLanguageVersionSettings(directives); LanguageVersionSettings languageVersionSettings = CompilerTestLanguageVersionSettingsKt.parseLanguageVersionSettings(directives);
if (languageVersionSettings == null) { if (languageVersionSettings == null) {
languageVersionSettings = CompilerTestLanguageVersionSettingsKt.defaultLanguageVersionSettings(); languageVersionSettings = CompilerTestLanguageVersionSettingsKt.defaultLanguageVersionSettings();
@@ -284,7 +284,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir {
new TestFiles.TestFileFactoryNoModules<File>() { new TestFiles.TestFileFactoryNoModules<File>() {
@NotNull @NotNull
@Override @Override
public File create(@NotNull String fileName, @NotNull String text, @NotNull Map<String, String> directives) { public File create(@NotNull String fileName, @NotNull String text, @NotNull Directives directives) {
File targetFile = new File(srcDir, fileName); File targetFile = new File(srcDir, fileName);
try { try {
FileUtil.writeToFile(targetFile, text); FileUtil.writeToFile(targetFile, text);
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.test.*;
import java.io.File; import java.io.File;
import java.util.List; import java.util.List;
import java.util.Map;
public abstract class ExtensibleResolveTestCase extends KotlinTestWithEnvironment { public abstract class ExtensibleResolveTestCase extends KotlinTestWithEnvironment {
private ExpectedResolveData expectedResolveData; private ExpectedResolveData expectedResolveData;
@@ -48,7 +47,7 @@ public abstract class ExtensibleResolveTestCase extends KotlinTestWithEnvironmen
List<KtFile> files = TestFiles.createTestFiles("file.kt", text, new TestFiles.TestFileFactoryNoModules<KtFile>() { List<KtFile> files = TestFiles.createTestFiles("file.kt", text, new TestFiles.TestFileFactoryNoModules<KtFile>() {
@NotNull @NotNull
@Override @Override
public KtFile create(@NotNull String fileName, @NotNull String text, @NotNull Map<String, String> directives) { public KtFile create(@NotNull String fileName, @NotNull String text, @NotNull Directives directives) {
return expectedResolveData.createFileFromMarkedUpText(fileName, text); return expectedResolveData.createFileFromMarkedUpText(fileName, text);
} }
}, ""); }, "");
@@ -0,0 +1,27 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.test
class Directives {
private val directives = mutableMapOf<String, String?>()
operator fun contains(key: String): Boolean {
return key in directives
}
operator fun get(key: String): String? {
return directives[key]
}
fun put(key: String, value: String?): String? {
return directives.put(key, value)
}
public fun asMapOfSingleValues(): Map<String, String?> {
return directives.entries.associate { it.key to it.value?.single() }
}
}
@@ -73,7 +73,7 @@ abstract class KotlinBaseTest<F : KotlinBaseTest.TestFile> : KtUsefulTestCase()
open class TestFile @JvmOverloads constructor( open class TestFile @JvmOverloads constructor(
@JvmField val name: String, @JvmField val name: String,
@JvmField val content: String, @JvmField val content: String,
@JvmField val directives: Map<String, String?> = emptyMap() @JvmField val directives: Directives = Directives()
) : Comparable<TestFile> { ) : Comparable<TestFile> {
override operator fun compareTo(other: TestFile): Int { override operator fun compareTo(other: TestFile): Int {
return name.compareTo(other.name) return name.compareTo(other.name)
@@ -525,12 +525,16 @@ public class KotlinTestUtils {
} }
@NotNull @NotNull
public static Map<String, String> parseDirectives(String expectedText) { public static Directives parseDirectives(String expectedText) {
Map<String, String> directives = new HashMap<>(); return parseDirectives(expectedText, new Directives());
}
@NotNull
public static Directives parseDirectives(String expectedText, @NotNull Directives directives) {
return parseByRegexp(DIRECTIVE_PATTERN, expectedText, directives); return parseByRegexp(DIRECTIVE_PATTERN, expectedText, directives);
} }
private static Map<String, String> parseByRegexp(Pattern pattern, String expectedText, Map<String, String> directives) { private static Directives parseByRegexp(Pattern pattern, String expectedText, Directives directives) {
Matcher directiveMatcher = pattern.matcher(expectedText); Matcher directiveMatcher = pattern.matcher(expectedText);
while (directiveMatcher.find()) { while (directiveMatcher.find()) {
String name = directiveMatcher.group(1); String name = directiveMatcher.group(1);
@@ -542,8 +546,8 @@ public class KotlinTestUtils {
} }
@NotNull @NotNull
public static Map<String, String> parseDirectivesAndFlags(String expectedText) { public static Directives parseDirectivesAndFlags(String expectedText) {
Map<String, String> directiveAndFlags = parseDirectives(expectedText); Directives directiveAndFlags = parseDirectives(expectedText);
parseByRegexp(BACKEND_DIRECTIVE_PATTERN, expectedText, directiveAndFlags); parseByRegexp(BACKEND_DIRECTIVE_PATTERN, expectedText, directiveAndFlags);
return directiveAndFlags; return directiveAndFlags;
} }
@@ -561,7 +565,7 @@ public class KotlinTestUtils {
List<String> files = TestFiles.createTestFiles("", content, new TestFiles.TestFileFactoryNoModules<String>() { List<String> files = TestFiles.createTestFiles("", content, new TestFiles.TestFileFactoryNoModules<String>() {
@NotNull @NotNull
@Override @Override
public String create(@NotNull String fileName, @NotNull String text, @NotNull Map<String, String> directives) { public String create(@NotNull String fileName, @NotNull String text, @NotNull Directives directives) {
int firstLineEnd = text.indexOf('\n'); int firstLineEnd = text.indexOf('\n');
return StringUtil.trimTrailing(text.substring(firstLineEnd + 1)); return StringUtil.trimTrailing(text.substring(firstLineEnd + 1));
} }
@@ -71,7 +71,7 @@ public class TestFiles {
commonPrefixOrWholeFile = expectedText; commonPrefixOrWholeFile = expectedText;
} }
else { else {
Map<String, String> allFilesOrCommonPrefixDirectives = parseDirectivesPerFile ? null : parseDirectivesAndFlags(expectedText); Directives allFilesOrCommonPrefixDirectives = parseDirectivesPerFile ? null : parseDirectivesAndFlags(expectedText);
int processedChars = 0; int processedChars = 0;
M module = null; M module = null;
boolean firstFileProcessed = false; boolean firstFileProcessed = false;
@@ -190,7 +190,7 @@ public class TestFiles {
} }
public interface TestFileFactory<M, F> { public interface TestFileFactory<M, F> {
F createFile(@Nullable M module, @NotNull String fileName, @NotNull String text, @NotNull Map<String, String> directives); F createFile(@Nullable M module, @NotNull String fileName, @NotNull String text, @NotNull Directives directives);
M createModule(@NotNull String name, @NotNull List<String> dependencies, @NotNull List<String> friends); M createModule(@NotNull String name, @NotNull List<String> dependencies, @NotNull List<String> friends);
} }
@@ -200,13 +200,13 @@ public class TestFiles {
@Nullable KotlinBaseTest.TestModule module, @Nullable KotlinBaseTest.TestModule module,
@NotNull String fileName, @NotNull String fileName,
@NotNull String text, @NotNull String text,
@NotNull Map<String, String> directives @NotNull Directives directives
) { ) {
return create(fileName, text, directives); return create(fileName, text, directives);
} }
@NotNull @NotNull
public abstract F create(@NotNull String fileName, @NotNull String text, @NotNull Map<String, String> directives); public abstract F create(@NotNull String fileName, @NotNull String text, @NotNull Directives directives);
@Override @Override
public KotlinBaseTest.TestModule createModule(@NotNull String name, @NotNull List<String> dependencies, @NotNull List<String> friends) { public KotlinBaseTest.TestModule createModule(@NotNull String name, @NotNull List<String> dependencies, @NotNull List<String> friends) {
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.visualizer
import org.jetbrains.kotlin.checkers.KotlinMultiFileTestWithJava import org.jetbrains.kotlin.checkers.KotlinMultiFileTestWithJava
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.test.Directives
import org.jetbrains.kotlin.test.KotlinBaseTest import org.jetbrains.kotlin.test.KotlinBaseTest
import java.io.File import java.io.File
@@ -20,7 +21,7 @@ abstract class AbstractVisualizer : KotlinMultiFileTestWithJava<KotlinBaseTest.T
): TestModule? = null ): TestModule? = null
override fun createTestFile(module: TestModule?, fileName: String, text: String, directives: Map<String, String?>): TestFile = override fun createTestFile(module: TestModule?, fileName: String, text: String, directives: Directives): TestFile =
TestFile(fileName, text, directives) TestFile(fileName, text, directives)
@@ -117,7 +117,7 @@ abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdir() {
fileName, fileName,
text, text,
object : TestFileFactoryNoModules<File>() { object : TestFileFactoryNoModules<File>() {
override fun create(fileName: String, text: String, directives: Map<String, String>): File { override fun create(fileName: String, text: String, directives: Directives): File {
val targetFile = File(tmpdir, fileName) val targetFile = File(tmpdir, fileName)
targetFile.writeText(adaptJavaSource(text)) targetFile.writeText(adaptJavaSource(text))
return targetFile return targetFile
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.idea.debugger.test.util.KotlinOutputChecker
import org.jetbrains.kotlin.idea.debugger.test.util.LogPropagator import org.jetbrains.kotlin.idea.debugger.test.util.LogPropagator
import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.test.Directives
import org.jetbrains.kotlin.test.KotlinBaseTest.TestFile import org.jetbrains.kotlin.test.KotlinBaseTest.TestFile
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestMetadata import org.jetbrains.kotlin.test.TestMetadata
@@ -129,7 +130,7 @@ abstract class KotlinDescriptorTestCase : DescriptorTestCase() {
wholeFile.name, wholeFile.name,
wholeFileContents, wholeFileContents,
object : org.jetbrains.kotlin.test.TestFiles.TestFileFactoryNoModules<TestFile>() { object : org.jetbrains.kotlin.test.TestFiles.TestFileFactoryNoModules<TestFile>() {
override fun create(fileName: String, text: String, directives: Map<String, String?>): TestFile { override fun create(fileName: String, text: String, directives: Directives): TestFile {
return TestFile(fileName, text, directives) return TestFile(fileName, text, directives)
} }
} }
@@ -77,7 +77,7 @@ public abstract class AbstractDiagnosticMessageTest extends KotlinTestWithEnviro
String fileName = file.getName(); String fileName = file.getName();
String fileData = KotlinTestUtils.doLoadFile(file); String fileData = KotlinTestUtils.doLoadFile(file);
Map<String,String> directives = KotlinTestUtils.parseDirectives(fileData); Directives directives = KotlinTestUtils.parseDirectives(fileData);
int diagnosticNumber = getDiagnosticNumber(directives); int diagnosticNumber = getDiagnosticNumber(directives);
final Set<DiagnosticFactory<?>> diagnosticFactories = getDiagnosticFactories(directives); final Set<DiagnosticFactory<?>> diagnosticFactories = getDiagnosticFactories(directives);
MessageType messageType = getMessageTypeDirective(directives); MessageType messageType = getMessageTypeDirective(directives);
@@ -149,7 +149,7 @@ public abstract class AbstractDiagnosticMessageTest extends KotlinTestWithEnviro
return result; return result;
} }
private static int getDiagnosticNumber(Map<String, String> directives) { private static int getDiagnosticNumber(Directives directives) {
String diagnosticsNumber = directives.get(DIAGNOSTICS_NUMBER_DIRECTIVE); String diagnosticsNumber = directives.get(DIAGNOSTICS_NUMBER_DIRECTIVE);
assert diagnosticsNumber != null : DIAGNOSTICS_NUMBER_DIRECTIVE + " should be present."; assert diagnosticsNumber != null : DIAGNOSTICS_NUMBER_DIRECTIVE + " should be present.";
try { try {
@@ -161,7 +161,7 @@ public abstract class AbstractDiagnosticMessageTest extends KotlinTestWithEnviro
} }
@NotNull @NotNull
private Set<DiagnosticFactory<?>> getDiagnosticFactories(Map<String, String> directives) { private Set<DiagnosticFactory<?>> getDiagnosticFactories(Directives directives) {
String diagnosticsData = directives.get(DIAGNOSTICS_DIRECTIVE); String diagnosticsData = directives.get(DIAGNOSTICS_DIRECTIVE);
assert diagnosticsData != null : DIAGNOSTICS_DIRECTIVE + " should be present."; assert diagnosticsData != null : DIAGNOSTICS_DIRECTIVE + " should be present.";
Set<DiagnosticFactory<?>> diagnosticFactories = new HashSet<>(); Set<DiagnosticFactory<?>> diagnosticFactories = new HashSet<>();
@@ -206,7 +206,7 @@ public abstract class AbstractDiagnosticMessageTest extends KotlinTestWithEnviro
} }
@Nullable @Nullable
private static MessageType getMessageTypeDirective(Map<String, String> directives) { private static MessageType getMessageTypeDirective(Directives directives) {
String messageType = directives.get(MESSAGE_TYPE_DIRECTIVE); String messageType = directives.get(MESSAGE_TYPE_DIRECTIVE);
if (messageType == null) return null; if (messageType == null) return null;
try { try {
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.idea.test.DirectiveBasedActionUtils
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.withCustomCompilerOptions import org.jetbrains.kotlin.idea.test.withCustomCompilerOptions
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.test.Directives
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestFiles import org.jetbrains.kotlin.test.TestFiles
import org.jetbrains.kotlin.test.testFramework.runWriteAction import org.jetbrains.kotlin.test.testFramework.runWriteAction
@@ -113,7 +114,7 @@ abstract class AbstractQuickFixMultiFileTest : KotlinLightCodeInsightFixtureTest
"single.kt", "single.kt",
multiFileText, multiFileText,
object : TestFiles.TestFileFactoryNoModules<TestFile>() { object : TestFiles.TestFileFactoryNoModules<TestFile>() {
override fun create(fileName: String, text: String, directives: Map<String, String>): TestFile { override fun create(fileName: String, text: String, directives: Directives): TestFile {
val linesWithoutDirectives = text.lines().filter { val linesWithoutDirectives = text.lines().filter {
!it.startsWith("// LANGUAGE_VERSION") && !it.startsWith("// FILE") !it.startsWith("// LANGUAGE_VERSION") && !it.startsWith("// FILE")
} }
@@ -10,7 +10,6 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtil
import com.intellij.psi.PsiJavaFile import com.intellij.psi.PsiJavaFile
import com.intellij.psi.codeStyle.CodeStyleManager import com.intellij.psi.codeStyle.CodeStyleManager
import com.intellij.testFramework.LightPlatformTestCase
import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices
import org.jetbrains.kotlin.idea.j2k.J2kPostProcessor import org.jetbrains.kotlin.idea.j2k.J2kPostProcessor
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
@@ -38,7 +37,7 @@ abstract class AbstractJavaToKotlinConverterSingleFileTest : AbstractJavaToKotli
val settings = ConverterSettings.defaultSettings.copy() val settings = ConverterSettings.defaultSettings.copy()
val directives = KotlinTestUtils.parseDirectives(javaCode) val directives = KotlinTestUtils.parseDirectives(javaCode)
for ((name, value) in directives) { for ((name, value) in directives.asMapOfSingleValues()) {
when (name) { when (name) {
"forceNotNullTypes" -> settings.forceNotNullTypes = value.toBoolean() "forceNotNullTypes" -> settings.forceNotNullTypes = value.toBoolean()
"specifyLocalVariableTypeByDefault" -> settings.specifyLocalVariableTypeByDefault = value.toBoolean() "specifyLocalVariableTypeByDefault" -> settings.specifyLocalVariableTypeByDefault = value.toBoolean()
@@ -30,10 +30,7 @@ import org.jetbrains.kotlin.js.test.utils.LineOutputToStringVisitor
import org.jetbrains.kotlin.js.util.TextOutputImpl import org.jetbrains.kotlin.js.util.TextOutputImpl
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.serialization.js.ModuleKind import org.jetbrains.kotlin.serialization.js.ModuleKind
import org.jetbrains.kotlin.test.KotlinBaseTest import org.jetbrains.kotlin.test.*
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.KotlinTestWithEnvironment
import org.jetbrains.kotlin.test.TestFiles
import org.jetbrains.kotlin.utils.DFS import org.jetbrains.kotlin.utils.DFS
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
import java.io.Closeable import java.io.Closeable
@@ -140,7 +137,7 @@ abstract class AbstractJsLineNumberTest : KotlinTestWithEnvironment() {
private val tmpDir = KotlinTestUtils.tmpDir("js-tests") private val tmpDir = KotlinTestUtils.tmpDir("js-tests")
private val defaultModule = TestModule(BasicBoxTest.TEST_MODULE, emptyList(), emptyList()) private val defaultModule = TestModule(BasicBoxTest.TEST_MODULE, emptyList(), emptyList())
override fun createFile(module: TestModule?, fileName: String, text: String, directives: Map<String, String>): TestFile? { override fun createFile(module: TestModule?, fileName: String, text: String, directives: Directives): TestFile? {
val currentModule = module ?: defaultModule val currentModule = module ?: defaultModule
val temporaryFile = File(tmpDir, "${currentModule.name}/$fileName") val temporaryFile = File(tmpDir, "${currentModule.name}/$fileName")
@@ -165,7 +162,7 @@ abstract class AbstractJsLineNumberTest : KotlinTestWithEnvironment() {
val files = mutableListOf<TestFile>() val files = mutableListOf<TestFile>()
} }
private class TestFile(val fileName: String, content: String, val module: TestModule, directives: Map<String, String?>) : private class TestFile(val fileName: String, content: String, val module: TestModule, directives: Directives) :
KotlinBaseTest.TestFile(fileName, content, directives) { KotlinBaseTest.TestFile(fileName, content, directives) {
init { init {
module.files += this module.files += this
@@ -778,7 +778,7 @@ abstract class BasicBoxTest(
val defaultModule = TestModule(TEST_MODULE, emptyList(), emptyList()) val defaultModule = TestModule(TEST_MODULE, emptyList(), emptyList())
var languageVersionSettings: LanguageVersionSettings? = null var languageVersionSettings: LanguageVersionSettings? = null
override fun createFile(module: TestModule?, fileName: String, text: String, directives: Map<String, String>): TestFile? { override fun createFile(module: TestModule?, fileName: String, text: String, directives: Directives): TestFile? {
val currentModule = module ?: defaultModule val currentModule = module ?: defaultModule
val ktFile = KtPsiFactory(project).createFile(text) val ktFile = KtPsiFactory(project).createFile(text)
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.KtPsiFactory import org.jetbrains.kotlin.psi.KtPsiFactory
import org.jetbrains.kotlin.test.Directives
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.KotlinTestWithEnvironment import org.jetbrains.kotlin.test.KotlinTestWithEnvironment
import org.jetbrains.kotlin.test.TestFiles import org.jetbrains.kotlin.test.TestFiles
@@ -158,7 +159,7 @@ abstract class BasicWasmBoxTest(
} }
private inner class TestFileFactoryImpl : TestFiles.TestFileFactoryNoModules<TestFile>(), Closeable { private inner class TestFileFactoryImpl : TestFiles.TestFileFactoryNoModules<TestFile>(), Closeable {
override fun create(fileName: String, text: String, directives: MutableMap<String, String>): TestFile { override fun create(fileName: String, text: String, directives: Directives): TestFile {
val ktFile = KtPsiFactory(project).createFile(text) val ktFile = KtPsiFactory(project).createFile(text)
val boxFunction = ktFile.declarations.find { it is KtNamedFunction && it.name == TEST_FUNCTION } val boxFunction = ktFile.declarations.find { it is KtNamedFunction && it.name == TEST_FUNCTION }
if (boxFunction != null) { if (boxFunction != null) {