Repository navigation
processing: generalize processor machinery into a reusable codegen driver (#378) #379
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
AndreasIgel
merged 170 commits into
java-helpers:main
from
igel-devin-ai:devin/1792924834-generic-processor-driver
Nov 1, 2026
Merged
Changes from all commits
Commits
Show all changes
170 commits
Select commit
Hold shift + click to select a range
7bf1e52
processing: generalize ProcessingTarget to a typed per-element carrier
devin-ai-integration[bot] 96fb495
processing: extract AnnotationElementSpec — declarative element selec…
devin-ai-integration[bot] 1eceace
processing: extract ProcessorOptionRegistry — supported options deriv…
devin-ai-integration[bot] 7fcd807
processing: generalize SourceFormatterResolver — profile and formatte…
devin-ai-integration[bot] 903e63e
processing: hoist GeneratedTypes registry onto AnnotationProcessingCo…
devin-ai-integration[bot] b3b39e3
processing: introduce AbstractCodegenProcessor — generic collect-plan…
devin-ai-integration[bot] 80df0d7
processing: claim annotations via claimsAnnotations derived from the …
devin-ai-integration[bot] cf8d586
analysis: share array-attribute reading and class-value resolution vi…
devin-ai-integration[bot] 75574b9
processing: declare supported types via supportedAnnotationTypes() me…
devin-ai-integration[bot] 25021b3
processing: drop redundant @SupportedAnnotationTypes — framework defa…
devin-ai-integration[bot] 309fae3
processing: common CodegenConfiguration/CodegenDefinition contracts —…
devin-ai-integration[bot] 7292afd
processing: option registry gains verbose and formatter-profile contract
devin-ai-integration[bot] 3919597
processing: backend registry resolves engine and formatter via Servic…
devin-ai-integration[bot] c262024
processing: minimum abstract set — SourceVersion-typed source level, …
devin-ai-integration[bot] 4582bf7
processing: registerPlannedOutputs generalized — domain supplies only…
devin-ai-integration[bot] b9c0e24
processing: deferredTargets hook — deferred outputs run the generic l…
devin-ai-integration[bot] 08d4251
processing: fluent builders for AnnotationElementSpec and ElementSele…
devin-ai-integration[bot] 4c28779
processing: javadoc spine marks implement-required hooks
devin-ai-integration[bot] b6afc43
processing: resolve codegen backends via the processor-path classloader
devin-ai-integration[bot] 5a16341
processing: emit processor start marker from base logger creation
devin-ai-integration[bot] 5f33384
test: pin verbose flag in resolved configuration log line
devin-ai-integration[bot] 584e6b3
example: regenerate PersonDtoMapperImpl with builder-based mapping
devin-ai-integration[bot] 6b27c6f
processing: drop unreachable -verbose detection — javac exposes only …
devin-ai-integration[bot] 0e7688c
processing: static processor declarations as CodegenProcessorConfigur…
devin-ai-integration[bot] afb6105
processing: isFinished defaults to one-shot — first planned round mar…
devin-ai-integration[bot] 8c2e101
processing: rename predictedTypeName to predictedGeneratedTypeName
devin-ai-integration[bot] 3a2fd4d
processing: SPI registration decorates the predicted name directly — …
devin-ai-integration[bot] fc7ca06
processing: selector declaration via consumer — less builder boilerpl…
devin-ai-integration[bot] 4fa9764
processing: fold onInit into createContext — one init hook fewer, no …
devin-ai-integration[bot] eb0c172
processing: claimsAnnotations takes the supported set; fail-fast retu…
devin-ai-integration[bot] 0a4b151
processing: supported types derive from the element spec — '*' only w…
devin-ai-integration[bot] 1e6878a
processing: collection/generation phases are framework constants, not…
devin-ai-integration[bot] 7d97195
processing: registration predicts a name list; SPI publish moves to o…
devin-ai-integration[bot] 4578d76
processing: task carries its output package; the driver initializes P…
devin-ai-integration[bot] e2d4451
processing: driver wraps analyse/map in phase calls — domains name th…
devin-ai-integration[bot] 35db203
processing: afterGenerate is an event, not a step — renamed onTaskGen…
devin-ai-integration[bot] ab103e7
processing: specification and generation are two sequential loops, no…
devin-ai-integration[bot] 5f7c89e
processing: deferred outputs are pushed onto the context — an event, …
devin-ai-integration[bot] 69f42b6
processing: the logger carries the tag; domain nouns live in domain code
devin-ai-integration[bot] f4efd83
processing: required source version by name — the graceful-guard prop…
devin-ai-integration[bot] 93ccf4d
processing: plan is the management function — gate and registration l…
devin-ai-integration[bot] d227a0c
processing: the SPI lifecycle is generic — the domain delegates and k…
devin-ai-integration[bot] eb3f290
processor: expected log gains the generation-loop header the two loop…
devin-ai-integration[bot] 84a578f
processing: revert SPI split — the lifecycle holder is builder domain…
devin-ai-integration[bot] b9c3c8d
analysis: findAnnotationAttributeArray — name the array-shaped result
devin-ai-integration[bot] 6721ada
processing: analyse yields a definition list — one task may spawn sev…
devin-ai-integration[bot] 806cb60
processing: one definition maps to exactly one target — mapToTargetSp…
devin-ai-integration[bot] 8376aa1
processing: supported types come from the annotation, not the spec — …
devin-ai-integration[bot] 79d16a2
processing: unsupported-JDK reporting extracted into a helper
devin-ai-integration[bot] d51abcc
processing: log when the required source-version name is unknown to t…
devin-ai-integration[bot] 1d32eb2
processing: phase names are framework literals at their single use sites
devin-ai-integration[bot] 71d02da
processing: generated units are targets — the domain's noun leaves th…
devin-ai-integration[bot] 566d361
processing: the tag-prefix pattern lives inside the logger; provideLo…
devin-ai-integration[bot] 9f0ffe1
processing: deferred outputs push the target DTO itself; the domain l…
devin-ai-integration[bot] 2a2e8ec
processing: the management function registers task results, not outputs
devin-ai-integration[bot] a3e82dd
processing: a task's prediction is its result type names
devin-ai-integration[bot] 38ca043
processing: it collects elements, it does not specify them — ElementC…
devin-ai-integration[bot] 7d68150
processing: backend wiring is the domain's business — back to direct …
devin-ai-integration[bot] a904a1b
tests: the drain error is generic 'target'; the domain's plan-time no…
devin-ai-integration[bot] 13adec5
processing: the per-target carrier resolves the output package — Proc…
devin-ai-integration[bot] df6ba02
processing: dead PHASE_* constants left over from the literal pass
devin-ai-integration[bot] 40c0479
processing: the whole JDK-gate block moves into verifySupportedJdk
devin-ai-integration[bot] d3ef8cb
processing: findElements needs no context — the collector signature c…
devin-ai-integration[bot] 3827a42
processing: options come from the declared registry — no second channel
devin-ai-integration[bot] d658d07
processing: declared options are a set — duplicates cannot be declare…
devin-ai-integration[bot] ac76e2c
processing: the wired verbose/formatter-profile options are supported…
devin-ai-integration[bot] aa79d60
processing: the selector's key is a group name — name renamed to grou…
devin-ai-integration[bot] 48877eb
processing: the collection is groups — ElementGroups keyed by selecto…
devin-ai-integration[bot] 10e196d
the constant holds an ElementCollector — ELEMENT_COLLECTOR
devin-ai-integration[bot] b7b9ab4
processing: PlannedWork → PlannedGeneration — protected so domain cal…
devin-ai-integration[bot] 55cae31
processing: the generated-task callback consumes the whole planned ge…
devin-ai-integration[bot] cffc6fe
no deferred-target mechanism — the domain generates its last-round ou…
devin-ai-integration[bot] 1086235
processing: a definition knows its target type's name — the contract …
devin-ai-integration[bot] d61326f
processing: generationEnvironment wires env/logger/tracker/reporter o…
devin-ai-integration[bot] da69848
processing: formatter factory is a static declaration — base resolves…
devin-ai-integration[bot] fcf2ab1
processing: metaMarked names what the check is — meta-annotation on t…
devin-ai-integration[bot] 7d23ac9
processing: onRoundStart/onTasksPlanned hooks; in-body extension-poin…
devin-ai-integration[bot] 8b0d6ba
processing: inline codeql dismissal on intentional extension-point si…
devin-ai-integration[bot] 3504a9b
docs: performance report phase names follow the driver's literals
devin-ai-integration[bot] 1b3cf59
processing: javadoc leftovers — stale links, wrong param names, missi…
devin-ai-integration[bot] fe76011
processing: tag the last untagged driver messages — error via prefixe…
devin-ai-integration[bot] 1c989aa
logging: tag every emitted message inside the logger — drop the tagge…
devin-ai-integration[bot] 3725f42
logging: tag renamed to loggingPrefix — names what it is
devin-ai-integration[bot] 42c85de
logging: prefix sits between the level marker and tree markers
devin-ai-integration[bot] 8cc3655
collector: drop redundant direct-match in matchingAnnotations — Class…
devin-ai-integration[bot] abb997b
formatter resolver: keep it in the processing package — the codegen m…
devin-ai-integration[bot] 1cc7185
context: generatedPackageName dropped — processingTargetPackage alrea…
devin-ai-integration[bot] c5961c7
scope resolver: read the generated-types registry off the context at …
devin-ai-integration[bot] 295b605
registration: planned names registered via context.addGeneratedType —…
devin-ai-integration[bot] 77779db
target-package record: javadoc back in the original's shape — clearer…
devin-ai-integration[bot] 21de6f0
tests: formatter-resolver import follows the class back to the proces…
devin-ai-integration[bot] 3860594
tests: pin the complete tagged performance-report layout — timings no…
devin-ai-integration[bot] fa6473f
docs: warning examples and prefix wording to the real emitted shape
devin-ai-integration[bot] 1acd60a
context: drop the orphaned field comment the generatedPackageName rem…
devin-ai-integration[bot] 31322f8
tests: perf-report pin as a text block — one full compare, normalizat…
devin-ai-integration[bot] 0ff60e3
context: store the current task — ProcessingTargetPackage only re-wra…
devin-ai-integration[bot] 05864fa
context: initProcessingTask -> setCurrentTask — it is called per task…
devin-ai-integration[bot] ac4f49b
javadoc: re-attach dangling docs — orphan comments removed, codeql ta…
devin-ai-integration[bot] 1a7ed2d
driver: drop the wildcard in onTasksPlanned — the list is already Cod…
devin-ai-integration[bot] 4a6ed4b
driver: rename local logger in createLogger — it shadowed the process…
devin-ai-integration[bot] f095f57
driver: suppress S112 on analyse/map — extension points cannot enumer…
devin-ai-integration[bot] 338767b
context: suppress S1452 on getCurrentTask — the task's config type va…
devin-ai-integration[bot] 2861494
processor: globalConfig is only used inside createContext — make it a…
devin-ai-integration[bot] 55679da
analyser: List<?> -> List<Object> in findAnnotationAttributeArray ret…
devin-ai-integration[bot] d8bcff7
test: cover flagged new lines — config defaults, registry null paths,…
devin-ai-integration[bot] be94808
model: @Override on getTypeName (CodeQL java/missing-override-annotat…
devin-ai-integration[bot] 3b830d5
test: builder created outside assertThrows lambda (Sonar S5778)
devin-ai-integration[bot] 5a9f357
processing: drop trailing codeql comments — not recognized; alerts di…
devin-ai-integration[bot] 5c34636
processing: drop CodegenConfiguration — re-added below as a new file …
devin-ai-integration[bot] 13052a3
processing: restore ProcessingTarget from main — keeps its file history
devin-ai-integration[bot] 46ccbd5
processing: drop CodegenTask — re-created from ProcessingTarget below
devin-ai-integration[bot] e8e03b1
processing: git mv ProcessingTarget to CodegenTask — CodegenTask is i…
devin-ai-integration[bot] 38037c6
processing: CodegenTask generalizes the per-target state for any code…
devin-ai-integration[bot] d321dff
processing: add CodegenConfiguration — common strict/verbose contract
devin-ai-integration[bot] e013723
processing: matchingAnnotations early-out when no metaMarker — guard …
devin-ai-integration[bot] f023c4f
processing: drop FormatterFactory — SourceFormatterResolver creates i…
devin-ai-integration[bot] c12da7a
processing: javadoc for the two element-group names
devin-ai-integration[bot] 3b025ce
processing: loggerPrefix is a static declaration on CodegenProcessorC…
devin-ai-integration[bot] f374caa
processing: Roaster is the default code generator — domain overrides …
devin-ai-integration[bot] f36ab8e
processing: initGeneratorRegistry — the warmup is an init, not a get
devin-ai-integration[bot] f7febbd
processing: planTasks locals named after what they hold — annotatedEl…
devin-ai-integration[bot] bc9af17
processing: hold the annotation attribute array in a named local befo…
devin-ai-integration[bot] 20a882a
processing: gate planning before planTasks — no point planning a roun…
devin-ai-integration[bot] e721eb5
processing: predictTaskResultTypeNames — name says it is a prediction…
devin-ai-integration[bot] de894a7
tests/docs: round 2 now logs the planning gate, not the empty collection
devin-ai-integration[bot] 70dd9bf
processing: unset requiredSourceVersion means no JDK gate — domains w…
devin-ai-integration[bot] 9cd9bc9
processing: option registry without wired options no longer NPEs on L…
devin-ai-integration[bot] 1afb4ac
processing: minimal codegen processor test — one file shows the domai…
devin-ai-integration[bot] d42ce12
processing: getGeneratorRegistry renamed initGeneratorRegistry — the …
devin-ai-integration[bot] 9f296bf
processing: ElementGroups.all() — collect without caring about group …
devin-ai-integration[bot] 67ac07d
processing: selector(annotationTypes…) convenience on the collector b…
devin-ai-integration[bot] 75d2681
processing: CodegenConfiguration.DEFAULT — the framework ships the pl…
devin-ai-integration[bot] 461319c
processing: CodegenTask.builder() — reportingElement defaults to the …
devin-ai-integration[bot] fc6b7ed
test: minimal processor reworked on the framework conveniences — sele…
devin-ai-integration[bot] 1a4a9bb
test: guard non-type task elements instead of casting — a domain plan…
devin-ai-integration[bot] 333f18b
test: pin the whole generated PersonBuilder as one expected textblock
devin-ai-integration[bot] 22391b7
test: reuse ctx.getPackageName for builder package extraction
devin-ai-integration[bot] 5918ac7
test: use Strings.CI.removeStart for setter prefix like elsewhere
devin-ai-integration[bot] 8eb1f2d
test: assertThrows with single-call lambda (Sonar S5778)
devin-ai-integration[bot] 57b5170
test: add missing license header to MinimalCodegenProcessorTest
devin-ai-integration[bot] a54c992
test: literal tabs in expected textblock, closing delimiter at column 0
devin-ai-integration[bot] 84789b6
test: full compare via assertNormalizedEquals, normal indentation
devin-ai-integration[bot] 4e19074
test: de-flake classMetrics ordering asserts (timing-dependent positi…
devin-ai-integration[bot] b89d5ac
Update DEBUG_LOGGING example to real emitted messages
devin-ai-integration[bot] 3b45063
Update CONTRIBUTING verbose log excerpt to real emitted messages
devin-ai-integration[bot] a9d4dfd
Make predictTaskResultTypeNames a default-empty hook
devin-ai-integration[bot] 4ca396a
Make debug log reflect reality: real file path, per-generator contrib…
devin-ai-integration[bot] c51fa0b
Rewrite doc log excerpts as verbatim capture of a real verbose run
devin-ai-integration[bot] 4aa5d14
Inline logger-prefix resolution: prefix is configuration, not an exte…
devin-ai-integration[bot] b3a8664
Close the 'Generating targets' operation after onTaskGenerated: summa…
devin-ai-integration[bot] 823c489
Show full Jackson module generation tail in debug log example
devin-ai-integration[bot] de06203
Log before creating JavaFileObject so a filer failure has a preceding…
devin-ai-integration[bot] dd9c3c8
Skip codegen phase logging when the phase has nothing to emit
devin-ai-integration[bot] 2e37f03
CodegenTask builder: preassign reportingElement default and require n…
devin-ai-integration[bot] 41103c8
Require groupName when building an ElementSelector
devin-ai-integration[bot] 5d69428
Normalize trailing spaces in expected report and extract metric asser…
devin-ai-integration[bot] 8734293
Let the post-generation summary close the generation scope
devin-ai-integration[bot] d002851
Emit the generation summary as a child line inside the open scope
devin-ai-integration[bot] ef06f39
Log why a round or element generates nothing
devin-ai-integration[bot] 9a1d005
Remove unused private test helpers (java:S1144)
devin-ai-integration[bot] 583b010
Extract per-task specification to drop process() cognitive complexity…
devin-ai-integration[bot] 9e91d2f
Use guard clauses to skip empty codegen phases
devin-ai-integration[bot] 0c518af
Restore metric assert helpers and wire them into the JSON tests
devin-ai-integration[bot] 8a70563
Default reportingElement to the task element in build()
devin-ai-integration[bot] 5af51ed
Drop duplicate builder-name line before definition-extracted close
devin-ai-integration[bot] 6a56de3
Close the generation scope with the builder summary line
devin-ai-integration[bot] 25beded
Log enhancer count also when none applied
devin-ai-integration[bot] afc244e
Default task configuration to CodegenConfiguration.DEFAULT
devin-ai-integration[bot] 6e8acf2
Default task configuration in build(), checked against the domain type
devin-ai-integration[bot] 36b97bb
processing: finish the round on an empty plan — out-of-scope beans mu…
devin-ai-integration[bot] File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.