Introduce language feature for NI, remove old setting

This commit is contained in:
Mikhail Zarechenskiy
2017-10-20 15:46:33 +03:00
parent 27e7f13335
commit 73b4e24d54
21 changed files with 80 additions and 82 deletions
@@ -49,7 +49,6 @@ import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.platform.JvmBuiltIns
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.*
import org.jetbrains.kotlin.resolve.calls.USE_NEW_INFERENCE
import org.jetbrains.kotlin.resolve.calls.model.MutableResolvedCall
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
@@ -126,7 +125,7 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
}
moduleBindings[testModule] = result.bindingContext
checkAllResolvedCallsAreCompleted(ktFiles, result.bindingContext)
checkAllResolvedCallsAreCompleted(ktFiles, result.bindingContext, languageVersionSettings)
}
// We want to always create a test data file (txt) if it was missing,
@@ -524,7 +523,11 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
setDependencies(this, builtIns.builtInsModule)
}
private fun checkAllResolvedCallsAreCompleted(ktFiles: List<KtFile>, bindingContext: BindingContext) {
private fun checkAllResolvedCallsAreCompleted(
ktFiles: List<KtFile>,
bindingContext: BindingContext,
configuredLanguageVersionSettings: LanguageVersionSettings
) {
if (ktFiles.any { file -> AnalyzingUtils.getSyntaxErrorRanges(file).isNotEmpty() }) return
val resolvedCallsEntries = bindingContext.getSliceContents(BindingContext.RESOLVED_CALL)
@@ -533,16 +536,16 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
val lineAndColumn = DiagnosticUtils.getLineAndColumnInPsiFile(element.containingFile, element.textRange)
if (!USE_NEW_INFERENCE) {
if (!configuredLanguageVersionSettings.supportsFeature(LanguageFeature.NewInference)) {
assertTrue("Resolved call for '${element.text}'$lineAndColumn is not completed",
(resolvedCall as MutableResolvedCall<*>).isCompleted)
}
}
checkResolvedCallsInDiagnostics(bindingContext)
checkResolvedCallsInDiagnostics(bindingContext, configuredLanguageVersionSettings)
}
private fun checkResolvedCallsInDiagnostics(bindingContext: BindingContext) {
private fun checkResolvedCallsInDiagnostics(bindingContext: BindingContext, configuredLanguageVersionSettings: LanguageVersionSettings) {
val diagnosticsStoringResolvedCalls1 = setOf(
OVERLOAD_RESOLUTION_AMBIGUITY, NONE_APPLICABLE, CANNOT_COMPLETE_RESOLVE, UNRESOLVED_REFERENCE_WRONG_RECEIVER,
ASSIGN_OPERATOR_AMBIGUITY, ITERATOR_AMBIGUITY
@@ -554,19 +557,23 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
for (diagnostic in bindingContext.diagnostics) {
when (diagnostic.factory) {
in diagnosticsStoringResolvedCalls1 -> assertResolvedCallsAreCompleted(
diagnostic, DiagnosticFactory.cast(diagnostic, diagnosticsStoringResolvedCalls1).a
diagnostic, DiagnosticFactory.cast(diagnostic, diagnosticsStoringResolvedCalls1).a, configuredLanguageVersionSettings
)
in diagnosticsStoringResolvedCalls2 -> assertResolvedCallsAreCompleted(
diagnostic, DiagnosticFactory.cast(diagnostic, diagnosticsStoringResolvedCalls2).b
diagnostic, DiagnosticFactory.cast(diagnostic, diagnosticsStoringResolvedCalls2).b, configuredLanguageVersionSettings
)
}
}
}
private fun assertResolvedCallsAreCompleted(diagnostic: Diagnostic, resolvedCalls: Collection<ResolvedCall<*>>) {
private fun assertResolvedCallsAreCompleted(
diagnostic: Diagnostic,
resolvedCalls: Collection<ResolvedCall<*>>,
configuredLanguageVersionSettings: LanguageVersionSettings
) {
val element = diagnostic.psiElement
val lineAndColumn = DiagnosticUtils.getLineAndColumnInPsiFile(element.containingFile, element.textRange)
if (USE_NEW_INFERENCE) return
if (configuredLanguageVersionSettings.supportsFeature(LanguageFeature.NewInference)) return
assertTrue("Resolved calls stored in ${diagnostic.factory.name}\nfor '${element.text}'$lineAndColumn are not completed",
resolvedCalls.all { (it as MutableResolvedCall<*>).isCompleted })