in src/controller/utils.ts [192:235]
export async function updateItemForDocument(uri: Uri, testTypes?: IJavaTestItem[]): Promise<TestItem[]> {
testTypes = testTypes ?? await findTestTypesAndMethods(uri.toString());
let belongingPackage: TestItem | undefined;
if (testTypes.length === 0) {
belongingPackage = await resolveBelongingPackage(uri);
} else {
belongingPackage = findBelongingPackageItem(testTypes[0]) || await resolveBelongingPackage(uri);
}
if (!belongingPackage) {
sendError(new Error('Failed to find the belonging package'));
return [];
}
const tests: TestItem[] = [];
if (testTypes.length === 0) {
// Remove the children with the same uri when no test items is found
belongingPackage.children.forEach((typeItem: TestItem) => {
if (path.relative(typeItem.uri?.fsPath || '', uri.fsPath) === '') {
belongingPackage!.children.delete(typeItem.id);
}
});
} else {
for (const testType of testTypes) {
// here we do not directly call synchronizeItemsRecursively() because testTypes here are just part of the
// children of the belonging package, we don't want to delete other children unexpectedly.
let testTypeItem: TestItem | undefined = belongingPackage.children.get(testType.id);
if (!testTypeItem) {
testTypeItem = createTestItem(testType, belongingPackage);
testTypeItem.canResolveChildren = true;
} else {
updateTestItem(testTypeItem, testType);
}
tests.push(testTypeItem);
synchronizeItemsRecursively(testTypeItem, testType.children);
}
}
if (belongingPackage.children.size === 0) {
belongingPackage.parent?.children.delete(belongingPackage.id);
}
return tests;
}