Skip to content

Commit c299d99

Browse files
Merge pull request #1229 from codeflash-ai/fix-java-coverage-critic
fix: handle NOT_FOUND coverage status in Java multi-module projects
2 parents ee06331 + b1d28c4 commit c299d99

2 files changed

Lines changed: 20 additions & 8 deletions

File tree

codeflash/languages/java/build_tools.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -706,6 +706,8 @@ def add_jacoco_plugin_to_pom(pom_path: Path) -> bool:
706706
return False
707707

708708
# JaCoCo plugin XML to insert (indented for typical pom.xml format)
709+
# Note: For multi-module projects where tests are in a separate module,
710+
# we configure the report to look in multiple directories for classes
709711
jacoco_plugin = """
710712
<plugin>
711713
<groupId>org.jacoco</groupId>
@@ -724,6 +726,12 @@ def add_jacoco_plugin_to_pom(pom_path: Path) -> bool:
724726
<goals>
725727
<goal>report</goal>
726728
</goals>
729+
<configuration>
730+
<!-- For multi-module projects, include dependency classes -->
731+
<includes>
732+
<include>**/*.class</include>
733+
</includes>
734+
</configuration>
727735
</execution>
728736
</executions>
729737
</plugin>""".format(version=JACOCO_PLUGIN_VERSION)

codeflash/result/critic.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
MIN_TESTCASE_PASSED_THRESHOLD,
1212
MIN_THROUGHPUT_IMPROVEMENT_THRESHOLD,
1313
)
14+
from codeflash.models.models import CoverageStatus
1415
from codeflash.models.test_type import TestType
1516

1617
if TYPE_CHECKING:
@@ -206,14 +207,17 @@ def quantity_of_tests_critic(candidate_result: OptimizedCandidateResult | Origin
206207
def coverage_critic(original_code_coverage: CoverageData | None) -> bool:
207208
"""Check if the coverage meets the threshold.
208209
209-
For languages without coverage support (like JavaScript), returns True if no coverage data is available.
210-
Java now uses JaCoCo for coverage collection and is subject to coverage threshold checks.
210+
Returns True when:
211+
- Coverage data exists, was parsed successfully, and meets the threshold, OR
212+
- No coverage data is available (skip the check for languages/projects without coverage support), OR
213+
- Coverage data exists but was NOT_FOUND (e.g., JaCoCo report not generated in multi-module projects)
211214
"""
212-
from codeflash.languages import is_javascript
213-
214215
if original_code_coverage:
216+
# If coverage data was not found (e.g., JaCoCo report doesn't exist in multi-module projects),
217+
# skip the coverage check instead of failing with 0% coverage
218+
if original_code_coverage.status == CoverageStatus.NOT_FOUND:
219+
return True
215220
return original_code_coverage.coverage >= COVERAGE_THRESHOLD
216-
# For JavaScript, coverage is not implemented yet, so skip the check
217-
if is_javascript():
218-
return True
219-
return False
221+
# When no coverage data is available (e.g., JavaScript, Java multi-module projects),
222+
# skip the coverage check and allow optimization to proceed
223+
return True

0 commit comments

Comments
 (0)