blob: 72137537d6c63557b174b6b6f909ffab882ee090 [file] [log] [blame]
/*
* 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.model
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
import org.jetbrains.kotlin.test.services.ServiceRegistrationData
import org.jetbrains.kotlin.test.services.TestServices
interface ServicesAndDirectivesContainer {
val additionalServices: List<ServiceRegistrationData>
get() = emptyList()
val directiveContainers: List<DirectivesContainer>
get() = emptyList()
}
abstract class AbstractTestFacade<I : ResultingArtifact<I>, O : ResultingArtifact<O>> : ServicesAndDirectivesContainer {
abstract val inputKind: TestArtifactKind<I>
abstract val outputKind: TestArtifactKind<O>
abstract fun transform(module: TestModule, inputArtifact: I): O?
abstract fun shouldRunAnalysis(module: TestModule): Boolean
}
abstract class FrontendFacade<R : ResultingArtifact.FrontendOutput<R>>(
val testServices: TestServices,
final override val outputKind: FrontendKind<R>
) : AbstractTestFacade<ResultingArtifact.Source, R>() {
final override val inputKind: TestArtifactKind<ResultingArtifact.Source>
get() = SourcesKind
override fun shouldRunAnalysis(module: TestModule): Boolean {
return module.frontendKind == outputKind
}
abstract fun analyze(module: TestModule): R
final override fun transform(module: TestModule, inputArtifact: ResultingArtifact.Source): R {
// TODO: pass sources
return analyze(module)
}
}
abstract class Frontend2BackendConverter<R : ResultingArtifact.FrontendOutput<R>, I : ResultingArtifact.BackendInput<I>>(
val testServices: TestServices,
final override val inputKind: FrontendKind<R>,
final override val outputKind: BackendKind<I>
) : AbstractTestFacade<R, I>() {
override fun shouldRunAnalysis(module: TestModule): Boolean {
return module.backendKind == outputKind
}
}
abstract class BackendFacade<I : ResultingArtifact.BackendInput<I>, A : ResultingArtifact.Binary<A>>(
val testServices: TestServices,
final override val inputKind: BackendKind<I>,
final override val outputKind: BinaryKind<A>
) : AbstractTestFacade<I, A>() {
override fun shouldRunAnalysis(module: TestModule): Boolean {
return module.backendKind == inputKind && module.binaryKind == outputKind
}
}