[ 
https://issues.apache.org/jira/browse/CAMEL-26694?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen updated CAMEL-26694:
--------------------------------
    Description: 
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 reads only annotation values from the source. 
{{@Metadata}} has runtime retention, and the mojo already has the class loader 
of the project ({{AbstractGeneratorMojo}}), so it can read the annotations from 
the compiled class. (DstWorldsHelper also reads only annotation values, but of 
test classes, which are not compiled when the component JSON is generated, and 
not at all with {{-Dmaven.test.skip}}: it stays a source reader, in stage 4.) 
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, DstWorldsHelper (the 
{{@DstWorld}} annotations of test sources) 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_


  was:
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_


> 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, camel-package-maven-plugin, tooling
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Minor
>             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 reads only annotation values from the source. 
> {{@Metadata}} has runtime retention, and the mojo already has the class 
> loader of the project ({{AbstractGeneratorMojo}}), so it can read the 
> annotations from the compiled class. (DstWorldsHelper also reads only 
> annotation values, but of test classes, which are not compiled when the 
> component JSON is generated, and not at all with {{-Dmaven.test.skip}}: it 
> stays a source reader, in stage 4.) 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, DstWorldsHelper 
> (the {{@DstWorld}} annotations of test sources) 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