From ac5f1f100622e7fd608c8e0f0ce9db6bc87be210 Mon Sep 17 00:00:00 2001 From: shan1024 Date: Fri, 9 Jun 2017 20:26:58 +0530 Subject: [PATCH] Fix fork-join formatting issue Resolves #384 --- .../plugins/idea/BallerinaTypes.java | 3 + .../BallerinaFormattingModelBuilder.java | 4 +- .../formatting/BallerinaFormattingTest.java | 4 ++ .../testData/formatting/ForkJoin-after.bal | 58 +++++++++++++++++++ .../testData/formatting/ForkJoin.bal | 58 +++++++++++++++++++ 5 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/testData/formatting/ForkJoin-after.bal create mode 100644 src/test/resources/testData/formatting/ForkJoin.bal diff --git a/src/main/java/org/ballerinalang/plugins/idea/BallerinaTypes.java b/src/main/java/org/ballerinalang/plugins/idea/BallerinaTypes.java index 005ba51f..2dd289aa 100644 --- a/src/main/java/org/ballerinalang/plugins/idea/BallerinaTypes.java +++ b/src/main/java/org/ballerinalang/plugins/idea/BallerinaTypes.java @@ -72,6 +72,7 @@ private BallerinaTypes() { public static RuleIElementType WORKER_DECLARATION = ruleIElementTypes.get(BallerinaParser.RULE_workerDeclaration); public static RuleIElementType WORKER_BODY = ruleIElementTypes.get(BallerinaParser.RULE_workerBody); public static RuleIElementType FORK_JOIN_STATEMENT = ruleIElementTypes.get(BallerinaParser.RULE_forkJoinStatement); + public static RuleIElementType JOIN_CONDITIONS = ruleIElementTypes.get(BallerinaParser.RULE_joinConditions); public static RuleIElementType TRANSACTION_STATEMENT = ruleIElementTypes.get(BallerinaParser .RULE_transactionStatement); public static RuleIElementType TRANSFORM_STATEMENT = ruleIElementTypes.get(BallerinaParser.RULE_transformStatement); @@ -177,6 +178,8 @@ private BallerinaTypes() { public static TokenIElementType MOD = tokenIElementTypes.get(BallerinaLexer.MOD); public static TokenIElementType AT = tokenIElementTypes.get(BallerinaLexer.AT); + public static TokenIElementType INTEGER_LITERAL = tokenIElementTypes.get(BallerinaLexer.IntegerLiteral); + public static final TokenSet OPERATORS = TokenSet.create(ASSIGN, EQUAL, LE, GE, NOTEQUAL, AND, OR, MUL, DIV, BITAND, BITOR, CARET, MOD); } diff --git a/src/main/java/org/ballerinalang/plugins/idea/formatter/BallerinaFormattingModelBuilder.java b/src/main/java/org/ballerinalang/plugins/idea/formatter/BallerinaFormattingModelBuilder.java index d1cd7e97..8d5356c8 100644 --- a/src/main/java/org/ballerinalang/plugins/idea/formatter/BallerinaFormattingModelBuilder.java +++ b/src/main/java/org/ballerinalang/plugins/idea/formatter/BallerinaFormattingModelBuilder.java @@ -72,7 +72,8 @@ private static SpacingBuilder createSpaceBuilder(CodeStyleSettings settings) { .after(CONST).spaceIf(true) .after(CREATE).spaceIf(true) .around(ELSE).spaceIf(true) - .after(FORK).spaceIf(true) + .between(FORK, LBRACE).spaceIf(true) + .between(FORK, SEMI).spaceIf(false) .after(FUNCTION).spaceIf(true) .after(IF).spaceIf(true) .after(IMPORT).spaceIf(true) @@ -142,6 +143,7 @@ private static SpacingBuilder createSpaceBuilder(CodeStyleSettings settings) { .between(XML, LT).spaceIf(false) .around(XML_NAMESPACE_NAME).spaceIf(false) .around(EXPRESSION_LIST).spaceIf(false) + .aroundInside(INTEGER_LITERAL, JOIN_CONDITIONS).spaceIf(true) .withinPairInside(IDENTIFIER, LBRACE, FUNCTION_DEFINITION).spaceIf(true) .withinPairInside(IDENTIFIER, LBRACE, SERVICE_DEFINITION).spaceIf(true) .withinPairInside(IDENTIFIER, LBRACE, RESOURCE_DEFINITION).spaceIf(true) diff --git a/src/test/java/formatting/BallerinaFormattingTest.java b/src/test/java/formatting/BallerinaFormattingTest.java index bad92689..2cb94840 100644 --- a/src/test/java/formatting/BallerinaFormattingTest.java +++ b/src/test/java/formatting/BallerinaFormattingTest.java @@ -68,6 +68,10 @@ public void testExpressions() { doTest(); } + public void testForkJoin() { + doTest(); + } + public void testFunctionDefinition() { doTest(); } diff --git a/src/test/resources/testData/formatting/ForkJoin-after.bal b/src/test/resources/testData/formatting/ForkJoin-after.bal new file mode 100644 index 00000000..cdd8e3a3 --- /dev/null +++ b/src/test/resources/testData/formatting/ForkJoin-after.bal @@ -0,0 +1,58 @@ +import ballerina.lang.messages; +import ballerina.lang.system; + +function testForkJoinAnyOfSpecific (message m) (message[]) { + + message[] results = [null]; + json error; + system:println("Airfare "); + fork { + worker ABC_Airline { + json payload; + payload = {"name":"abc"}; + message m1 = messages:clone(m); + messages:setJsonPayload(m1, payload); + m1 -> fork; + } + + worker XYZ_Airline { + json payload; + payload = {"name":"xyz"}; + message m1 = messages:clone(m); + messages:setJsonPayload(m1, payload); + m1 -> fork; + } + + worker PQR_Airline { + json payload; + payload = {"name":"pqr"}; + message m1 = messages:clone(m); + messages:setJsonPayload(m1, payload); + m1 -> fork; + } + } join (some 1 ABC_Airline, XYZ_Airline) (map airlineResponses) { + if (airlineResponses["ABC_Airline"] != null) { + any[] abc; + abc, _ = (any[])airlineResponses["ABC_Airline"]; + results[0] = (message)abc[0]; + system:println(results[0]); + return results; + } + + if (airlineResponses["XYZ_Airline"] != null) { + any[] xyz; + xyz, _ = (any[])airlineResponses["XYZ_Airline"]; + results[0] = (message)xyz[0]; + system:println(results[0]); + return results; + } + return results; + } timeout (30) (map airlineResponses) { + system:println("error occurred"); + error = {"error":{"code":"500", "reason":"timed out"}}; + message res = {}; + messages:setJsonPayload(res, error); + results[0] = m; + return results; + } +} \ No newline at end of file diff --git a/src/test/resources/testData/formatting/ForkJoin.bal b/src/test/resources/testData/formatting/ForkJoin.bal new file mode 100644 index 00000000..2ed68193 --- /dev/null +++ b/src/test/resources/testData/formatting/ForkJoin.bal @@ -0,0 +1,58 @@ +import ballerina.lang. messages; +import ballerina.lang.system; + +function testForkJoinAnyOfSpecific ( message m ) ( message [ ] ) { + + message [ ] results = [ null ] ; + json error; + system:println("Airfare "); + fork { + worker ABC_Airline { + json payload; + payload = {"name":"abc"}; + message m1 = messages:clone(m); + messages:setJsonPayload(m1, payload); + m1 -> fork ; + } + + worker XYZ_Airline { + json payload; + payload = {"name":"xyz"}; + message m1 = messages:clone(m); + messages:setJsonPayload(m1, payload); + m1 -> fork ; + } + + worker PQR_Airline { + json payload; + payload = {"name":"pqr"}; + message m1 = messages:clone(m); + messages:setJsonPayload(m1, payload); + m1 -> fork; + } + } join ( some 1 ABC_Airline , XYZ_Airline ) ( map airlineResponses ) { + if (airlineResponses["ABC_Airline"] != null) { + any[] abc; + abc, _ = (any[])airlineResponses["ABC_Airline"]; + results[0] = (message)abc[0]; + system:println(results[0]); + return results; + } + + if ( airlineResponses [ "XYZ_Airline" ] != null) { + any [ ] xyz ; + xyz, _ = (any[])airlineResponses["XYZ_Airline"]; + results[0] = (message)xyz[0]; + system:println(results[0]); + return results; + } + return results; + } timeout ( 30 ) ( map airlineResponses ) { + system:println("error occurred"); + error = {"error":{"code":"500", "reason":"timed out"}}; + message res = {}; + messages:setJsonPayload(res, error) ; + results[0] = m; + return results; + } +} \ No newline at end of file