in src/test-explorer/resolver.ts [428:490]
private async resolveSourceFiles(
parentTest: vscode.TestItem,
cancellationToken?: vscode.CancellationToken
) {
const conn = await this.buildServer.getConnection()
const parentMetadata: TestCaseInfo | undefined =
this.store.testCaseMetadata.get(parentTest)
if (!parentMetadata?.target) return
const parentTarget = parentMetadata.target
const params: bsp.SourcesParams = {
targets: [parentTarget.id],
}
let result = await conn.sendRequest(
bsp.BuildTargetSources.type,
params,
cancellationToken
)
const hasSources = result.items.some(item => item.sources.length > 0)
const languageTools =
this.languageToolManager.getLanguageTools(parentTarget)
if (!hasSources && parentTarget.dependencies.length === 0) {
const inferredResult = languageTools.inferSourcesFromTarget(
parentTarget.id.uri,
parentTarget.baseDirectory
)
if (inferredResult) {
result = inferredResult
}
} else if (!hasSources && parentTarget.dependencies.length > 0) {
const depParams: bsp.SourcesParams = {
targets: parentTarget.dependencies,
}
result = await conn.sendRequest(
bsp.BuildTargetSources.type,
depParams,
cancellationToken
)
}
result.items.forEach(item => {
item.sources = item.sources.filter(s =>
languageTools.isValidTestSource(s.uri)
)
})
const hasValidSources = result.items.some(item => item.sources.length > 0)
if (!hasValidSources) {
const inferredResult = languageTools.inferSourcesFromTarget(
parentTarget.id.uri,
parentTarget.baseDirectory
)
if (inferredResult) {
result = inferredResult
}
}
this.store.cacheSourcesResult(params, result)
await this.processTargetSourcesResult(parentTest, result)
}