[code-reflection] RFR: Committing a Concatenation transformation to StringBuilder
    Paul Sandoz 
    psandoz at openjdk.org
       
    Thu Jun 13 21:05:28 UTC 2024
    
    
  
On Thu, 13 Jun 2024 20:00:29 GMT, Ian Graves <igraves at openjdk.org> wrote:
> A transformation that converts String Concatenation to StringBuilder for uses in lowering to Bytecode.
src/java.base/share/classes/java/lang/reflect/code/transformations/LinearConcatTransform.java line 34:
> 32: import java.lang.reflect.code.type.MethodRef;
> 33: 
> 34: public class LinearConcatTransform {
Suggest a rename to `LinearStringContextTransformer` and merge with `ContactTransform` (no need for an inner class). Rather than create a new package place in the analysis package.
src/java.base/share/classes/java/lang/reflect/code/transformations/LinearConcatTransform.java line 68:
> 66:         private static StringAndBuilder stringBuild(Block.Builder builder, Value left, Value right) {
> 67:             var newB = stringBuilder(builder, left, right);
> 68:             var toStringMR = MethodRef.method(SBC_TYPE, "toString", JavaType.J_L_STRING);
Declare as static final.
src/java.base/share/classes/java/lang/reflect/code/transformations/LinearConcatTransform.java line 79:
> 77: 
> 78:             sb = builder.apply(newBuilder);
> 79:             var leftMethodDesc = MethodRef.method(SBC_TYPE, "append", SBC_TYPE, left.type());
Refactor this ref and op construction into a method e.g., `append(sb, left.type())` and then inline in the `builder.op` call
test/jdk/java/lang/reflect/code/TestStringConcatTransform.java line 112:
> 110: 
> 111:     @Test(dataProvider = "getClassMethods")
> 112:     public void testSSAModelTransform(@NoInjection Method method) {
Also transform model as in `model.transform(new LinearConcatTransform.ConcatTransform())` i.e. before SSA too.
test/jdk/java/lang/reflect/code/TestStringConcatTransform.java line 199:
> 197:                 return block;
> 198:             }
> 199:         });
Use `OpTransformer.LOWERING_TRANSFORMER`
test/jdk/java/lang/reflect/code/TestStringConcatTransform.java line 224:
> 222:     }
> 223: 
> 224:     static CoreOp.FuncOp lower(CoreOp.FuncOp f) {
Not used. I recommend you look at the code analyze problems in the IDE, it will catch stuff like this.
-------------
PR Review Comment: https://git.openjdk.org/babylon/pull/135#discussion_r1638902294
PR Review Comment: https://git.openjdk.org/babylon/pull/135#discussion_r1638901943
PR Review Comment: https://git.openjdk.org/babylon/pull/135#discussion_r1638935940
PR Review Comment: https://git.openjdk.org/babylon/pull/135#discussion_r1638947225
PR Review Comment: https://git.openjdk.org/babylon/pull/135#discussion_r1638940348
PR Review Comment: https://git.openjdk.org/babylon/pull/135#discussion_r1638942943
    
    
More information about the babylon-dev
mailing list