You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (Jira)" <ji...@apache.org> on 2023/10/23 11:28:00 UTC
[jira] [Commented] (GROOVY-11202) Support use of patterns with instanceof in groovydoc
[ https://issues.apache.org/jira/browse/GROOVY-11202?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17778626#comment-17778626 ]
Paul King commented on GROOVY-11202:
------------------------------------
It isn't related to groovy gradle plugin. Currently, Groovydoc doesn't pass any config options when creating the JavaParser instance:
https://github.com/apache/groovy/blob/master/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java#L700
So, we should provide some hooks for that. Subsequent steps might then be to propagate such changes to other tools like ant/gradle/maven tools/plugins if needed.
> Support use of patterns with instanceof in groovydoc
> ----------------------------------------------------
>
> Key: GROOVY-11202
> URL: https://issues.apache.org/jira/browse/GROOVY-11202
> Project: Groovy
> Issue Type: Bug
> Reporter: Per Nyfelt
> Priority: Minor
>
> When running Gradle 8.4 -> GroovyDoc 4.0.15 which uses javaparser-core 3.25.5 i get the following error:
> {noformat}
> [ant:groovydoc] Attempting to ignore error parsing Java source file: se/alipsa/groovy/matrix/util/DataType.java
> [ant:groovydoc] Consider reporting the error to the Groovy project: https://issues.apache.org/jira/browse/GROOVY
> [ant:groovydoc] ... or directly to the JavaParser project: [https://github.com/javaparser/javaparser/issues]
> [ant:groovydoc] Error: (line 55,col 9) Use of patterns with instanceof is not supported.
> {noformat}
> The offending code is:
> {code}
> public static String sqlType(Object value, int... varcharSize) {
> if (value instanceof BigDecimal bd) {
> return "DECIMAL(" + bd.precision() + "," + bd.scale() + ")";
> }
> return value == null ? null : sqlType(value.getClass(), varcharSize);
> }
> {code}
> Patterns with instanceof is supported by javaparser:
> {code:groovy}
> @Test
> void testParseInstanceofPattern() {
> String code = """
> class A {
> public static String sqlType(Object value, int... varcharSize) {
> if (value instanceof BigDecimal bd) {
> return "DECIMAL(" + bd.precision() + "," + bd.scale() + ")";
> }
> return value == null ? null : sqlType(value.getClass(), varcharSize);
> }
> }
> """;
> ParserConfiguration config = new ParserConfiguration();
> config.setLanguageLevel(LanguageLevel.JAVA_17);
> JavaParser parser = new JavaParser(config);
> CompilationUnit cu = JavaParserAdapter.of(parser).parse(code);
> System.out.println(cu.toString());
> }
> {code}
> This might mean that the groovy gradle plugin is not setting the language level based on the tool chain e.g in my build.gradle, I have:
> {code:groovy}
> java {
> toolchain {
> languageVersion = JavaLanguageVersion.of(17)
> }
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)