Package org.apache.flink.table.codesplit
Class BlockStatementSplitter
- java.lang.Object
-
- org.apache.flink.table.codesplit.BlockStatementSplitter
-
@Internal public class BlockStatementSplitter extends Object
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
Constructors Constructor Description BlockStatementSplitter(String code, String parameters)
Initialize new BlockStatementSplitter.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Map<String,List<String>>
extractBlocks()
This method extracts statements from IFs, ELSE's and WHILE blocks from block code used during initialization of this object.String
rewriteBlock(String context)
Rewrite code block that was used for this object initialization.
-
-
-
Method Detail
-
rewriteBlock
public String rewriteBlock(String context)
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
public Map<String,List<String>> 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.
-
-