X Tutup
Skip to content

CI Failure DoctorCI Failure - Run #22818128030 - Per-Class Coverage Gate Regression in PropertyFetchingImpl #4307

@github-actions

Description

@github-actions

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=true interface path in findMethodOnPublicInterfaces. This requires a test class that:

    1. Is package-private (non-public class)
    2. Implements a public interface that declares a method accepting DataFetchingEnvironment
    3. Is fetched using PropertyDataFetcher

    Example: Create a public interface in src/test/groovy/graphql/schema/somepackage/ with a method String getData(DataFetchingEnvironment env), then a package-private implementing class, and add a test fetching data from it.

  • Alternatively, if the dfeInUse branch inside findMethodOnPublicInterfaces is intentional but unreachable in practice (interfaces rarely declare methods taking DataFetchingEnvironment), 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.json to 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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      X Tutup