QuietlyDocs
Documentation navigation

Quietly Docs

Architecture

Quietly separates project discovery, analysis, planning, and rendering so diagnostics and filter generation use the same project facts and decisions.

MavenProject

ModuleContext

ProjectDiscovery

DiscoveredProject

ServiceResolver / FixtureResolver / FieldResolver

DoctorPlanner

GenerationPlan

doctor / filter-tests

QuietlyReport / generated tests

Module context

ModuleContext captures the current Maven artifact, packaging, base directory, build/output directories, generated-test directory, and reactor module count. It makes reports explicit about where Quietly ran. It does not turn Quietly into an aggregator: every operation still belongs to one MavenProject.

Discovery

ProjectDiscovery asks quietly-core to scan compiled application output using the current module’s compile classpath. The result is a DiscoveredProject: immutable module context plus discovered entity/filter metadata.

Filter goals discover entities that carry Hibernate filters. Experimental CRUD generation uses the all-entity discovery mode.

Discovery answers what exists. It does not decide whether source should be generated.

Resolution and analysis

Resolvers turn conventions into explicit results:

  • ServiceResolver computes and loads the expected REST service class.
  • FieldResolver performs strict or opt-in fuzzy entity-field matching.
  • FixtureResolver checks public TABLE_NAME and the module-local SQL fixture path.

Resolution objects retain success/failure details rather than forcing the renderer to rediscover project state.

Planning

DoctorPlanner combines the discovered project with resolver results and existing generated source. It produces a GenerationPlan containing READY, BLOCKED, EXISTING, and STALE entries for the FILTER_TEST capability, plus diagnostic entries for services, fixtures, and invalid existing files.

Both doctor and filter-tests consume this filter plan. This is the key consistency boundary: the same service and field decision that appears in diagnostics controls filter generation.

Fixture diagnostics are represented in the plan but are currently separate from filter readiness; the generator can write a test whose consumer fixture/runtime prerequisites still need repair.

Rendering

FilterTestAstBuilder renders methods from already-resolved field information. FilterTestsCodeGenerator owns incremental file updates, markers, stale reporting, and writes. Rendering should not decide which field or service is correct.

CRUD uses CrudTestsCodeGenerator and CrudTestAstBuilder with a smaller, convention-based path. CRUD does not yet use the filter GenerationPlan to infer endpoint capabilities; it emits the two fixed smoke-test operations documented in crud-tests.

Reporting

QuietlyReport renders goal-specific Markdown and JSON from logical report entries. It keeps discovery/readiness, generation events, module context, and runtime execution separate. Runtime execution is always NOT_MEASURED; Maven and Surefire remain authoritative.

Module responsibilities

Artifact Responsibility
quietly-parent Reactor and shared dependency/build metadata.
quietly-core Entity scanning and Hibernate filter metadata extraction.
quietly-maven-plugin Mojos, module context, discovery orchestration, resolution, planning, AST rendering, reports.
quietly-test-support Runtime base classes and helpers used by generated tests.

This boundary keeps Maven/project inspection out of runtime test support and keeps generated-test runtime dependencies out of the plugin realm.

This page is rendered from the canonical documentation in the Quietly repository.

Edit this page on GitHub