diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java
index 6d9c9810020..47855764857 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java
@@ -29,6 +29,7 @@
import org.eclipse.jdt.core.formatter.CodeFormatter;
import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
import org.eclipse.jdt.core.formatter.IndentManipulation;
+import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.formatter.DefaultCodeFormatter;
import org.eclipse.jdt.internal.formatter.DefaultCodeFormatterOptions;
import org.eclipse.jdt.internal.formatter.DefaultCodeFormatterOptions.Alignment;
@@ -13305,4 +13306,24 @@ public void testBug576954() {
" }\n" +
"}");
}
+/**
+ * https://github.com/eclipse-jdt/eclipse.jdt.core/issues/443
+ */
+public void testIssue443a() {
+ setComplianceLevel(CompilerOptions.VERSION_17);
+ this.formatterPrefs.insert_space_after_closing_angle_bracket_in_type_parameters = true;
+ formatSource(
+ "record MyRecord() {\n" +
+ "}");
+}
+public void testIssue443b() {
+ setComplianceLevel(CompilerOptions.VERSION_17);
+ this.formatterPrefs.insert_space_after_closing_angle_bracket_in_type_parameters = false;
+ formatSource(
+ "class MyClass extends AnotherClass {\n" +
+ "}\n" +
+ "\n" +
+ "sealed interface Expr permits MathExpr {\n" +
+ "}");
+}
}
diff --git a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java
index c77b78821e5..0551e860ead 100644
--- a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java
+++ b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java
@@ -182,10 +182,12 @@ public boolean visit(TypeDeclaration node) {
List typeParameters = node.typeParameters();
handleTypeParameters(typeParameters);
- if (!node.isInterface() && !node.superInterfaceTypes().isEmpty()) {
- // fix for: class A extends ArrayListimplements Callable
- handleToken(node.getName(), TokenNameimplements, true, false);
- }
+ if (!node.superInterfaceTypes().isEmpty())
+ handleTokenAfter(node.getName(), node.isInterface() ? TokenNameextends : TokenNameimplements, true, true);
+ if (node.getSuperclassType() != null)
+ handleTokenAfter(node.getName(), TokenNameextends, true, true);
+ if (!node.permittedTypes().isEmpty())
+ handleTokenAfter(node.getName(), TokenNameRestrictedIdentifierpermits, true, true);
handleToken(node.getName(), TokenNameLBRACE,
this.options.insert_space_before_opening_brace_in_type_declaration, false);
@@ -366,7 +368,8 @@ private void handleTypeParameters(List typeParameters) {
this.options.insert_space_after_opening_angle_bracket_in_type_parameters);
handleTokenAfter(typeParameters.get(typeParameters.size() - 1), TokenNameGREATER,
this.options.insert_space_before_closing_angle_bracket_in_type_parameters,
- this.options.insert_space_after_closing_angle_bracket_in_type_parameters);
+ typeParameters.get(0).getParent() instanceof RecordDeclaration ? false
+ : this.options.insert_space_after_closing_angle_bracket_in_type_parameters);
handleCommas(typeParameters, this.options.insert_space_before_comma_in_type_parameters,
this.options.insert_space_after_comma_in_type_parameters);
}