mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Added option to wrap first method call in method call chain (IDEA-105971)
This commit is contained in:
@@ -153,7 +153,8 @@ public class JavaLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSett
|
||||
"INDENT_CASE_FROM_SWITCH",
|
||||
"SPECIAL_ELSE_IF_TREATMENT",
|
||||
"ENUM_CONSTANTS_WRAP",
|
||||
"ALIGN_CONSECUTIVE_VARIABLE_DECLARATIONS");
|
||||
"ALIGN_CONSECUTIVE_VARIABLE_DECLARATIONS",
|
||||
"WRAP_FIRST_METHOD_IN_CALL_CHAIN");
|
||||
|
||||
consumer.showCustomOption(JavaCodeStyleSettings.class,
|
||||
"ANNOTATION_PARAMETER_WRAP",
|
||||
|
||||
+7
-6
@@ -58,9 +58,6 @@ class ChainMethodCallsBlockBuilder {
|
||||
}
|
||||
|
||||
public Block build(List<ASTNode> nodes) {
|
||||
myWrap = getNewWrap();
|
||||
myChainedCallsAlignment = getNewAlignment();
|
||||
|
||||
List<Block> blocks = buildBlocksFrom(nodes);
|
||||
|
||||
Indent indent = myBlockIndent != null ? myBlockIndent : Indent.getContinuationWithoutFirstIndent(myIndentSettings.USE_RELATIVE_INDENTS);
|
||||
@@ -69,6 +66,10 @@ class ChainMethodCallsBlockBuilder {
|
||||
|
||||
private List<Block> buildBlocksFrom(List<ASTNode> nodes) {
|
||||
List<ChainedCallChunk> methodCall = splitMethodCallOnChunksByDots(nodes);
|
||||
|
||||
myWrap = getNewWrap(mySettings.WRAP_FIRST_METHOD_IN_CALL_CHAIN);
|
||||
myChainedCallsAlignment = getNewAlignment();
|
||||
|
||||
Wrap wrapToUse = null;
|
||||
Alignment alignmentToUse = null;
|
||||
|
||||
@@ -84,7 +85,7 @@ class ChainMethodCallsBlockBuilder {
|
||||
alignmentToUse = null;
|
||||
|
||||
myChainedCallsAlignment = getNewAlignment();
|
||||
myWrap = getNewWrap();
|
||||
myWrap = getNewWrap(mySettings.WRAP_FIRST_METHOD_IN_CALL_CHAIN);
|
||||
}
|
||||
|
||||
SyntheticBlockBuilder builder = new SyntheticBlockBuilder(mySettings, myJavaSettings);
|
||||
@@ -125,8 +126,8 @@ class ChainMethodCallsBlockBuilder {
|
||||
return AbstractJavaBlock.createAlignment(mySettings.ALIGN_MULTILINE_CHAINED_METHODS, null);
|
||||
}
|
||||
|
||||
private Wrap getNewWrap() {
|
||||
return Wrap.createWrap(getWrapType(mySettings.METHOD_CALL_CHAIN_WRAP), false);
|
||||
private Wrap getNewWrap(boolean wrapFirst) {
|
||||
return Wrap.createWrap(getWrapType(mySettings.METHOD_CALL_CHAIN_WRAP), wrapFirst);
|
||||
}
|
||||
|
||||
private boolean isMethodCall(@NotNull ChainedCallChunk callChunk) {
|
||||
|
||||
@@ -590,5 +590,33 @@ public class JavaFormatterWrapTest extends AbstractJavaFormatterTest {
|
||||
|
||||
}
|
||||
|
||||
public void test_ChainedCalls_FirstOnNewLine() {
|
||||
getSettings().METHOD_CALL_CHAIN_WRAP = CommonCodeStyleSettings.WRAP_ALWAYS;
|
||||
getSettings().WRAP_FIRST_METHOD_IN_CALL_CHAIN = true;
|
||||
|
||||
doMethodTest(
|
||||
"obj.call().call().call().call();",
|
||||
"obj\n" +
|
||||
" .call()\n" +
|
||||
" .call()\n" +
|
||||
" .call()\n" +
|
||||
" .call();"
|
||||
);
|
||||
|
||||
doMethodTest(
|
||||
"call().call().call().call();",
|
||||
"call()\n" +
|
||||
" .call()\n" +
|
||||
" .call()\n" +
|
||||
" .call();"
|
||||
);
|
||||
|
||||
doMethodTest(
|
||||
"nestedCall(call().call().call().call());",
|
||||
"nestedCall(call()\n" +
|
||||
" .call()\n" +
|
||||
" .call()\n" +
|
||||
" .call());"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,6 +167,7 @@ public interface CodeStyleSettingsCustomizable {
|
||||
PARAMETER_ANNOTATION_WRAP,
|
||||
VARIABLE_ANNOTATION_WRAP,
|
||||
ALIGN_MULTILINE_CHAINED_METHODS,
|
||||
WRAP_FIRST_METHOD_IN_CALL_CHAIN,
|
||||
ALIGN_MULTILINE_PARAMETERS,
|
||||
ALIGN_MULTILINE_PARAMETERS_IN_CALLS,
|
||||
ALIGN_MULTILINE_RESOURCES,
|
||||
|
||||
@@ -812,6 +812,7 @@ public class CommonCodeStyleSettings {
|
||||
public int THROWS_KEYWORD_WRAP = DO_NOT_WRAP;
|
||||
|
||||
public int METHOD_CALL_CHAIN_WRAP = DO_NOT_WRAP;
|
||||
public boolean WRAP_FIRST_METHOD_IN_CALL_CHAIN = false;
|
||||
|
||||
public boolean PARENTHESES_EXPRESSION_LPAREN_WRAP = false;
|
||||
public boolean PARENTHESES_EXPRESSION_RPAREN_WRAP = false;
|
||||
|
||||
+1
@@ -101,6 +101,7 @@ public class WrappingAndBracesPanel extends OptionTableWithPreviewPanel {
|
||||
addOption("ALIGN_MULTILINE_METHOD_BRACKETS", ApplicationBundle.message("wrapping.align.when.multiline"), WRAPPING_METHOD_PARENTHESES);
|
||||
|
||||
addOption("METHOD_CALL_CHAIN_WRAP", WRAPPING_CALL_CHAIN, WRAP_OPTIONS, WRAP_VALUES);
|
||||
addOption("WRAP_FIRST_METHOD_IN_CALL_CHAIN", ApplicationBundle.message("wrapping.chained.method.call.first.on.new.line"), WRAPPING_CALL_CHAIN);
|
||||
addOption("ALIGN_MULTILINE_CHAINED_METHODS", ApplicationBundle.message("wrapping.align.when.multiline"), WRAPPING_CALL_CHAIN);
|
||||
|
||||
addOption("IF_BRACE_FORCE", ApplicationBundle.message("wrapping.force.braces"), WRAPPING_IF_STATEMENT, BRACE_OPTIONS, BRACE_VALUES);
|
||||
|
||||
@@ -181,6 +181,7 @@ wrapping.force.braces=Force braces
|
||||
wrapping.method.parameters=Method declaration parameters
|
||||
wrapping.method.arguments=Method call arguments
|
||||
wrapping.chained.method.calls=Chained method calls
|
||||
wrapping.chained.method.call.first.on.new.line=Wrap first call
|
||||
wrapping.for.statement='for()' statement
|
||||
wrapping.if.statement='if()' statement
|
||||
wrapping.while.statement='while()' statement
|
||||
|
||||
Reference in New Issue
Block a user