Skip to content

Commit 68d1f5c

Browse files
committed
8338543: ClassBuilder withMethod builders should cache the method type symbol
Reviewed-by: asotona
1 parent 55851a3 commit 68d1f5c

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

src/java.base/share/classes/java/lang/classfile/ClassBuilder.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -276,10 +276,7 @@ default ClassBuilder withMethodBody(String name,
276276
MethodTypeDesc descriptor,
277277
int methodFlags,
278278
Consumer<? super CodeBuilder> handler) {
279-
return withMethodBody(constantPool().utf8Entry(name),
280-
constantPool().utf8Entry(descriptor),
281-
methodFlags,
282-
handler);
279+
return withMethod(name, descriptor, methodFlags, mb -> mb.withCode(handler));
283280
}
284281

285282
/**

src/java.base/share/classes/jdk/internal/classfile/impl/ChainedClassBuilder.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
*/
2525
package jdk.internal.classfile.impl;
2626

27+
import java.lang.constant.MethodTypeDesc;
2728
import java.util.function.Consumer;
2829

2930
import java.lang.classfile.*;
@@ -78,6 +79,15 @@ public ClassBuilder withMethod(Utf8Entry name, Utf8Entry descriptor, int flags,
7879
return this;
7980
}
8081

82+
@Override
83+
public ClassBuilder withMethod(String name, MethodTypeDesc descriptor, int flags, Consumer<? super MethodBuilder> handler) {
84+
var mb = new BufferedMethodBuilder(terminal.constantPool, terminal.context,
85+
constantPool().utf8Entry(name), constantPool().utf8Entry(descriptor), flags, null);
86+
mb.mDesc = descriptor;
87+
consumer.accept(mb.run(handler).toModel());
88+
return this;
89+
}
90+
8191
@Override
8292
public ClassBuilder transformMethod(MethodModel method, MethodTransform transform) {
8393
BufferedMethodBuilder builder = new BufferedMethodBuilder(terminal.constantPool, terminal.context,

src/java.base/share/classes/jdk/internal/classfile/impl/DirectClassBuilder.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
package jdk.internal.classfile.impl;
2727

2828
import java.lang.constant.ConstantDescs;
29+
import java.lang.constant.MethodTypeDesc;
2930
import java.util.ArrayList;
3031
import java.util.Collections;
3132
import java.util.List;
@@ -106,6 +107,13 @@ public ClassBuilder withMethod(Utf8Entry name,
106107
.run(handler));
107108
}
108109

110+
@Override
111+
public ClassBuilder withMethod(String name, MethodTypeDesc descriptor, int flags, Consumer<? super MethodBuilder> handler) {
112+
var method = new DirectMethodBuilder(constantPool, context, constantPool.utf8Entry(name), constantPool.utf8Entry(descriptor), flags, null);
113+
method.mDesc = descriptor;
114+
return withMethod(method.run(handler));
115+
}
116+
109117
@Override
110118
public ClassBuilder transformMethod(MethodModel method, MethodTransform transform) {
111119
DirectMethodBuilder builder = new DirectMethodBuilder(constantPool, context, method.methodName(),

0 commit comments

Comments
 (0)