diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/DirectClassBuilder.java b/src/java.base/share/classes/jdk/internal/classfile/impl/DirectClassBuilder.java index 59b9c4f70b4..7d67ed272af 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/DirectClassBuilder.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/DirectClassBuilder.java @@ -25,8 +25,10 @@ package jdk.internal.classfile.impl; +import java.lang.constant.ClassDesc; import java.lang.constant.ConstantDescs; import java.lang.constant.MethodTypeDesc; +import java.lang.reflect.AccessFlag; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -82,18 +84,39 @@ public final class DirectClassBuilder return this; } + @Override + public ClassBuilder withFlags(int flags) { + setFlags(flags); + return this; + } + + @Override + public ClassBuilder withField(String name, + ClassDesc descriptor, + int flags) { + return withField(new DirectFieldBuilder(constantPool, context, + constantPool.utf8Entry(name), constantPool.utf8Entry(descriptor), flags, null)); + } + + @Override + public ClassBuilder withField(Utf8Entry name, + Utf8Entry descriptor, + int flags) { + return withField(new DirectFieldBuilder(constantPool, context, name, descriptor, flags, null)); + } + @Override public ClassBuilder withField(Utf8Entry name, Utf8Entry descriptor, Consumer handler) { - return withField(new DirectFieldBuilder(constantPool, context, name, descriptor, null) + return withField(new DirectFieldBuilder(constantPool, context, name, descriptor, 0, null) .run(handler)); } @Override public ClassBuilder transformField(FieldModel field, FieldTransform transform) { DirectFieldBuilder builder = new DirectFieldBuilder(constantPool, context, field.fieldName(), - field.fieldType(), field); + field.fieldType(), 0, field); builder.transform(field, transform); return withField(builder); } diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/DirectFieldBuilder.java b/src/java.base/share/classes/jdk/internal/classfile/impl/DirectFieldBuilder.java index ce51bb1d26b..15547924cf3 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/DirectFieldBuilder.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/DirectFieldBuilder.java @@ -44,12 +44,13 @@ public final class DirectFieldBuilder ClassFileImpl context, Utf8Entry name, Utf8Entry type, + int flags, FieldModel original) { super(constantPool, context); setOriginal(original); this.name = name; this.desc = type; - this.flags = 0; + this.flags = flags; } @Override @@ -67,6 +68,12 @@ public final class DirectFieldBuilder return this; } + @Override + public FieldBuilder withFlags(int flags) { + setFlags(flags); + return this; + } + void setFlags(int flags) { this.flags = flags; } diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/DirectMethodBuilder.java b/src/java.base/share/classes/jdk/internal/classfile/impl/DirectMethodBuilder.java index 77b937eb74a..fac6b7384e2 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/DirectMethodBuilder.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/DirectMethodBuilder.java @@ -61,6 +61,12 @@ public final class DirectMethodBuilder this.flags = flags; } + @Override + public MethodBuilder withFlags(int flags) { + setFlags(flags); + return this; + } + void setFlags(int flags) { boolean wasStatic = (this.flags & ClassFile.ACC_STATIC) != 0; boolean isStatic = (flags & ClassFile.ACC_STATIC) != 0;