-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
Failure Details
- Run: 22818128030
- Commit:
48d75c0785bbbab747ea7ff6468f396cbe289d4d - PR: #4287 — "Fix findPubliclyAccessibleMethod to search interfaces for accessible methods"
- Branch:
claude/fix-graphql-java-4278-v6Z3y
Failed Jobs and Errors
| Job | Step | Result |
|---|---|---|
| Per-Class Coverage Gate | Enforce Per-Class Coverage Gate | ❌ failure |
| allBuildAndTestSuccessful | Verify all jobs passed | ❌ failure (downstream of above) |
All other jobs (buildAndTest on java11/17/21, jcstress, javadoc) passed successfully.
Root Cause
PR #4287 adds a new private method findMethodOnPublicInterfaces in src/main/java/graphql/schema/PropertyFetchingImpl.java (+39 lines). The method introduces a branch for dfeInUse=true that searches for an interface method accepting a DataFetchingEnvironment parameter:
// In findMethodOnPublicInterfaces:
if (dfeInUse) {
try {
Method method = iface.getMethod(methodName, singleArgumentType);
if (isSuitablePublicMethod(method, allowStaticMethods)) { // ← never reached
METHOD_CACHE.putIfAbsent(cacheKey, new CachedMethod(method)); // ← never reached
return method; // ← never reached
}
} catch (NoSuchMethodException e) {
// ok try the next approach
}
}In all new tests (Map.Entry, package-private interface chains, diamond inheritance), the called interface methods (getKey(), getValue(), getBaseValue()) have no DataFetchingEnvironment overload on their interfaces. When dfeInUse=true, the iface.getMethod(methodName, singleArgumentType) call always throws NoSuchMethodException, meaning the three lines inside the if (isSuitablePublicMethod(...)) block are never executed.
Coverage Regression Estimate for graphql.schema.PropertyFetchingImpl
Baseline (from test-baseline.json):
- Line:
144/164 = 87.80% - Branch:
55/68 = 80.88% - Method:
31/31 = 100.00%
After PR: The new method adds ~15 new branches. The dfeInUse=true success path (finding a DFE-accepting method on an interface) introduces at least 2–3 uncovered branches and 3 uncovered lines, causing the line and/or branch coverage percentage to drop below the baseline threshold (>0.05% regression triggers failure).
Recommended Fix
-
Add a test that exercises the
dfeInUse=trueinterface path infindMethodOnPublicInterfaces. This requires a test class that:- Is package-private (non-public class)
- Implements a public interface that declares a method accepting
DataFetchingEnvironment - Is fetched using
PropertyDataFetcher
Example: Create a public interface in
src/test/groovy/graphql/schema/somepackage/with a methodString getData(DataFetchingEnvironment env), then a package-private implementing class, and add a test fetchingdatafrom it. -
Alternatively, if the
dfeInUsebranch insidefindMethodOnPublicInterfacesis intentional but unreachable in practice (interfaces rarely declare methods takingDataFetchingEnvironment), consider removing it to simplify the code and avoid the coverage gap. The non-DFE method lookup immediately follows and works for all practical cases. -
Do not simply update
test-baseline.jsonto accept lower coverage — the uncovered code path represents a real gap that could contain latent bugs.
Generated by CI Failure Doctor
To install this workflow, run
gh aw add githubnext/agentics/workflows/ci-doctor.md@ee50a3b7d1d3eb4a8c409ac9409fd61c9a66b0f5. View source at https://github.com/githubnext/agentics/tree/ee50a3b7d1d3eb4a8c409ac9409fd61c9a66b0f5/workflows/ci-doctor.md.