Package org.apache.flink.table.codesplit
Class BlockStatementSplitter
java.lang.Object
org.apache.flink.table.codesplit.BlockStatementSplitter
Extract statements from IFs, ELSEs and WHILEs blocks making them smaller.
BlockStatementSplitter does not recognize if statement operates on local of class member
variable. Because of that, code must be preprocessed by DeclarationRewriter which
converts all local variables extracted as to member variables.
Before
while (counter > 0) {
int localA = a + 1000;
System.out.println(localA);
if (a > 0) {
b = a * 2;
c = b * 2;
System.out.println(b);
} else {
b = a * 3;
System.out.println(b);
}
counter--;
}
After
while (counter > 0) {
myFun_0_1(a, b, c);
if (a > 0) {
myFun_0_1_2(a, b, c);
} else {
myFun_0_1_3(a, b, c);
}
counter--;
}
Where bodies of extracted "methods" are:
myFun_0_1(int a, int b, int c) ->
int localA = a + 1000;
System.out.println(localA);
myFun_0_1_3(int a, int b, int c) ->
b = a * 2;
c = b * 2;
System.out.println(b);
myFun_whileBody0_0_ifBody1(int a) ->
b = a * 3;
System.out.println(b);
-
Constructor Summary
ConstructorsConstructorDescriptionBlockStatementSplitter(String code, String parameters) Initialize new BlockStatementSplitter. -
Method Summary
Modifier and TypeMethodDescriptionThis method extracts statements from IFs, ELSE's and WHILE blocks from block code used during initialization of this object.rewriteBlock(String context) Rewrite code block that was used for this object initialization.
-
Constructor Details
-
BlockStatementSplitter
Initialize new BlockStatementSplitter.- Parameters:
code- a code block that should be rewritten.parameters- parameters definition that should be used for extracted methods.
-
-
Method Details
-
rewriteBlock
Rewrite code block that was used for this object initialization.- Parameters:
context- prefix for extracted blocks.- Returns:
- a map which key represent rewritten block name and value represents rewritten code block, including calls to extracted methods
-
extractBlocks
This method extracts statements from IFs, ELSE's and WHILE blocks from block code used during initialization of this object. Every entry of returned map can be seen as new method name (map key) and method's body (map value). The block names will be prefixed with provided context.- Returns:
- a map of block name to block statements mappings. The key can be interpreted as name of extracted block/method and corresponding List represents individual statements (block' lines) for this block.
-