Skip to content

Commit ec42728

Browse files
Only construct DatabaseFetcher once in extension.ts
1 parent 9fa6d99 commit ec42728

File tree

8 files changed

+38
-61
lines changed

8 files changed

+38
-61
lines changed

extensions/ql-vscode/src/databases/local-databases-ui.ts

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import {
4242
showAndLogExceptionWithTelemetry,
4343
showAndLogErrorMessage,
4444
} from "../common/logging";
45-
import { DatabaseFetcher } from "./database-fetcher";
45+
import type { DatabaseFetcher } from "./database-fetcher";
4646
import { asError, asyncFilter, getErrorMessage } from "../common/helpers-pure";
4747
import type { QueryRunner } from "../query-server";
4848
import type { App } from "../common/app";
@@ -248,6 +248,7 @@ export class DatabaseUI extends DisposableObject {
248248
public constructor(
249249
private app: App,
250250
private databaseManager: DatabaseManager,
251+
private readonly databaseFetcher: DatabaseFetcher,
251252
languageContext: LanguageContextStore,
252253
private readonly queryServer: QueryRunner,
253254
private readonly storagePath: string,
@@ -536,13 +537,7 @@ export class DatabaseUI extends DisposableObject {
536537
private async handleChooseDatabaseInternet(): Promise<void> {
537538
return withProgress(
538539
async (progress) => {
539-
const databaseFetcher = new DatabaseFetcher(
540-
this.app,
541-
this.databaseManager,
542-
this.storagePath,
543-
this.queryServer.cliServer,
544-
);
545-
await databaseFetcher.promptImportInternetDatabase(progress);
540+
await this.databaseFetcher.promptImportInternetDatabase(progress);
546541
},
547542
{
548543
title: "Adding database from URL",
@@ -553,13 +548,7 @@ export class DatabaseUI extends DisposableObject {
553548
private async handleChooseDatabaseGithub(): Promise<void> {
554549
return withProgress(
555550
async (progress) => {
556-
const databaseFetcher = new DatabaseFetcher(
557-
this.app,
558-
this.databaseManager,
559-
this.storagePath,
560-
this.queryServer.cliServer,
561-
);
562-
await databaseFetcher.promptImportGithubDatabase(progress);
551+
await this.databaseFetcher.promptImportGithubDatabase(progress);
563552
},
564553
{
565554
title: "Adding database from GitHub",
@@ -708,13 +697,7 @@ export class DatabaseUI extends DisposableObject {
708697
try {
709698
// Assume user has selected an archive if the file has a .zip extension
710699
if (uri.path.endsWith(".zip")) {
711-
const databaseFetcher = new DatabaseFetcher(
712-
this.app,
713-
this.databaseManager,
714-
this.storagePath,
715-
this.queryServer.cliServer,
716-
);
717-
await databaseFetcher.importArchiveDatabase(
700+
await this.databaseFetcher.importArchiveDatabase(
718701
uri.toString(true),
719702
progress,
720703
);
@@ -957,13 +940,7 @@ export class DatabaseUI extends DisposableObject {
957940
} else {
958941
// we are selecting a database archive. Must unzip into a workspace-controlled area
959942
// before importing.
960-
const databaseFetcher = new DatabaseFetcher(
961-
this.app,
962-
this.databaseManager,
963-
this.storagePath,
964-
this.queryServer.cliServer,
965-
);
966-
return await databaseFetcher.importArchiveDatabase(
943+
return await this.databaseFetcher.importArchiveDatabase(
967944
uri.toString(true),
968945
progress,
969946
);

extensions/ql-vscode/src/extension.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -800,12 +800,20 @@ async function activateWithInstalledDistribution(
800800
// Let this run async.
801801
void dbm.loadPersistedState();
802802

803+
const databaseFetcher = new DatabaseFetcher(
804+
app,
805+
dbm,
806+
getContextStoragePath(ctx),
807+
cliServer,
808+
);
809+
803810
ctx.subscriptions.push(dbm);
804811

805812
void extLogger.log("Initializing database panel.");
806813
const databaseUI = new DatabaseUI(
807814
app,
808815
dbm,
816+
databaseFetcher,
809817
languageContext,
810818
qs,
811819
getContextStoragePath(ctx),
@@ -882,7 +890,7 @@ async function activateWithInstalledDistribution(
882890
await GitHubDatabasesModule.initialize(
883891
app,
884892
dbm,
885-
new DatabaseFetcher(app, dbm, getContextStoragePath(ctx), cliServer),
893+
databaseFetcher,
886894
githubDatabaseConfigListener,
887895
);
888896

@@ -953,6 +961,7 @@ async function activateWithInstalledDistribution(
953961
qs,
954962
qhm,
955963
dbm,
964+
databaseFetcher,
956965
cliServer,
957966
databaseUI,
958967
localQueryResultsView,
@@ -977,6 +986,7 @@ async function activateWithInstalledDistribution(
977986
const modelEditorModule = await ModelEditorModule.initialize(
978987
app,
979988
dbm,
989+
databaseFetcher,
980990
variantAnalysisManager,
981991
cliServer,
982992
qs,

extensions/ql-vscode/src/local-queries/local-queries.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ import type { QueryTreeViewItem } from "../queries-panel/query-tree-view-item";
5151
import { tryGetQueryLanguage } from "../common/query-language";
5252
import type { LanguageContextStore } from "../language-context-store";
5353
import type { ExtensionApp } from "../common/vscode/vscode-app";
54-
import { DatabaseFetcher } from "../databases/database-fetcher";
54+
import type { DatabaseFetcher } from "../databases/database-fetcher";
5555

5656
export enum QuickEvalType {
5757
None,
@@ -67,6 +67,7 @@ export class LocalQueries extends DisposableObject {
6767
private readonly queryRunner: QueryRunner,
6868
private readonly queryHistoryManager: QueryHistoryManager,
6969
private readonly databaseManager: DatabaseManager,
70+
private readonly databaseFetcher: DatabaseFetcher,
7071
private readonly cliServer: CodeQLCliServer,
7172
private readonly databaseUI: DatabaseUI,
7273
private readonly localQueryResultsView: ResultsView,
@@ -323,21 +324,13 @@ export class LocalQueries extends DisposableObject {
323324
private async createSkeletonQuery(): Promise<void> {
324325
await withProgress(
325326
async (progress: ProgressCallback) => {
326-
const contextStoragePath =
327-
this.app.workspaceStoragePath || this.app.globalStoragePath;
328327
const language = this.languageContextStore.selectedLanguage;
329-
const databaseFetcher = new DatabaseFetcher(
330-
this.app,
331-
this.databaseManager,
332-
contextStoragePath,
333-
this.cliServer,
334-
);
335328
const skeletonQueryWizard = new SkeletonQueryWizard(
336329
this.cliServer,
337330
progress,
338331
this.app,
339332
this.databaseManager,
340-
databaseFetcher,
333+
this.databaseFetcher,
341334
this.selectedQueryTreeViewItems,
342335
language,
343336
);

extensions/ql-vscode/src/model-editor/model-editor-module.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { INITIAL_MODE } from "./shared/mode";
3232
import { isSupportedLanguage } from "./supported-languages";
3333
import { DefaultNotifier, checkConsistency } from "./consistency-check";
3434
import type { VariantAnalysisManager } from "../variant-analysis/variant-analysis-manager";
35+
import type { DatabaseFetcher } from "../databases/database-fetcher";
3536

3637
export class ModelEditorModule extends DisposableObject {
3738
private readonly queryStorageDir: string;
@@ -42,6 +43,7 @@ export class ModelEditorModule extends DisposableObject {
4243
private constructor(
4344
private readonly app: App,
4445
private readonly databaseManager: DatabaseManager,
46+
private readonly databaseFetcher: DatabaseFetcher,
4547
private readonly variantAnalysisManager: VariantAnalysisManager,
4648
private readonly cliServer: CodeQLCliServer,
4749
private readonly queryRunner: QueryRunner,
@@ -65,6 +67,7 @@ export class ModelEditorModule extends DisposableObject {
6567
public static async initialize(
6668
app: App,
6769
databaseManager: DatabaseManager,
70+
databaseFetcher: DatabaseFetcher,
6871
variantAnalysisManager: VariantAnalysisManager,
6972
cliServer: CodeQLCliServer,
7073
queryRunner: QueryRunner,
@@ -73,6 +76,7 @@ export class ModelEditorModule extends DisposableObject {
7376
const modelEditorModule = new ModelEditorModule(
7477
app,
7578
databaseManager,
79+
databaseFetcher,
7680
variantAnalysisManager,
7781
cliServer,
7882
queryRunner,
@@ -236,6 +240,7 @@ export class ModelEditorModule extends DisposableObject {
236240
this.modelingEvents,
237241
this.modelConfig,
238242
this.databaseManager,
243+
this.databaseFetcher,
239244
this.variantAnalysisManager,
240245
this.cliServer,
241246
this.queryRunner,

extensions/ql-vscode/src/model-editor/model-editor-view.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import type {
2929
} from "../databases/local-databases";
3030
import type { CodeQLCliServer } from "../codeql-cli/cli";
3131
import { asError, assertNever, getErrorMessage } from "../common/helpers-pure";
32-
import { DatabaseFetcher } from "../databases/database-fetcher";
32+
import type { DatabaseFetcher } from "../databases/database-fetcher";
3333
import type { App } from "../common/app";
3434
import { redactableError } from "../common/errors";
3535
import {
@@ -86,6 +86,7 @@ export class ModelEditorView extends AbstractWebview<
8686
private readonly modelingEvents: ModelingEvents,
8787
private readonly modelConfig: ModelConfigListener,
8888
private readonly databaseManager: DatabaseManager,
89+
private readonly databaseFetcher: DatabaseFetcher,
8990
private readonly variantAnalysisManager: VariantAnalysisManager,
9091
private readonly cliServer: CodeQLCliServer,
9192
private readonly queryRunner: QueryRunner,
@@ -848,6 +849,7 @@ export class ModelEditorView extends AbstractWebview<
848849
this.modelingEvents,
849850
this.modelConfig,
850851
this.databaseManager,
852+
this.databaseFetcher,
851853
this.variantAnalysisManager,
852854
this.cliServer,
853855
this.queryRunner,
@@ -916,13 +918,7 @@ export class ModelEditorView extends AbstractWebview<
916918
// the user to import the library database. We need to have the database
917919
// imported to the query server, so we need to register it to our workspace.
918920
const makeSelected = false;
919-
const databaseFetcher = new DatabaseFetcher(
920-
this.app,
921-
this.databaseManager,
922-
this.app.workspaceStoragePath ?? this.app.globalStoragePath,
923-
this.cliServer,
924-
);
925-
const addedDatabase = await databaseFetcher.promptImportGithubDatabase(
921+
const addedDatabase = await this.databaseFetcher.promptImportGithubDatabase(
926922
progress,
927923
this.databaseItem.language,
928924
undefined,

extensions/ql-vscode/test/vscode-tests/no-workspace/databases/github-databases/github-databases-module.test.ts

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { createMockApp } from "../../../../__mocks__/appMock";
44
import type { App } from "../../../../../src/common/app";
55
import type { DatabaseManager } from "../../../../../src/databases/local-databases";
66
import { mockEmptyDatabaseManager } from "../../query-testing/test-runner-helpers";
7-
import type { CodeQLCliServer } from "../../../../../src/codeql-cli/cli";
87
import { mockDatabaseItem, mockedObject } from "../../../utils/mocking.helpers";
98
import type { GitHubDatabaseConfig } from "../../../../../src/config";
109
import { GitHubDatabasesModule } from "../../../../../src/databases/github-databases";
@@ -16,15 +15,13 @@ import * as githubDatabasesApi from "../../../../../src/databases/github-databas
1615
import * as githubDatabasesDownload from "../../../../../src/databases/github-databases/download";
1716
import * as githubDatabasesUpdates from "../../../../../src/databases/github-databases/updates";
1817
import type { DatabaseUpdate } from "../../../../../src/databases/github-databases/updates";
19-
import { DatabaseFetcher } from "../../../../../src/databases/database-fetcher";
18+
import type { DatabaseFetcher } from "../../../../../src/databases/database-fetcher";
2019

2120
describe("GitHubDatabasesModule", () => {
2221
describe("promptGitHubRepositoryDownload", () => {
2322
let app: App;
2423
let databaseManager: DatabaseManager;
25-
let databaseStoragePath: string;
26-
let cliServer: CodeQLCliServer;
27-
let databaseFetcher: DatabaseFetcher;
24+
const databaseFetcher = mockedObject<DatabaseFetcher>({});
2825
let config: GitHubDatabaseConfig;
2926
let gitHubDatabasesModule: GitHubDatabasesModule;
3027

@@ -66,14 +63,6 @@ describe("GitHubDatabasesModule", () => {
6663
beforeEach(() => {
6764
app = createMockApp();
6865
databaseManager = mockEmptyDatabaseManager();
69-
databaseStoragePath = "/a/b/some-path";
70-
cliServer = mockedObject<CodeQLCliServer>({});
71-
databaseFetcher = new DatabaseFetcher(
72-
app,
73-
databaseManager,
74-
databaseStoragePath,
75-
cliServer,
76-
);
7766
config = mockedObject<GitHubDatabaseConfig>({
7867
download: "ask",
7968
update: "ask",

extensions/ql-vscode/test/vscode-tests/no-workspace/databases/local-databases-ui.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { testDisposeHandler } from "../../test-dispose-handler";
2020
import { createMockApp } from "../../../__mocks__/appMock";
2121
import { QueryLanguage } from "../../../../src/common/query-language";
2222
import { mockedQuickPickItem, mockedObject } from "../../utils/mocking.helpers";
23+
import type { DatabaseFetcher } from "../../../../src/databases/database-fetcher";
2324

2425
describe("local-databases-ui", () => {
2526
const storageDir = dirSync({ unsafeCleanup: true }).name;
@@ -104,6 +105,7 @@ describe("local-databases-ui", () => {
104105
},
105106
setCurrentDatabaseItem: () => {},
106107
} as any,
108+
mockedObject<DatabaseFetcher>({}),
107109
{
108110
onLanguageContextChanged: () => {
109111
/**/
@@ -142,6 +144,7 @@ describe("local-databases-ui", () => {
142144
setCurrentDatabaseItem: () => {},
143145
currentDatabaseItem: { databaseUri: Uri.file(db1) },
144146
} as any,
147+
mockedObject<DatabaseFetcher>({}),
145148
{
146149
onLanguageContextChanged: () => {
147150
/**/
@@ -178,6 +181,7 @@ describe("local-databases-ui", () => {
178181
const databaseUI = new DatabaseUI(
179182
app,
180183
databaseManager,
184+
mockedObject<DatabaseFetcher>({}),
181185
{
182186
onLanguageContextChanged: () => {
183187
/**/

extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/model-editor-view.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import type { ModelConfigListener } from "../../../../src/config";
1313
import { createMockModelingEvents } from "../../../__mocks__/model-editor/modelingEventsMock";
1414
import { QueryLanguage } from "../../../../src/common/query-language";
1515
import type { VariantAnalysisManager } from "../../../../src/variant-analysis/variant-analysis-manager";
16+
import type { DatabaseFetcher } from "../../../../src/databases/database-fetcher";
1617

1718
describe("ModelEditorView", () => {
1819
const app = createMockApp({});
@@ -22,6 +23,7 @@ describe("ModelEditorView", () => {
2223
onDidChangeConfiguration: jest.fn(),
2324
});
2425
const databaseManager = mockEmptyDatabaseManager();
26+
const databaseFetcher = mockedObject<DatabaseFetcher>({});
2527
const variantAnalysisManager = mockedObject<VariantAnalysisManager>({});
2628
const cliServer = mockedObject<CodeQLCliServer>({});
2729
const queryRunner = mockedObject<QueryRunner>({});
@@ -50,6 +52,7 @@ describe("ModelEditorView", () => {
5052
modelingEvents,
5153
modelConfig,
5254
databaseManager,
55+
databaseFetcher,
5356
variantAnalysisManager,
5457
cliServer,
5558
queryRunner,

0 commit comments

Comments
 (0)