Skip to content

grounds 0.0.7

Choose a tag to compare

@mihaidaniel34 mihaidaniel34 released this 11 Oct 18:35
· 45 commits to master since this release

Call resolution and precision release. Still experimental. The binary is for Apple Silicon, macOS 11+; on other platforms, build from source or use the Nix flake.

curl -fsSL https://github.com/mihaidaniel34/grounds/releases/download/v0.0.7/grounds-0.0.7-aarch64-apple-darwin.tar.gz | tar -xz
sudo mv grounds-0.0.7-aarch64-apple-darwin/grounds /usr/local/bin/

Not notarized: after a browser download, xattr -d com.apple.quarantine grounds.

More calls resolved
AssertJ 3.27's generic assertThat overloads made even assertThat(String) look ambiguous, so nothing chained after it (.isEqualTo(..), ...) was resolved, and rules that need the target stayed silent. An exact overload now beats generic ones, but only when that is provable: anything that would need javac's full type inference stays unknown, as before.

  • Calls resolved: spring-ai 76% → 83%, langchain4j 85% → 91%, camunda 83% → 88%, spring-modulith 82% → 87%, rewrite 94% → 98%, spring-petclinic 96% → 99.8%.
  • Checked against javac on 8,000 generated overload sets: fewer wrong answers than 0.0.6 (107 → 95, all pre-existing), none new. Five review rounds by gpt-6-astra.
  • grounds type-stats --causes explains unresolved calls: a missing jar (fixed by grounds classpath), an unknown receiver, or a gap in grounds.

Error findings checked
All 133 error-level findings on the 21-project corpus were checked against the code: 69 real bugs, 58 deliberate (nearly all in test code), 5 false positives. Fixed:

  • rounding-of-integer-division: Math.round((double) count) is no longer reported unless an integer division is inside.
  • weak-tls-protocol: SSLContext.getInstance("SSL") is not reported; it negotiates TLS 1.2/1.3.
  • ignored-return-value: a discarded call that validates its argument (now.atZone(ZoneId.of(id))) is not reported, and neither is AssertJ navigation that asserts (singleElement()).
  • null-passed-to-nonnull-parameter: not reported inside assertThrows/assertThatThrownBy executables or try { ...; fail(); } catch.
  • assertj-assertion-without-check: assertThat(condition); now says to add .isTrue().

Test code
Security rules and optional-get-without-check no longer run on test sources: test servers use self-signed certificates and weak ciphers on purpose, and an empty Optional in a test just fails it. About 320 fewer findings on the corpus. Bug and testing rules still run on tests.