Claus Ibsen created CAMEL-26694:
-----------------------------------

             Summary: Remove Roaster from the build tooling and 
camel-route-parser, in four stages
                 Key: CAMEL-26694
                 URL: https://issues.apache.org/jira/browse/CAMEL-26694
             Project: Camel
          Issue Type: Task
          Components: camel-catalog, tooling, camel-package-maven-plugin
            Reporter: Claus Ibsen
             Fix For: 4.24.0


Roaster (with the shaded Eclipse JDT, a 12 MB jar) is used only by build 
tooling and one catalog library, not at runtime. Removing it takes four stages, 
from small to large.

h3. Where Roaster is used today
||Module||Files||What it is used for||
|camel-package-maven-plugin|8|*javadoc* for the option descriptions 
(EndpointSchemaGeneratorMojo, SchemaGeneratorMojo, PackageDataFormatMojo, 
UpdateReadmeMojo, PrepareCamelMainMojo, JavadocUtil); only *annotation values* 
in PrepareCamelJBangMojo and DstWorldsHelper|
|camel-route-parser|8|the old Java DSL route parser (RouteBuilderParser, 
RestDslParser, CamelJavaParserHelper and the other helpers)|
|camel-api-component-maven-plugin|1|JavaSourceParser: the javadoc of API 
classes|
|camel-report-maven-plugin|0|declares roaster-api and roaster-jdt, but no code 
uses them|

h3. Stage 1: remove the unused dependency
camel-report-maven-plugin declares roaster-api and roaster-jdt but uses 
neither: it reads Java routes with {{LwJavaParser}} (camel-java-io), and uses 
camel-route-parser only for {{XmlRouteParser}} and its model classes.

h3. Stage 2: read annotations from the compiled classes
PrepareCamelJBangMojo and DstWorldsHelper read only annotation values from the 
source. {{@Metadata}} has runtime retention, and the mojos already have the 
class loader of the project ({{AbstractGeneratorMojo}}), so they can read the 
annotations from the compiled classes. javac has already joined constants such 
as {{"a" + "b"}}, so the class of bug fixed by the quick fix PR #29341 (a {{+}} 
in a camel-jbang option description) cannot happen.

h3. Stage 3: deprecate the Java route parser of camel-route-parser
{{LwJavaParser}} (design/java-dsl-parser.adoc) replaced it inside Camel; 
nothing in the repository uses RouteBuilderParser, RestDslParser and their 
helpers except their own tests. camel-route-parser is a public artifact (in the 
BOM) and may have users outside Camel, so: deprecate the Java parsers in 4.24 
with an entry in the upgrade guide (pointing at {{LwJavaParser}}), keep 
{{XmlRouteParser}} and the model, and remove the Java parsers in a later 
release. Then camel-route-parser no longer needs Roaster.

h3. Stage 4: read the javadoc with the JDK's own parser
Replace the javadoc readers in camel-package-maven-plugin and JavaSourceParser 
of camel-api-component-maven-plugin with the javac tree API of the JDK 
({{javax.tools}} and {{com.sun.source}} Trees / DocTrees, in the 
{{jdk.compiler}} module of every JDK): no third-party dependency, and always 
the Java version that builds Camel. JavaParser is an alternative if that API is 
awkward, at the cost of another dependency. One mojo at a time: the check of 
each PR is that regenerating the whole catalog (components, EIPs, data formats, 
Main options) gives no diff. Then remove {{roaster-version}} from 
parent/pom.xml.

_Claude Code on behalf of Claus Ibsen_



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to