Skip to content

Commit

Permalink
Further perf improvements & code org
Browse files Browse the repository at this point in the history
  • Loading branch information
badsyntax committed Oct 5, 2020
1 parent a1b7270 commit 197af60
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 50 deletions.
19 changes: 8 additions & 11 deletions extension/src/tasks/taskUtil.ts
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ function getVSCodeTasksFromGradleProject(
gradleProject: GradleProject,
client: GradleClient
): vscode.Task[] {
const projects: Array<GradleProject> = [gradleProject];
let projects: Array<GradleProject> = [gradleProject];
const vsCodeTasks: vscode.Task[] = [];
while (projects.length) {
const project = projects.pop();
Expand All @@ -261,9 +261,7 @@ function getVSCodeTasksFromGradleProject(
)
);
}
for (const childProject of project!.getProjectsList()) {
projects.push(childProject);
}
projects = projects.concat(project!.getProjectsList());
}

return vsCodeTasks;
Expand All @@ -287,14 +285,13 @@ export async function loadTasksForProjectRoots(
const gradleBuild = await getGradleBuild(client, rootProject);
const gradleProject = gradleBuild && gradleBuild.getProject();
if (gradleProject) {
allTasks = allTasks.concat(
getVSCodeTasksFromGradleProject(
taskTerminalsStore,
rootProject,
gradleProject,
client
)
const vsCodeTasks = getVSCodeTasksFromGradleProject(
taskTerminalsStore,
rootProject,
gradleProject,
client
);
allTasks = allTasks.concat(vsCodeTasks);
}
}
}
Expand Down
10 changes: 6 additions & 4 deletions extension/src/terminal/GradleRunnerTerminal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const nlRegExp = new RegExp(`${NL}([^${CR}]|$)`, 'g');

export class GradleRunnerTerminal {
private readonly writeEmitter = new vscode.EventEmitter<string>();
private stdOutLoggerStream: LoggerStream;
private stdOutLoggerStream: LoggerStream | undefined;
private readonly closeEmitter = new vscode.EventEmitter<void>();
private task?: vscode.Task;
public readonly onDidWrite: vscode.Event<string> = this.writeEmitter.event;
Expand All @@ -29,8 +29,10 @@ export class GradleRunnerTerminal {
private readonly cancellationKey: string,
private readonly client: GradleClient
) {
// TODO: this is only needed for the tests. Find a better way to test task output in the tests.
this.stdOutLoggerStream = new LoggerStream(logger, LogVerbosity.INFO);
if (isTest()) {
// TODO: this is only needed for the tests. Find a better way to test task output in the tests.
this.stdOutLoggerStream = new LoggerStream(logger, LogVerbosity.INFO);
}
}

public async open(): Promise<void> {
Expand Down Expand Up @@ -121,7 +123,7 @@ export class GradleRunnerTerminal {
private handleOutput = (output: Output): void => {
const messageBytes = output.getOutputBytes_asU8();
if (messageBytes.length) {
if (isTest()) {
if (isTest() && this.stdOutLoggerStream) {
this.stdOutLoggerStream.write(messageBytes);
}
this.write(new util.TextDecoder('utf-8').decode(messageBytes));
Expand Down
66 changes: 31 additions & 35 deletions extension/src/test/unit/taskUtil.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,23 @@ import { TaskTerminalsStore } from '../../stores';
import { loadTasksForProjectRoots } from '../../tasks/taskUtil';
import { buildMockClient, getSuiteName } from '../testUtil';

const mockWorkspaceFolder: vscode.WorkspaceFolder = {
index: 0,
uri: vscode.Uri.file('folder1'),
name: 'folder1',
};

const mockRootProject = new RootProject(
mockWorkspaceFolder,
vscode.Uri.file('folder1'),
{
tasks: [],
clean: false,
}
);
const mockClient = buildMockClient();
const mockTaskTerminalsStore = new TaskTerminalsStore();

function buildProject(
project: string,
rootProject: string,
Expand Down Expand Up @@ -61,23 +78,6 @@ function getDeeplyNestedProjectTree(
return projects;
}

const workspaceFolder: vscode.WorkspaceFolder = {
index: 0,
uri: vscode.Uri.file('folder1'),
name: 'folder1',
};

const rootProject = new RootProject(
workspaceFolder,
vscode.Uri.file('folder1'),
{
tasks: [],
clean: false,
}
);
const client = buildMockClient();
const taskTerminalsStore = new TaskTerminalsStore();

describe(getSuiteName('taskUtil'), () => {
afterEach(() => {
sinon.restore();
Expand All @@ -99,11 +99,13 @@ describe(getSuiteName('taskUtil'), () => {
);
rootGradleProject.setProjectsList([childGradleProject]);
gradleBuild.setProject(rootGradleProject);
client.getBuild.resolves(Promise.resolve(gradleBuild));
mockClient.getBuild.resolves(Promise.resolve(gradleBuild));

const tasks = await loadTasksForProjectRoots(taskTerminalsStore, client, [
rootProject,
]);
const tasks = await loadTasksForProjectRoots(
mockTaskTerminalsStore,
mockClient,
[mockRootProject]
);
assert.strictEqual(tasks.length, 2);
});

Expand All @@ -116,23 +118,17 @@ describe(getSuiteName('taskUtil'), () => {
1
);

const generateProjects = 50;
const generateLevels = 3;
const generateTasks = 3;

const projectsList = getDeeplyNestedProjectTree(
generateProjects,
generateTasks,
generateLevels
);
const projectsList = getDeeplyNestedProjectTree(50, 2, 3);

rootGradleProject.setProjectsList(projectsList);
gradleBuild.setProject(rootGradleProject);
client.getBuild.resolves(Promise.resolve(gradleBuild));
mockClient.getBuild.resolves(Promise.resolve(gradleBuild));

const tasks = await loadTasksForProjectRoots(taskTerminalsStore, client, [
rootProject,
]);
assert.strictEqual(tasks.length, 382651);
const tasks = await loadTasksForProjectRoots(
mockTaskTerminalsStore,
mockClient,
[mockRootProject]
);
assert.strictEqual(tasks.length, 255101);
});
});

0 comments on commit 197af60

Please sign in to comment.