diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/internal/LanguageLevelChecker.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/internal/LanguageLevelChecker.java index c98bc29803..8c0706bf70 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/internal/LanguageLevelChecker.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/internal/LanguageLevelChecker.java @@ -130,11 +130,12 @@ public class LanguageLevelChecker { */ private enum PreviewFeature implements LanguageFeature { /** - * String Templates. + * String Templates. Only support with Java 22 Preview now. * @see JEP 430: String Templates (Preview) (Java 21) * @see JEP 459: String Templates (Second Preview) (Java 22) + * @see JDK-8329949 Remove the String Templates preview feature (Java 23) */ - STRING_TEMPLATES(21, 22, false), + STRING_TEMPLATES(22, 22, false), /** * Unnamed Classes and Instance Main Methods diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/Java23PreviewTreeDumpTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/Java23PreviewTreeDumpTest.java index eb10ed6801..7dfb12f22c 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/Java23PreviewTreeDumpTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/Java23PreviewTreeDumpTest.java @@ -80,4 +80,12 @@ class Java23PreviewTreeDumpTest extends BaseJavaTreeDumpTest { ParseException thrown = assertThrows(ParseException.class, () -> java23.parseResource("Jep455_PrimitiveTypesInPatternsInstanceofAndSwitch.java")); assertThat(thrown.getMessage(), containsString("Primitive types in patterns instanceof and switch is a preview feature of JDK 23, you should select your language version accordingly")); } + + @Test + void stringTemplatesAreNotSupportedAnymore() { + ParseException thrown = assertThrows(ParseException.class, () -> java23p.parseResource("StringTemplatesAreNotSupportedAnymore.java")); + assertThat(thrown.getMessage(), containsString("String templates is a preview feature of JDK 22, you should select your language version accordingly")); + ParseException thrown2 = assertThrows(ParseException.class, () -> java23.parseResource("StringTemplatesAreNotSupportedAnymore.java")); + assertThat(thrown2.getMessage(), containsString("String templates is a preview feature of JDK 22, you should select your language version accordingly")); + } } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java23p/StringTemplatesAreNotSupportedAnymore.java b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java23p/StringTemplatesAreNotSupportedAnymore.java new file mode 100644 index 0000000000..f2346fa84c --- /dev/null +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java23p/StringTemplatesAreNotSupportedAnymore.java @@ -0,0 +1,20 @@ +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +/** + * It was decided, that String Templates will be removed. + * + * @see JDK-8329949 Remove the String Templates preview feature (Java 23) + */ +public class StringTemplatesAreNotSupportedAnymore { + static void STRTemplateProcessor() { + // Embedded expressions can be strings + String firstName = "Bill"; + String lastName = "Duck"; + String fullName = STR."\{firstName} \{lastName}"; + // | "Bill Duck" + String sortName = STR."\{lastName}, \{firstName}"; + // | "Duck, Bill" + } +}