Load compiler language version settings for resolved calls tests
This commit is contained in:
+10
@@ -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> {
|
||||||
|
|||||||
+4
-1
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user