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
215 public static final class BoundSyntheticAttribute extends BoundAttribute<SyntheticAttribute>
216 implements SyntheticAttribute {
217 public BoundSyntheticAttribute(ClassReader cf, AttributeMapper<SyntheticAttribute> mapper, int pos) {
218 super(cf, mapper, pos);
219 }
220 }
221
222 public static final class BoundLineNumberTableAttribute
223 extends BoundAttribute<LineNumberTableAttribute>
224 implements LineNumberTableAttribute {
225 private List<LineNumberInfo> lineNumbers = null;
226
227 public BoundLineNumberTableAttribute(ClassReader cf, AttributeMapper<LineNumberTableAttribute> mapper, int pos) {
228 super(cf, mapper, pos);
229 }
918 }
919 }
920
921 public static final class BoundPermittedSubclassesAttribute extends BoundAttribute<PermittedSubclassesAttribute>
922 implements PermittedSubclassesAttribute {
923 private List<ClassEntry> permittedSubclasses = null;
924
925 public BoundPermittedSubclassesAttribute(ClassReader cf, AttributeMapper<PermittedSubclassesAttribute> mapper, int pos) {
926 super(cf, mapper, pos);
927 }
928
929 @Override
930 public List<ClassEntry> permittedSubclasses() {
931 if (permittedSubclasses == null) {
932 permittedSubclasses = readEntryList(payloadStart, ClassEntry.class);
933 }
934 return permittedSubclasses;
935 }
936 }
937
938 public abstract static sealed class BoundCodeAttribute
939 extends BoundAttribute<CodeAttribute>
940 implements CodeAttribute
941 permits CodeImpl {
942 protected final int codeStart;
943 protected final int codeLength;
944 protected final int codeEnd;
945 protected final int attributePos;
946 protected final int exceptionHandlerPos;
947 protected final int exceptionHandlerCnt;
948 protected final MethodModel enclosingMethod;
949
950 public BoundCodeAttribute(AttributedElement enclosing,
951 ClassReader reader,
952 AttributeMapper<CodeAttribute> mapper,
953 int payloadStart) {
954 super(reader, mapper, payloadStart);
955 this.codeLength = classReader.readInt(payloadStart + 4);
956 this.enclosingMethod = (MethodModel) enclosing;
957 this.codeStart = payloadStart + 8;
997 case 0x5208e184 ->
998 name.equalsString(NAME_BOOTSTRAP_METHODS) ? bootstrapMethods() : null;
999 case 0xcb60907a ->
1000 name.equalsString(NAME_CHARACTER_RANGE_TABLE) ? characterRangeTable() : null;
1001 case 0x4020220d ->
1002 name.equalsString(NAME_CODE) ? code() : null;
1003 case 0xc20dd1fe ->
1004 name.equalsString(NAME_COMPILATION_ID) ? compilationId() : null;
1005 case 0xcab1940d ->
1006 name.equalsString(NAME_CONSTANT_VALUE) ? constantValue() : null;
1007 case 0x558641d3 ->
1008 name.equalsString(NAME_DEPRECATED) ? deprecated() : null;
1009 case 0x51d443cd ->
1010 name.equalsString(NAME_ENCLOSING_METHOD) ? enclosingMethod() : null;
1011 case 0x687c1624 ->
1012 name.equalsString(NAME_EXCEPTIONS) ? exceptions() : null;
1013 case 0x7adb2910 ->
1014 name.equalsString(NAME_INNER_CLASSES) ? innerClasses() : null;
1015 case 0x653f0551 ->
1016 name.equalsString(NAME_LINE_NUMBER_TABLE) ? lineNumberTable() : null;
1017 case 0x64c75927 ->
1018 name.equalsString(NAME_LOCAL_VARIABLE_TABLE) ? localVariableTable() : null;
1019 case 0x6697f98d ->
1020 name.equalsString(NAME_LOCAL_VARIABLE_TYPE_TABLE) ? localVariableTypeTable() : null;
1021 case 0xdbb0cdcb ->
1022 name.equalsString(NAME_METHOD_PARAMETERS) ? methodParameters() : null;
1023 case 0xc9b0928c ->
1024 name.equalsString(NAME_MODULE) ? module() : null;
1025 case 0x41cd27e8 ->
1026 name.equalsString(NAME_MODULE_HASHES) ? moduleHashes() : null;
1027 case 0x7deb0a13 ->
1028 name.equalsString(NAME_MODULE_MAIN_CLASS) ? moduleMainClass() : null;
1029 case 0x6706ff99 ->
1030 name.equalsString(NAME_MODULE_PACKAGES) ? modulePackages() : null;
1031 case 0x60272858 ->
1032 name.equalsString(NAME_MODULE_RESOLUTION) ? moduleResolution() : null;
1033 case 0x5646d73d ->
1034 name.equalsString(NAME_MODULE_TARGET) ? moduleTarget() : null;
1035 case 0x50336c40 ->
1036 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
216 public static final class BoundSyntheticAttribute extends BoundAttribute<SyntheticAttribute>
217 implements SyntheticAttribute {
218 public BoundSyntheticAttribute(ClassReader cf, AttributeMapper<SyntheticAttribute> mapper, int pos) {
219 super(cf, mapper, pos);
220 }
221 }
222
223 public static final class BoundLineNumberTableAttribute
224 extends BoundAttribute<LineNumberTableAttribute>
225 implements LineNumberTableAttribute {
226 private List<LineNumberInfo> lineNumbers = null;
227
228 public BoundLineNumberTableAttribute(ClassReader cf, AttributeMapper<LineNumberTableAttribute> mapper, int pos) {
229 super(cf, mapper, pos);
230 }
919 }
920 }
921
922 public static final class BoundPermittedSubclassesAttribute extends BoundAttribute<PermittedSubclassesAttribute>
923 implements PermittedSubclassesAttribute {
924 private List<ClassEntry> permittedSubclasses = null;
925
926 public BoundPermittedSubclassesAttribute(ClassReader cf, AttributeMapper<PermittedSubclassesAttribute> mapper, int pos) {
927 super(cf, mapper, pos);
928 }
929
930 @Override
931 public List<ClassEntry> permittedSubclasses() {
932 if (permittedSubclasses == null) {
933 permittedSubclasses = readEntryList(payloadStart, ClassEntry.class);
934 }
935 return permittedSubclasses;
936 }
937 }
938
939 public static final class BoundLoadableDescriptorsAttribute extends BoundAttribute<LoadableDescriptorsAttribute>
940 implements LoadableDescriptorsAttribute {
941 private List<Utf8Entry> loadableDescriptors = null;
942
943 public BoundLoadableDescriptorsAttribute(ClassReader cf, AttributeMapper<LoadableDescriptorsAttribute> mapper, int pos) {
944 super(cf, mapper, pos);
945 }
946
947 @Override
948 public List<Utf8Entry> loadableDescriptors() {
949 if (loadableDescriptors == null) {
950 loadableDescriptors = readEntryList(payloadStart, Utf8Entry.class);
951 }
952 return loadableDescriptors;
953 }
954 }
955
956 public abstract static sealed class BoundCodeAttribute
957 extends BoundAttribute<CodeAttribute>
958 implements CodeAttribute
959 permits CodeImpl {
960 protected final int codeStart;
961 protected final int codeLength;
962 protected final int codeEnd;
963 protected final int attributePos;
964 protected final int exceptionHandlerPos;
965 protected final int exceptionHandlerCnt;
966 protected final MethodModel enclosingMethod;
967
968 public BoundCodeAttribute(AttributedElement enclosing,
969 ClassReader reader,
970 AttributeMapper<CodeAttribute> mapper,
971 int payloadStart) {
972 super(reader, mapper, payloadStart);
973 this.codeLength = classReader.readInt(payloadStart + 4);
974 this.enclosingMethod = (MethodModel) enclosing;
975 this.codeStart = payloadStart + 8;
1015 case 0x5208e184 ->
1016 name.equalsString(NAME_BOOTSTRAP_METHODS) ? bootstrapMethods() : null;
1017 case 0xcb60907a ->
1018 name.equalsString(NAME_CHARACTER_RANGE_TABLE) ? characterRangeTable() : null;
1019 case 0x4020220d ->
1020 name.equalsString(NAME_CODE) ? code() : null;
1021 case 0xc20dd1fe ->
1022 name.equalsString(NAME_COMPILATION_ID) ? compilationId() : null;
1023 case 0xcab1940d ->
1024 name.equalsString(NAME_CONSTANT_VALUE) ? constantValue() : null;
1025 case 0x558641d3 ->
1026 name.equalsString(NAME_DEPRECATED) ? deprecated() : null;
1027 case 0x51d443cd ->
1028 name.equalsString(NAME_ENCLOSING_METHOD) ? enclosingMethod() : null;
1029 case 0x687c1624 ->
1030 name.equalsString(NAME_EXCEPTIONS) ? exceptions() : null;
1031 case 0x7adb2910 ->
1032 name.equalsString(NAME_INNER_CLASSES) ? innerClasses() : null;
1033 case 0x653f0551 ->
1034 name.equalsString(NAME_LINE_NUMBER_TABLE) ? lineNumberTable() : null;
1035 case 0x5f348b64 ->
1036 name.equalsString(NAME_LOADABLE_DESCRIPTORS) ? loadableDescriptors() : null;
1037 case 0x64c75927 ->
1038 name.equalsString(NAME_LOCAL_VARIABLE_TABLE) ? localVariableTable() : null;
1039 case 0x6697f98d ->
1040 name.equalsString(NAME_LOCAL_VARIABLE_TYPE_TABLE) ? localVariableTypeTable() : null;
1041 case 0xdbb0cdcb ->
1042 name.equalsString(NAME_METHOD_PARAMETERS) ? methodParameters() : null;
1043 case 0xc9b0928c ->
1044 name.equalsString(NAME_MODULE) ? module() : null;
1045 case 0x41cd27e8 ->
1046 name.equalsString(NAME_MODULE_HASHES) ? moduleHashes() : null;
1047 case 0x7deb0a13 ->
1048 name.equalsString(NAME_MODULE_MAIN_CLASS) ? moduleMainClass() : null;
1049 case 0x6706ff99 ->
1050 name.equalsString(NAME_MODULE_PACKAGES) ? modulePackages() : null;
1051 case 0x60272858 ->
1052 name.equalsString(NAME_MODULE_RESOLUTION) ? moduleResolution() : null;
1053 case 0x5646d73d ->
1054 name.equalsString(NAME_MODULE_TARGET) ? moduleTarget() : null;
1055 case 0x50336c40 ->
1056 name.equalsString(NAME_NEST_HOST) ? nestHost() : null;
|