diff options
author | Duarte Meneses <duarte.meneses@sonarsource.com> | 2025-05-01 13:23:24 -0500 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2025-05-02 20:03:44 +0000 |
commit | c8e841dc6c37f7bdd2d247d4dd83b4552ecb6145 (patch) | |
tree | ae199429363c540c0194f9f6dc15d8f3e8a1df19 | |
parent | 9e6d54ecfe6776de84d0b84e21242c224cb65b9a (diff) | |
download | sonarqube-c8e841dc6c37f7bdd2d247d4dd83b4552ecb6145.tar.gz sonarqube-c8e841dc6c37f7bdd2d247d4dd83b4552ecb6145.zip |
SONAR-24929 Issue search is empty for applications with a branch using a reference branch for new code
2 files changed, 18 insertions, 23 deletions
diff --git a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndex.java b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndex.java index 72b3bd272f0..9df2bb74034 100644 --- a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndex.java +++ b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndex.java @@ -543,9 +543,8 @@ public class IssueIndex { addImpactFilters(query, filters); addComponentRelatedFilters(query, filters); addDatesFilter(filters, query); - addCreatedAfterByProjectsFilter(filters, query); + addNewCodeByProjectsFilter(filters, query); addNewCodeReferenceFilter(filters, query); - addNewCodeReferenceFilterByProjectsFilter(filters, query); return filters; } @@ -873,29 +872,19 @@ public class IssueIndex { } } - private static void addNewCodeReferenceFilterByProjectsFilter(AllFilters allFilters, IssueQuery query) { - Collection<String> newCodeOnReferenceByProjectUuids = query.newCodeOnReferenceByProjectUuids(); - BoolQueryBuilder boolQueryBuilder = boolQuery(); - - if (!newCodeOnReferenceByProjectUuids.isEmpty()) { - - newCodeOnReferenceByProjectUuids.forEach(projectOrProjectBranchUuid -> boolQueryBuilder.should(boolQuery() - .filter(termQuery(FIELD_ISSUE_BRANCH_UUID, projectOrProjectBranchUuid)) - .filter(termQuery(FIELD_ISSUE_NEW_CODE_REFERENCE, true)))); - - allFilters.addFilter("__is_new_code_reference_by_project_uuids", - new SimpleFieldFilterScope("newCodeReferenceByProjectUuids"), boolQueryBuilder); - } - } - - private static void addCreatedAfterByProjectsFilter(AllFilters allFilters, IssueQuery query) { + private static void addNewCodeByProjectsFilter(AllFilters allFilters, IssueQuery query) { Map<String, PeriodStart> createdAfterByProjectUuids = query.createdAfterByProjectUuids(); BoolQueryBuilder boolQueryBuilder = boolQuery(); createdAfterByProjectUuids.forEach((projectOrProjectBranchUuid, createdAfterDate) -> boolQueryBuilder.should(boolQuery() .filter(termQuery(FIELD_ISSUE_BRANCH_UUID, projectOrProjectBranchUuid)) .filter(rangeQuery(FIELD_ISSUE_FUNC_CREATED_AT).from(createdAfterDate.date().getTime(), createdAfterDate.inclusive())))); - allFilters.addFilter("__created_after_by_project_uuids", new SimpleFieldFilterScope("createdAfterByProjectUuids"), boolQueryBuilder); + Collection<String> newCodeOnReferenceByProjectUuids = query.newCodeOnReferenceByProjectUuids(); + newCodeOnReferenceByProjectUuids.forEach(projectOrProjectBranchUuid -> boolQueryBuilder.should(boolQuery() + .filter(termQuery(FIELD_ISSUE_BRANCH_UUID, projectOrProjectBranchUuid)) + .filter(termQuery(FIELD_ISSUE_NEW_CODE_REFERENCE, true)))); + + allFilters.addFilter("__new_code_by_project_uuids", new SimpleFieldFilterScope("newCodeByProjectUuids"), boolQueryBuilder); } private void validateCreationDateBounds(@Nullable Date createdBefore, @Nullable Date createdAfter) { diff --git a/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueIndexFiltersTest.java b/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueIndexFiltersTest.java index 23daad4fed0..e0fa9ca61cc 100644 --- a/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueIndexFiltersTest.java +++ b/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueIndexFiltersTest.java @@ -456,7 +456,7 @@ class IssueIndexFiltersTest extends IssueIndexTestCommon { } @Test - void filter_by_new_code_reference_branches() { + void filter_by_new_reference_branches() { ComponentDto project1 = db.components().insertPrivateProject().getMainBranchComponent(); IssueDoc project1Issue1 = newDocForProject(project1).setIsNewCodeReference(true); IssueDoc project1Issue2 = newDocForProject(project1).setIsNewCodeReference(false); @@ -474,14 +474,20 @@ class IssueIndexFiltersTest extends IssueIndexTestCommon { IssueDoc project2Branch1Issue1 = newDoc(project2Branch1, project2.uuid()).setIsNewCodeReference(false); IssueDoc project2Branch1Issue2 = newDoc(project2Branch1, project2.uuid()).setIsNewCodeReference(true); + ComponentDto project3 = db.components().insertPrivateProject().getMainBranchComponent(); + ComponentDto project3Branch1 = db.components().insertProjectBranch(project2); + IssueDoc project3Issue1 = newDoc(project3Branch1, project3.uuid()).setFuncCreationDate(new Date(1000L)); + IssueDoc project3Issue2 = newDoc(project3Branch1, project3.uuid()).setFuncCreationDate(new Date(2000L)); + indexIssues(project1Issue1, project1Issue2, project2Issue1, project2Issue2, - project1Branch1Issue1, project1Branch1Issue2, project2Branch1Issue1, project2Branch1Issue2); + project1Branch1Issue1, project1Branch1Issue2, project2Branch1Issue1, project2Branch1Issue2, project3Issue1, project3Issue2); // Search for issues of project 1 branch 1 and project 2 branch 1 that are new code on a branch using reference for new code assertThatSearchReturnsOnly(IssueQuery.builder() .mainBranch(false) - .newCodeOnReferenceByProjectUuids(Set.of(project1Branch1.uuid(), project2Branch1.uuid())), - project1Branch1Issue2.key(), project2Branch1Issue2.key()); + .newCodeOnReferenceByProjectUuids(Set.of(project1Branch1.uuid(), project2Branch1.uuid())) + .createdAfterByProjectUuids(Map.of(project3Branch1.uuid(), new IssueQuery.PeriodStart(new Date(1500), false))), + project1Branch1Issue2.key(), project2Branch1Issue2.key(), project3Issue2.key()); } @Test |