Load compiler language version settings for resolved calls tests

This commit is contained in:
Mikhail Zarechenskiy
2017-11-08 11:22:32 +03:00
parent 20bf238006
commit 91a6591b70
3 changed files with 21 additions and 19 deletions
@@ -16,7 +16,9 @@
package org.jetbrains.kotlin.checkers package org.jetbrains.kotlin.checkers
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.junit.Assert import org.junit.Assert
import java.util.* import java.util.*
import java.util.regex.Pattern import java.util.regex.Pattern
@@ -62,6 +64,14 @@ fun parseLanguageVersionSettings(directiveMap: Map<String, String>): LanguageVer
return CompilerTestLanguageVersionSettings(languageFeatures, apiVersion, LanguageVersion.LATEST_STABLE) return CompilerTestLanguageVersionSettings(languageFeatures, apiVersion, LanguageVersion.LATEST_STABLE)
} }
fun setupLanguageVersionSettings(originalFileText: String, environment: KotlinCoreEnvironment) {
val directives = KotlinTestUtils.parseDirectives(originalFileText)
val languageVersionSettings = parseLanguageVersionSettings(directives)
if (languageVersionSettings != null) {
environment.configuration.languageVersionSettings = languageVersionSettings
}
}
private val languagePattern = Pattern.compile("(\\+|\\-|warn:)(\\w+)\\s*") private val languagePattern = Pattern.compile("(\\+|\\-|warn:)(\\w+)\\s*")
private fun collectLanguageFeatureMap(directives: String): Map<LanguageFeature, LanguageFeature.State> { private fun collectLanguageFeatureMap(directives: String): Map<LanguageFeature, LanguageFeature.State> {
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2015 JetBrains s.r.o. * Copyright 2010-2017 JetBrains s.r.o.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.resolve.calls
import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtil
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.checkers.setupLanguageVersionSettings
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
@@ -51,6 +52,8 @@ abstract class AbstractResolvedCallsTest : KotlinTestWithEnvironment() {
val originalText = KotlinTestUtils.doLoadFile(File(filePath))!! val originalText = KotlinTestUtils.doLoadFile(File(filePath))!!
val (text, carets) = extractCarets(originalText) val (text, carets) = extractCarets(originalText)
setupLanguageVersionSettings(originalText, environment)
val ktFile = KtPsiFactory(project).createFile(text) val ktFile = KtPsiFactory(project).createFile(text)
val bindingContext = JvmResolveUtil.analyze(ktFile, environment).bindingContext val bindingContext = JvmResolveUtil.analyze(ktFile, environment).bindingContext
@@ -32,9 +32,8 @@ import org.jetbrains.kotlin.cfg.pseudocode.PseudocodeUtil;
import org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction; import org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction;
import org.jetbrains.kotlin.cfg.pseudocode.instructions.InstructionImpl; import org.jetbrains.kotlin.cfg.pseudocode.instructions.InstructionImpl;
import org.jetbrains.kotlin.cfg.pseudocode.instructions.special.LocalFunctionDeclarationInstruction; import org.jetbrains.kotlin.cfg.pseudocode.instructions.special.LocalFunctionDeclarationInstruction;
import org.jetbrains.kotlin.checkers.CompilerTestLanguageVersionSettingsKt;
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment; import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
import org.jetbrains.kotlin.config.CommonConfigurationKeysKt;
import org.jetbrains.kotlin.config.LanguageVersionSettings;
import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.test.ConfigurationKind; import org.jetbrains.kotlin.test.ConfigurationKind;
@@ -45,11 +44,8 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import static org.jetbrains.kotlin.checkers.CompilerTestLanguageVersionSettingsKt.parseLanguageVersionSettings;
public abstract class AbstractPseudocodeTest extends KotlinTestWithEnvironmentManagement { public abstract class AbstractPseudocodeTest extends KotlinTestWithEnvironmentManagement {
protected void doTestWithStdLib(String fileName) throws Exception { protected void doTestWithStdLib(String fileName) throws Exception {
doTestWithEnvironment(fileName, createEnvironmentWithMockJdk(ConfigurationKind.NO_KOTLIN_REFLECT)); doTestWithEnvironment(fileName, createEnvironmentWithMockJdk(ConfigurationKind.NO_KOTLIN_REFLECT));
@@ -59,23 +55,16 @@ public abstract class AbstractPseudocodeTest extends KotlinTestWithEnvironmentMa
doTestWithEnvironment(fileName, createEnvironmentWithMockJdk(ConfigurationKind.JDK_ONLY)); doTestWithEnvironment(fileName, createEnvironmentWithMockJdk(ConfigurationKind.JDK_ONLY));
} }
private static void setupLanguageVersionSettings(File file, KotlinCoreEnvironment environment) throws IOException {
String fileText = FileUtil.loadFile(file, true);
Map<String, String> directives = KotlinTestUtils.parseDirectives(fileText);
LanguageVersionSettings languageVersionSettings = parseLanguageVersionSettings(directives);
if (languageVersionSettings != null) {
CommonConfigurationKeysKt.setLanguageVersionSettings(environment.getConfiguration(), languageVersionSettings);
}
}
private void doTestWithEnvironment(String fileName, KotlinCoreEnvironment environment) throws Exception { private void doTestWithEnvironment(String fileName, KotlinCoreEnvironment environment) throws Exception {
File file = new File(fileName); File file = new File(fileName);
setupLanguageVersionSettings(file, environment);
KtFile jetFile = KotlinTestUtils.loadJetFile(environment.getProject(), file); CompilerTestLanguageVersionSettingsKt.setupLanguageVersionSettings(FileUtil.loadFile(file, true), environment);
KtFile ktFile = KotlinTestUtils.loadJetFile(environment.getProject(), file);
SetMultimap<KtElement, Pseudocode> data = LinkedHashMultimap.create(); SetMultimap<KtElement, Pseudocode> data = LinkedHashMultimap.create();
AnalysisResult analysisResult = KotlinTestUtils.analyzeFile(jetFile, environment); AnalysisResult analysisResult = KotlinTestUtils.analyzeFile(ktFile, environment);
List<KtDeclaration> declarations = jetFile.getDeclarations(); List<KtDeclaration> declarations = ktFile.getDeclarations();
BindingContext bindingContext = analysisResult.getBindingContext(); BindingContext bindingContext = analysisResult.getBindingContext();
for (KtDeclaration declaration : declarations) { for (KtDeclaration declaration : declarations) {
addDeclaration(data, bindingContext, declaration); addDeclaration(data, bindingContext, declaration);