The GitHub Actions job "CI - Groovy Joint Validation Build" on 
grails-core.git/feature/taglib-method-actions has failed.
Run started by GitHub user davydotcom (triggered by davydotcom).

Head commit for run:
7c89b784af9aa3c26baa34d0224459aaccaffac1 / David Estes <[email protected]>
Address PR review feedback for method-based TagLib handlers

Resolve blockers and major comments from review of PR #15465:

- B1: rethrow Error from TagMethodInvoker.invokeTagMethod instead of
  wrapping in RuntimeException; matches closure-path semantics so
  StackOverflowError/AssertionError surface unchanged.

- B2: cache resolved Closure tag fields per TagLib class via ClassValue.
  Eliminates per-invocation getDeclaredField walk and exception-driven
  control flow on the closure dispatch hot path.

- M1: restore ValidationTagLib.formatValue as a public method tag and
  back into returnObjectForTags. Now safe because overload resolution
  no longer relies on the magic single-attribute fallback.

- M2 + jf#6: replace the magic single-param attribute fallback in
  toMethodArguments with strict containsKey-based binding. Absent
  attribute rejects the overload; null is now a legal binding for
  reference-typed parameters and only rejected for primitives.

- M3: deterministic same-arity tiebreaker (signature compareTo) so
  overload resolution is stable across HotSpot/Graal/J9.

- jf#1: fix broken doc examples in namespaces.adoc and tagReturnValue.adoc
  that mixed method and closure syntax in the same snippet.

- jf#2: introduce @grails.gsp.NotATag annotation as an explicit method
  opt-out, plus signature-based filtering for overrides of Object and
  GroovyObject methods (toString/hashCode/equals declared on the user
  class). Matches the controllers-style "public methods are tags;
  helpers are private" convention without forcing annotations.

- B3: gate the closure deprecation AST warning behind the system
  property grails.taglib.warnDeprecatedClosures (default true). Set
  false to silence at compile time.

- Document method-based TagLib handlers, @NotATag, the suppression
  property, and the tag method registration behavior change in
  upgrading70x.adoc (new section 16).

New specs:
- org.grails.taglib.TagMethodInvokerSpec - covers Error/RuntimeException
  propagation, Object/GroovyObject override exclusion, Spring lifecycle
  exclusion, @NotATag, closure-field cache including subclass shadowing,
  null/missing attribute binding semantics, and same-arity overload
  ordering.
- grails.gsp.taglib.compiler.TagLibArtefactTypeAstTransformationSpec -
  covers default warning emission and suppression via system property.
- ValidationTagLibSpec - new specs for <g:formatValue> tag-syntax and
  function-syntax invocation.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

Report URL: https://github.com/apache/grails-core/actions/runs/25576090965

With regards,
GitHub Actions via GitBox

Reply via email to