diff --git a/java/java-frontback-impl/resource/intellij.java.frontback.impl.xml b/java/java-frontback-impl/resource/intellij.java.frontback.impl.xml
index 1a0adb147c44..381ea18d28e5 100644
--- a/java/java-frontback-impl/resource/intellij.java.frontback.impl.xml
+++ b/java/java-frontback-impl/resource/intellij.java.frontback.impl.xml
@@ -75,10 +75,6 @@
-
-
diff --git a/java/java-frontback-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java b/java/java-frontback-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java
index 7b07059764db..83d4306f37fc 100644
--- a/java/java-frontback-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java
+++ b/java/java-frontback-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java
@@ -6,7 +6,6 @@ import com.intellij.formatting.alignment.AlignmentStrategy;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.TextRange;
-import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
@@ -835,10 +834,6 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
if (nodes.isEmpty()) {
return new LeafBlock(node, blockWrap, alignment, indent);
}
- if (Registry.is(LegacyChainedMethodCallsBlockBuilder.COMPATIBILITY_KEY)) {
- return
- new LegacyChainedMethodCallsBlockBuilder(alignment, blockWrap, indent, mySettings, myJavaSettings, myFormattingMode).build(nodes);
- }
return new ChainMethodCallsBlockBuilder(alignment, blockWrap, indent, mySettings, myJavaSettings,
myFormattingMode, JavaFormatterConditionalExpressionUtil.isInsideConditionalExpression(node)).build(nodes);
}
diff --git a/java/java-frontback-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java b/java/java-frontback-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java
index e601595ef762..e1c60563690a 100644
--- a/java/java-frontback-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java
+++ b/java/java-frontback-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java
@@ -11,7 +11,6 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.TextRange;
-import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
@@ -2049,8 +2048,6 @@ public final class JavaSpacePropertyProcessor extends JavaElementVisitor {
private boolean isAllowedToMoveSemicolonInLongCallChain() {
if (!myJavaSettings.WRAP_SEMICOLON_AFTER_CALL_CHAIN) return false;
- if (Registry.is(LegacyChainedMethodCallsBlockBuilder.COMPATIBILITY_KEY)) return false;
-
if(!(myChild1 instanceof PsiMethodCallExpression) || myType1 != JavaElementType.METHOD_CALL_EXPRESSION) return false;
if (isInsidePsiForStatement()) return false;
diff --git a/java/java-frontback-impl/src/com/intellij/psi/formatter/java/LegacyCallChunkBlockBuilder.java b/java/java-frontback-impl/src/com/intellij/psi/formatter/java/LegacyCallChunkBlockBuilder.java
deleted file mode 100644
index 663a344f00c3..000000000000
--- a/java/java-frontback-impl/src/com/intellij/psi/formatter/java/LegacyCallChunkBlockBuilder.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.psi.formatter.java;
-
-import com.intellij.formatting.*;
-import com.intellij.formatting.alignment.AlignmentStrategy;
-import com.intellij.lang.ASTNode;
-import com.intellij.psi.JavaTokenType;
-import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
-import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static com.intellij.psi.formatter.java.AbstractJavaBlock.newJavaBlock;
-
-/**
- * The previous version of {@link CallChunkBlockBuilder} for compatibility with releases prior to 2021.2,
- * see IDEA-274778.
- */
-public class LegacyCallChunkBlockBuilder {
-
- private final CommonCodeStyleSettings mySettings;
- private final CommonCodeStyleSettings.IndentOptions myIndentSettings;
- private final JavaCodeStyleSettings myJavaSettings;
- private final FormattingMode myFormattingMode;
-
- public LegacyCallChunkBlockBuilder(@NotNull CommonCodeStyleSettings settings, @NotNull JavaCodeStyleSettings javaSettings,
- @NotNull FormattingMode formattingMode) {
- mySettings = settings;
- myIndentSettings = settings.getIndentOptions();
- myJavaSettings = javaSettings;
- myFormattingMode = formattingMode;
- }
-
- public @NotNull Block create(final @NotNull List extends ASTNode> subNodes, final Wrap wrap, final @Nullable Alignment alignment) {
- final ArrayList subBlocks = new ArrayList<>();
- final ASTNode firstNode = subNodes.get(0);
- if (firstNode.getElementType() == JavaTokenType.DOT) {
- AlignmentStrategy strategy = AlignmentStrategy.getNullStrategy();
- Block block = newJavaBlock(firstNode, mySettings, myJavaSettings, Indent.getNoneIndent(), null, strategy, myFormattingMode);
- subBlocks.add(block);
- subNodes.remove(0);
- if (!subNodes.isEmpty()) {
- subBlocks.add(create(subNodes, wrap, null));
- }
- return new SyntheticCodeBlock(subBlocks, alignment, mySettings, myJavaSettings, Indent.getContinuationIndent(myIndentSettings.USE_RELATIVE_INDENTS), wrap);
- }
- return new SyntheticCodeBlock(createJavaBlocks(subNodes), alignment, mySettings, myJavaSettings, Indent.getContinuationWithoutFirstIndent(myIndentSettings.USE_RELATIVE_INDENTS), null);
- }
-
- private @NotNull List createJavaBlocks(final @NotNull List extends ASTNode> subNodes) {
- final ArrayList result = new ArrayList<>();
- for (ASTNode node : subNodes) {
- Indent indent = Indent.getContinuationWithoutFirstIndent(myIndentSettings.USE_RELATIVE_INDENTS);
- result.add(newJavaBlock(node, mySettings, myJavaSettings, indent, null, AlignmentStrategy.getNullStrategy(), myFormattingMode));
- }
- return result;
- }
-
-}
diff --git a/java/java-frontback-impl/src/com/intellij/psi/formatter/java/LegacyChainedMethodCallsBlockBuilder.java b/java/java-frontback-impl/src/com/intellij/psi/formatter/java/LegacyChainedMethodCallsBlockBuilder.java
deleted file mode 100644
index d0df999cd1d3..000000000000
--- a/java/java-frontback-impl/src/com/intellij/psi/formatter/java/LegacyChainedMethodCallsBlockBuilder.java
+++ /dev/null
@@ -1,155 +0,0 @@
-// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.psi.formatter.java;
-
-import com.intellij.formatting.*;
-import com.intellij.lang.ASTNode;
-import com.intellij.psi.JavaTokenType;
-import com.intellij.psi.PsiComment;
-import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
-import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
-import com.intellij.psi.impl.source.tree.JavaElementType;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static com.intellij.psi.formatter.java.JavaFormatterUtil.getWrapType;
-
-/**
- * The previous version of {@link ChainMethodCallsBlockBuilder} for compatibility with releases prior to 2021.2,
- * see IDEA-274778
- */
-public class LegacyChainedMethodCallsBlockBuilder {
- public static final String COMPATIBILITY_KEY = "java.formatter.chained.calls.pre212.compatibility";
-
- private final CommonCodeStyleSettings mySettings;
- private final CommonCodeStyleSettings.IndentOptions myIndentSettings;
- private final JavaCodeStyleSettings myJavaSettings;
-
- private final Wrap myBlockWrap;
- private final Alignment myBlockAlignment;
- private final Indent myBlockIndent;
-
- private final FormattingMode myFormattingMode;
-
- LegacyChainedMethodCallsBlockBuilder(Alignment alignment,
- Wrap wrap,
- Indent indent,
- CommonCodeStyleSettings settings,
- JavaCodeStyleSettings javaSettings,
- @NotNull FormattingMode formattingMode) {
- myBlockWrap = wrap;
- myBlockAlignment = alignment;
- myBlockIndent = indent;
- mySettings = settings;
- myIndentSettings = settings.getIndentOptions();
- myJavaSettings = javaSettings;
- myFormattingMode = formattingMode;
- }
-
- public Block build(List extends ASTNode> nodes) {
- List blocks = buildBlocksFrom(nodes);
-
- Indent indent = myBlockIndent != null ? myBlockIndent : Indent.getContinuationWithoutFirstIndent(myIndentSettings.USE_RELATIVE_INDENTS);
- return new SyntheticCodeBlock(blocks, myBlockAlignment, mySettings, myJavaSettings, indent, myBlockWrap);
- }
-
- private List buildBlocksFrom(List extends ASTNode> nodes) {
- List methodCall = splitMethodCallOnChunksByDots(nodes);
-
- Wrap wrap = null;
- Alignment chainedCallsAlignment = null;
-
- List blocks = new ArrayList<>();
-
- for (int i = 0; i < methodCall.size(); i++) {
- ChainedCallChunk currentCallChunk = methodCall.get(i);
- if (isMethodCall(currentCallChunk) || isComment(currentCallChunk)) {
- if (wrap == null) {
- wrap = createCallChunkWrap(i, methodCall);
- }
- if (chainedCallsAlignment == null) {
- chainedCallsAlignment = createCallChunkAlignment(i, methodCall);
- }
- }
- else {
- wrap = null;
- chainedCallsAlignment = null;
- }
-
- LegacyCallChunkBlockBuilder builder = new LegacyCallChunkBlockBuilder(mySettings, myJavaSettings, myFormattingMode);
- blocks.add(builder.create(currentCallChunk.nodes, wrap, chainedCallsAlignment));
- }
-
- return blocks;
- }
-
- private static boolean isComment(ChainedCallChunk chunk) {
- List nodes = chunk.nodes;
- if (nodes.size() == 1) {
- return nodes.get(0).getPsi() instanceof PsiComment;
- }
- return false;
- }
-
- private Wrap createCallChunkWrap(int chunkIndex, @NotNull List extends ChainedCallChunk> methodCall) {
- if (mySettings.WRAP_FIRST_METHOD_IN_CALL_CHAIN) {
- ChainedCallChunk next = chunkIndex + 1 < methodCall.size() ? methodCall.get(chunkIndex + 1) : null;
- if (next != null && isMethodCall(next)) {
- return Wrap.createWrap(getWrapType(mySettings.METHOD_CALL_CHAIN_WRAP), true);
- }
- }
-
- return Wrap.createWrap(getWrapType(mySettings.METHOD_CALL_CHAIN_WRAP), false);
- }
-
- private boolean shouldAlignMethod(ChainedCallChunk currentMethodChunk, List methodCall) {
- return mySettings.ALIGN_MULTILINE_CHAINED_METHODS
- && !currentMethodChunk.isEmpty()
- && !chunkIsFirstInChainMethodCall(currentMethodChunk, methodCall);
- }
-
- private static boolean chunkIsFirstInChainMethodCall(@NotNull ChainedCallChunk callChunk, @NotNull List methodCall) {
- return !methodCall.isEmpty() && callChunk == methodCall.get(0);
- }
-
- private static @NotNull List splitMethodCallOnChunksByDots(@NotNull List extends ASTNode> nodes) {
- List result = new ArrayList<>();
-
- List current = new ArrayList<>();
- for (ASTNode node : nodes) {
- if (node.getElementType() == JavaTokenType.DOT || node.getPsi() instanceof PsiComment) {
- if (!current.isEmpty()) {
- result.add(new ChainedCallChunk(current));
- }
- current = new ArrayList<>();
- }
- current.add(node);
- }
-
- if (!current.isEmpty()) {
- result.add(new ChainedCallChunk(current));
- }
-
- return result;
- }
-
- private Alignment createCallChunkAlignment(int chunkIndex, @NotNull List methodCall) {
- ChainedCallChunk current = methodCall.get(chunkIndex);
- return shouldAlignMethod(current, methodCall)
- ? AbstractJavaBlock.createAlignment(mySettings.ALIGN_MULTILINE_CHAINED_METHODS, null)
- : null;
- }
-
- private static boolean isMethodCall(@NotNull ChainedCallChunk callChunk) {
- List nodes = callChunk.nodes;
- return nodes.size() >= 3 && nodes.get(2).getElementType() == JavaElementType.EXPRESSION_LIST;
- }
-
- private record ChainedCallChunk(@NotNull List nodes) {
- boolean isEmpty() {
- return nodes.isEmpty();
- }
- }
-}
-
diff --git a/java/java-tests/testSrc/com/intellij/java/psi/formatter/java/JavaFormatterIndentationTest.java b/java/java-tests/testSrc/com/intellij/java/psi/formatter/java/JavaFormatterIndentationTest.java
index dc699dc947bc..32a27e624340 100644
--- a/java/java-tests/testSrc/com/intellij/java/psi/formatter/java/JavaFormatterIndentationTest.java
+++ b/java/java-tests/testSrc/com/intellij/java/psi/formatter/java/JavaFormatterIndentationTest.java
@@ -16,10 +16,7 @@
package com.intellij.java.psi.formatter.java;
import com.intellij.ide.highlighter.JavaFileType;
-import com.intellij.openapi.util.registry.Registry;
-import com.intellij.openapi.util.registry.RegistryValue;
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
-import com.intellij.psi.formatter.java.LegacyChainedMethodCallsBlockBuilder;
import com.intellij.util.IncorrectOperationException;
/**
@@ -839,39 +836,4 @@ public class JavaFormatterIndentationTest extends AbstractJavaFormatterTest {
}"""
);
}
-
- public void testIdea274778() {
- CommonCodeStyleSettings.IndentOptions indentOptions = getSettings().getIndentOptions();
- indentOptions.INDENT_SIZE = 3;
- indentOptions.CONTINUATION_INDENT_SIZE = 3;
- getSettings().ALIGN_MULTILINE_CHAINED_METHODS = true;
- RegistryValue pre212compat = Registry.get(LegacyChainedMethodCallsBlockBuilder.COMPATIBILITY_KEY);
- try {
- pre212compat.setValue(true);
- doTextTest(
- """
- class Foo {
- void foo() {
- LOG.error(DetailsMessage.of(
- "TITLE",
- "LONG MESSAGE TEXT...")
- .with("value", value));
- }
- }""",
-
- """
- class Foo {
- void foo() {
- LOG.error(DetailsMessage.of(
- "TITLE",
- "LONG MESSAGE TEXT...")
- .with("value", value));
- }
- }"""
- );
- }
- finally {
- pre212compat.setValue(false);
- }
- }
}