189 super(cf, mapper, pos);
190 }
191 }
192
193 public static final class BoundStackMapTableAttribute
194 extends BoundAttribute<StackMapTableAttribute>
195 implements StackMapTableAttribute {
196 final MethodModel method;
197 final LabelContext ctx;
198 List<StackMapFrameInfo> entries = null;
199
200 public BoundStackMapTableAttribute(CodeImpl code, ClassReader cf, AttributeMapper<StackMapTableAttribute> mapper, int pos) {
201 super(cf, mapper, pos);
202 method = code.parent().orElseThrow();
203 ctx = code;
204 }
205
206 @Override
207 public List<StackMapFrameInfo> entries() {
208 if (entries == null) {
209 entries = new StackMapDecoder(classReader, payloadStart, ctx, StackMapDecoder.initFrameLocals(method)).entries();
210 }
211 return entries;
212 }
213
214 @Override
215 public void writeTo(BufWriterImpl buf) {
216 if (buf.canWriteDirect(classReader) && buf.labelsMatch(ctx)) {
217 classReader.copyBytesTo(buf, payloadStart - NAME_AND_LENGTH_PREFIX, payloadLen() + NAME_AND_LENGTH_PREFIX);
218 } else {
219 attributeMapper().writeAttribute(buf, this);
220 }
221 }
222 }
223
224 public static final class BoundSyntheticAttribute extends BoundAttribute<SyntheticAttribute>
225 implements SyntheticAttribute {
226 public BoundSyntheticAttribute(ClassReader cf, AttributeMapper<SyntheticAttribute> mapper, int pos) {
227 super(cf, mapper, pos);
228 }
229 }
927 }
928 }
929
930 public static final class BoundPermittedSubclassesAttribute extends BoundAttribute<PermittedSubclassesAttribute>
931 implements PermittedSubclassesAttribute {
932 private List<ClassEntry> permittedSubclasses = null;
933
934 public BoundPermittedSubclassesAttribute(ClassReader cf, AttributeMapper<PermittedSubclassesAttribute> mapper, int pos) {
935 super(cf, mapper, pos);
936 }
937
938 @Override
939 public List<ClassEntry> permittedSubclasses() {
940 if (permittedSubclasses == null) {
941 permittedSubclasses = readEntryList(payloadStart, ClassEntry.class);
942 }
943 return permittedSubclasses;
944 }
945 }
946
947 public abstract static sealed class BoundCodeAttribute
948 extends BoundAttribute<CodeAttribute>
949 implements CodeAttribute
950 permits CodeImpl {
951 protected final int codeStart;
952 protected final int codeLength;
953 protected final int codeEnd;
954 protected final int attributePos;
955 protected final int exceptionHandlerPos;
956 protected final int exceptionHandlerCnt;
957 protected final MethodModel enclosingMethod;
958
959 public BoundCodeAttribute(AttributedElement enclosing,
960 ClassReader reader,
961 AttributeMapper<CodeAttribute> mapper,
962 int payloadStart) {
963 super(reader, mapper, payloadStart);
964 this.codeLength = classReader.readInt(payloadStart + 4);
965 this.enclosingMethod = (MethodModel) enclosing;
966 this.codeStart = payloadStart + 8;
1006 case 0x5208e184 ->
1007 name.equalsString(NAME_BOOTSTRAP_METHODS) ? bootstrapMethods() : null;
1008 case 0xcb60907a ->
1009 name.equalsString(NAME_CHARACTER_RANGE_TABLE) ? characterRangeTable() : null;
1010 case 0x4020220d ->
1011 name.equalsString(NAME_CODE) ? code() : null;
1012 case 0xc20dd1fe ->
1013 name.equalsString(NAME_COMPILATION_ID) ? compilationId() : null;
1014 case 0xcab1940d ->
1015 name.equalsString(NAME_CONSTANT_VALUE) ? constantValue() : null;
1016 case 0x558641d3 ->
1017 name.equalsString(NAME_DEPRECATED) ? deprecated() : null;
1018 case 0x51d443cd ->
1019 name.equalsString(NAME_ENCLOSING_METHOD) ? enclosingMethod() : null;
1020 case 0x687c1624 ->
1021 name.equalsString(NAME_EXCEPTIONS) ? exceptions() : null;
1022 case 0x7adb2910 ->
1023 name.equalsString(NAME_INNER_CLASSES) ? innerClasses() : null;
1024 case 0x653f0551 ->
1025 name.equalsString(NAME_LINE_NUMBER_TABLE) ? lineNumberTable() : null;
1026 case 0x64c75927 ->
1027 name.equalsString(NAME_LOCAL_VARIABLE_TABLE) ? localVariableTable() : null;
1028 case 0x6697f98d ->
1029 name.equalsString(NAME_LOCAL_VARIABLE_TYPE_TABLE) ? localVariableTypeTable() : null;
1030 case 0xdbb0cdcb ->
1031 name.equalsString(NAME_METHOD_PARAMETERS) ? methodParameters() : null;
1032 case 0xc9b0928c ->
1033 name.equalsString(NAME_MODULE) ? module() : null;
1034 case 0x41cd27e8 ->
1035 name.equalsString(NAME_MODULE_HASHES) ? moduleHashes() : null;
1036 case 0x7deb0a13 ->
1037 name.equalsString(NAME_MODULE_MAIN_CLASS) ? moduleMainClass() : null;
1038 case 0x6706ff99 ->
1039 name.equalsString(NAME_MODULE_PACKAGES) ? modulePackages() : null;
1040 case 0x60272858 ->
1041 name.equalsString(NAME_MODULE_RESOLUTION) ? moduleResolution() : null;
1042 case 0x5646d73d ->
1043 name.equalsString(NAME_MODULE_TARGET) ? moduleTarget() : null;
1044 case 0x50336c40 ->
1045 name.equalsString(NAME_NEST_HOST) ? nestHost() : null;
|
189 super(cf, mapper, pos);
190 }
191 }
192
193 public static final class BoundStackMapTableAttribute
194 extends BoundAttribute<StackMapTableAttribute>
195 implements StackMapTableAttribute {
196 final MethodModel method;
197 final LabelContext ctx;
198 List<StackMapFrameInfo> entries = null;
199
200 public BoundStackMapTableAttribute(CodeImpl code, ClassReader cf, AttributeMapper<StackMapTableAttribute> mapper, int pos) {
201 super(cf, mapper, pos);
202 method = code.parent().orElseThrow();
203 ctx = code;
204 }
205
206 @Override
207 public List<StackMapFrameInfo> entries() {
208 if (entries == null) {
209 entries = new StackMapDecoder(classReader, payloadStart, ctx, StackMapDecoder.initFrameLocals(method),
210 StackMapDecoder.initFrameUnsets(method)).entries();
211 }
212 return entries;
213 }
214
215 @Override
216 public void writeTo(BufWriterImpl buf) {
217 if (buf.canWriteDirect(classReader) && buf.labelsMatch(ctx)) {
218 classReader.copyBytesTo(buf, payloadStart - NAME_AND_LENGTH_PREFIX, payloadLen() + NAME_AND_LENGTH_PREFIX);
219 } else {
220 attributeMapper().writeAttribute(buf, this);
221 }
222 }
223 }
224
225 public static final class BoundSyntheticAttribute extends BoundAttribute<SyntheticAttribute>
226 implements SyntheticAttribute {
227 public BoundSyntheticAttribute(ClassReader cf, AttributeMapper<SyntheticAttribute> mapper, int pos) {
228 super(cf, mapper, pos);
229 }
230 }
928 }
929 }
930
931 public static final class BoundPermittedSubclassesAttribute extends BoundAttribute<PermittedSubclassesAttribute>
932 implements PermittedSubclassesAttribute {
933 private List<ClassEntry> permittedSubclasses = null;
934
935 public BoundPermittedSubclassesAttribute(ClassReader cf, AttributeMapper<PermittedSubclassesAttribute> mapper, int pos) {
936 super(cf, mapper, pos);
937 }
938
939 @Override
940 public List<ClassEntry> permittedSubclasses() {
941 if (permittedSubclasses == null) {
942 permittedSubclasses = readEntryList(payloadStart, ClassEntry.class);
943 }
944 return permittedSubclasses;
945 }
946 }
947
948 public static final class BoundLoadableDescriptorsAttribute extends BoundAttribute<LoadableDescriptorsAttribute>
949 implements LoadableDescriptorsAttribute {
950 private List<Utf8Entry> loadableDescriptors = null;
951
952 public BoundLoadableDescriptorsAttribute(ClassReader cf, AttributeMapper<LoadableDescriptorsAttribute> mapper, int pos) {
953 super(cf, mapper, pos);
954 }
955
956 @Override
957 public List<Utf8Entry> loadableDescriptors() {
958 if (loadableDescriptors == null) {
959 loadableDescriptors = readEntryList(payloadStart, Utf8Entry.class);
960 }
961 return loadableDescriptors;
962 }
963 }
964
965 public abstract static sealed class BoundCodeAttribute
966 extends BoundAttribute<CodeAttribute>
967 implements CodeAttribute
968 permits CodeImpl {
969 protected final int codeStart;
970 protected final int codeLength;
971 protected final int codeEnd;
972 protected final int attributePos;
973 protected final int exceptionHandlerPos;
974 protected final int exceptionHandlerCnt;
975 protected final MethodModel enclosingMethod;
976
977 public BoundCodeAttribute(AttributedElement enclosing,
978 ClassReader reader,
979 AttributeMapper<CodeAttribute> mapper,
980 int payloadStart) {
981 super(reader, mapper, payloadStart);
982 this.codeLength = classReader.readInt(payloadStart + 4);
983 this.enclosingMethod = (MethodModel) enclosing;
984 this.codeStart = payloadStart + 8;
1024 case 0x5208e184 ->
1025 name.equalsString(NAME_BOOTSTRAP_METHODS) ? bootstrapMethods() : null;
1026 case 0xcb60907a ->
1027 name.equalsString(NAME_CHARACTER_RANGE_TABLE) ? characterRangeTable() : null;
1028 case 0x4020220d ->
1029 name.equalsString(NAME_CODE) ? code() : null;
1030 case 0xc20dd1fe ->
1031 name.equalsString(NAME_COMPILATION_ID) ? compilationId() : null;
1032 case 0xcab1940d ->
1033 name.equalsString(NAME_CONSTANT_VALUE) ? constantValue() : null;
1034 case 0x558641d3 ->
1035 name.equalsString(NAME_DEPRECATED) ? deprecated() : null;
1036 case 0x51d443cd ->
1037 name.equalsString(NAME_ENCLOSING_METHOD) ? enclosingMethod() : null;
1038 case 0x687c1624 ->
1039 name.equalsString(NAME_EXCEPTIONS) ? exceptions() : null;
1040 case 0x7adb2910 ->
1041 name.equalsString(NAME_INNER_CLASSES) ? innerClasses() : null;
1042 case 0x653f0551 ->
1043 name.equalsString(NAME_LINE_NUMBER_TABLE) ? lineNumberTable() : null;
1044 case 0x5f348b64 ->
1045 name.equalsString(NAME_LOADABLE_DESCRIPTORS) ? loadableDescriptors() : null;
1046 case 0x64c75927 ->
1047 name.equalsString(NAME_LOCAL_VARIABLE_TABLE) ? localVariableTable() : null;
1048 case 0x6697f98d ->
1049 name.equalsString(NAME_LOCAL_VARIABLE_TYPE_TABLE) ? localVariableTypeTable() : null;
1050 case 0xdbb0cdcb ->
1051 name.equalsString(NAME_METHOD_PARAMETERS) ? methodParameters() : null;
1052 case 0xc9b0928c ->
1053 name.equalsString(NAME_MODULE) ? module() : null;
1054 case 0x41cd27e8 ->
1055 name.equalsString(NAME_MODULE_HASHES) ? moduleHashes() : null;
1056 case 0x7deb0a13 ->
1057 name.equalsString(NAME_MODULE_MAIN_CLASS) ? moduleMainClass() : null;
1058 case 0x6706ff99 ->
1059 name.equalsString(NAME_MODULE_PACKAGES) ? modulePackages() : null;
1060 case 0x60272858 ->
1061 name.equalsString(NAME_MODULE_RESOLUTION) ? moduleResolution() : null;
1062 case 0x5646d73d ->
1063 name.equalsString(NAME_MODULE_TARGET) ? moduleTarget() : null;
1064 case 0x50336c40 ->
1065 name.equalsString(NAME_NEST_HOST) ? nestHost() : null;
|