Render platform name in multiplatform diagnostic tests
Prepend the platform name to the diagnostic in a common module, which is reported when sources of that common module are analyzed as a part of the platform source set: "<!JVM:...!> ... <!>". Fix some existing tests, mostly by adding "impl" to implementations
This commit is contained in:
@@ -154,8 +154,17 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
||||
for (testFile in files) {
|
||||
val module = testFile.module
|
||||
val isCommonModule = modules[module]!!.getMultiTargetPlatform() == MultiTargetPlatform.Common
|
||||
val implementingModules =
|
||||
if (!isCommonModule) emptyList()
|
||||
else modules.entries.filter { (testModule) -> module in testModule?.getDependencies().orEmpty() }
|
||||
val implementingModulesBindings = implementingModules.mapNotNull {
|
||||
(testModule, moduleDescriptor) ->
|
||||
val platform = moduleDescriptor.getCapability(MultiTargetPlatform.CAPABILITY)
|
||||
if (platform is MultiTargetPlatform.Specific) platform to moduleBindings[testModule]!!
|
||||
else null
|
||||
}
|
||||
ok = ok and testFile.getActualText(
|
||||
moduleBindings[module]!!, actualText,
|
||||
moduleBindings[module]!!, implementingModulesBindings, actualText,
|
||||
shouldSkipJvmSignatureDiagnostics(groupedByModule) || isCommonModule
|
||||
)
|
||||
}
|
||||
@@ -464,7 +473,7 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
||||
val nameSuffix = moduleName.substringAfterLast("-", "")
|
||||
val platform =
|
||||
if (nameSuffix.isEmpty()) null
|
||||
else if (nameSuffix == "common") MultiTargetPlatform.Common else MultiTargetPlatform.Specific(nameSuffix)
|
||||
else if (nameSuffix == "common") MultiTargetPlatform.Common else MultiTargetPlatform.Specific(nameSuffix.toUpperCase())
|
||||
val capabilities: Map<ModuleDescriptor.Capability<*>, Any?> =
|
||||
if (platform == null) emptyMap()
|
||||
else mapOf(MultiTargetPlatform.CAPABILITY to platform)
|
||||
|
||||
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.load.java.InternalFlexibleTypeTransformer
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.MultiTargetPlatform
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
import org.junit.Assert
|
||||
@@ -194,13 +195,19 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
|
||||
return result
|
||||
}
|
||||
|
||||
fun getActualText(bindingContext: BindingContext, actualText: StringBuilder, skipJvmSignatureDiagnostics: Boolean): Boolean {
|
||||
fun getActualText(
|
||||
bindingContext: BindingContext,
|
||||
implementingModulesBindings: List<Pair<MultiTargetPlatform, BindingContext>>,
|
||||
actualText: StringBuilder,
|
||||
skipJvmSignatureDiagnostics: Boolean
|
||||
): Boolean {
|
||||
if (this.ktFile == null) {
|
||||
// TODO: check java files too
|
||||
actualText.append(this.clearText)
|
||||
return true
|
||||
}
|
||||
|
||||
// TODO: report JVM signature diagnostics also for implementing modules
|
||||
val jvmSignatureDiagnostics = if (skipJvmSignatureDiagnostics)
|
||||
emptySet<ActualDiagnostic>()
|
||||
else
|
||||
@@ -209,14 +216,14 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
|
||||
val ok = booleanArrayOf(true)
|
||||
val diagnostics = ContainerUtil.filter(
|
||||
CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(
|
||||
bindingContext, ktFile, markDynamicCalls, dynamicCallDescriptors
|
||||
bindingContext, implementingModulesBindings, ktFile, markDynamicCalls, dynamicCallDescriptors
|
||||
) + jvmSignatureDiagnostics,
|
||||
{ whatDiagnosticsToConsider.value(it.diagnostic) }
|
||||
)
|
||||
|
||||
val diagnosticToExpectedDiagnostic = CheckerTestUtil.diagnosticsDiff(diagnosedRanges, diagnostics, object : CheckerTestUtil.DiagnosticDiffCallbacks {
|
||||
override fun missingDiagnostic(diagnostic: CheckerTestUtil.TextDiagnostic, expectedStart: Int, expectedEnd: Int) {
|
||||
val message = "Missing " + diagnostic.name + DiagnosticUtils.atLocation(ktFile, TextRange(expectedStart, expectedEnd))
|
||||
val message = "Missing " + diagnostic.description + DiagnosticUtils.atLocation(ktFile, TextRange(expectedStart, expectedEnd))
|
||||
System.err.println(message)
|
||||
ok[0] = false
|
||||
}
|
||||
@@ -235,7 +242,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
|
||||
}
|
||||
|
||||
override fun unexpectedDiagnostic(diagnostic: CheckerTestUtil.TextDiagnostic, actualStart: Int, actualEnd: Int) {
|
||||
val message = "Unexpected ${diagnostic.name}${DiagnosticUtils.atLocation(ktFile, TextRange(actualStart, actualEnd))}"
|
||||
val message = "Unexpected ${diagnostic.description}${DiagnosticUtils.atLocation(ktFile, TextRange(actualStart, actualEnd))}"
|
||||
System.err.println(message)
|
||||
ok[0] = false
|
||||
}
|
||||
@@ -256,7 +263,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
|
||||
for (declaration in declarations) {
|
||||
val diagnostics = getJvmSignatureDiagnostics(declaration, bindingContext.diagnostics,
|
||||
GlobalSearchScope.allScope(project)) ?: continue
|
||||
jvmSignatureDiagnostics.addAll(diagnostics.forElement(declaration).map { ActualDiagnostic(it) })
|
||||
jvmSignatureDiagnostics.addAll(diagnostics.forElement(declaration).map { ActualDiagnostic(it, null) })
|
||||
}
|
||||
return jvmSignatureDiagnostics
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user