< prev index next >

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

Print this page

 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;
< prev index next >