This is an automated email from the ASF dual-hosted git repository.
paulk-asert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 36870fa03c add testcase for GROOVY-11202
36870fa03c is described below
commit 36870fa03c9f07d629ba7b4ebcc279d60cfc65cd
Author: Paul King <[email protected]>
AuthorDate: Mon May 4 22:06:56 2026 +1000
add testcase for GROOVY-11202
---
.../groovy/tools/groovydoc/GroovyDocToolTest.java | 55 ++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git
a/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java
b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java
index df2a5e2c6f..9a1e936da0 100644
---
a/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java
+++
b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java
@@ -1712,6 +1712,40 @@ public class GroovyDocToolTest extends GroovyTestCase {
+ "}\n";
}
+ private static List<String> createInstanceofPatternJavaSources(Path root,
int count) throws IOException {
+ String pkg =
"org/codehaus/groovy/tools/groovydoc/testfiles/instanceofpattern";
+ String packageName = pkg.replace('/', '.');
+ Path pkgDir = root.resolve(pkg);
+ Files.createDirectories(pkgDir);
+
+ List<String> sources = new ArrayList<>(count);
+ for (int i = 0; i < count; i++) {
+ String className = "InstanceofPattern" + i;
+ Files.writeString(pkgDir.resolve(className + ".java"),
instanceofPatternJavaSource(packageName, className));
+ sources.add(pkg + "/" + className + ".java");
+ }
+ return sources;
+ }
+
+ private static String instanceofPatternJavaSource(String packageName,
String className) {
+ return "package " + packageName + ";\n"
+ + "import java.math.BigDecimal;\n"
+ + "/**\n"
+ + " * Exercise Java 17 instanceof pattern matching (JEP
394).\n"
+ + " */\n"
+ + "public class " + className + " {\n"
+ + " public String describe(Object value) {\n"
+ + " if (value instanceof BigDecimal bd) {\n"
+ + " return \"DECIMAL(\" + bd.precision() + \",\" +
bd.scale() + \")\";\n"
+ + " }\n"
+ + " if (value instanceof String s && !s.isEmpty()) {\n"
+ + " return \"VARCHAR(\" + s.length() + \")\";\n"
+ + " }\n"
+ + " return \"UNKNOWN\";\n"
+ + " }\n"
+ + "}\n";
+ }
+
// GROOVY-9057
public void testParseErrorIsTrackedInErrorCount() throws Exception {
assertEquals("Initial error count should be zero", 0,
xmlToolForTests.getErrorCount());
@@ -2753,6 +2787,27 @@ public class GroovyDocToolTest extends GroovyTestCase {
}
}
+ // GROOVY-11202
+ public void testLanguageLevelSupportedForInstanceofPatterns() throws
Exception {
+ Path tmp = Files.createTempDirectory("groovydoc-instanceof-pattern-");
+ try {
+ List<String> sources = createInstanceofPatternJavaSources(tmp, 1);
+ GroovyDocTool tool = makeHtmltool(new ArrayList<>(),
ParserConfiguration.LanguageLevel.JAVA_17.name(), new Properties(), new
String[] {tmp.toString()});
+ tool.add(sources);
+
+ MockOutputTool output = new MockOutputTool();
+ tool.renderToOutput(output, MOCK_DIR);
+
+ String base =
"org/codehaus/groovy/tools/groovydoc/testfiles/instanceofpattern";
+ String javadoc = output.getText(MOCK_DIR + "/" + base +
"/InstanceofPattern0.html");
+ assertNotNull("Javadoc should not be null since Java 17 instanceof
patterns are supported", javadoc);
+ assertEquals("Expected no parse errors for instanceof pattern
source", 0, tool.getErrorCount());
+ assertTrue("Expected describe(Object) signature in:\n" + javadoc,
javadoc.contains("describe"));
+ } finally {
+ deleteRecursively(tmp);
+ }
+ }
+
public void testGroovydocParsingUsesExplicitJavaParserLanguageLevel()
throws Exception {
StaticJavaParser.getParserConfiguration().setLanguageLevel(ParserConfiguration.LanguageLevel.JAVA_1_4);
JavaParser javaParser = new JavaParser(