private async resolveSourceFiles()

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)
  }