[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