< prev index next >

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

Print this page

  1 /*
  2  * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.  Oracle designates this
  8  * particular file as subject to the "Classpath" exception as provided
  9  * by Oracle in the LICENSE file that accompanied this code.
 10  *
 11  * This code is distributed in the hope that it will be useful, but WITHOUT
 12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 14  * version 2 for more details (a copy is included in the LICENSE file that
 15  * accompanied this code).
 16  *
 17  * You should have received a copy of the GNU General Public License version
 18  * 2 along with this work; if not, write to the Free Software Foundation,
 19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 20  *
 21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 22  * or visit www.oracle.com if you need additional information or have any

 81         return reader.readU2(startPos);
 82     }
 83 
 84     @Override
 85     public int parameterSlot(int paramNo) {
 86         if (parameterSlots == null)
 87             parameterSlots = Util.parseParameterSlots(methodFlags(), methodTypeSymbol());
 88         return parameterSlots[paramNo];
 89     }
 90 
 91     @Override
 92     public List<Attribute<?>> attributes() {
 93         if (attributes == null) {
 94             attributes = BoundAttribute.readAttributes(this, reader, attributesPos, reader.customAttributes());
 95         }
 96         return attributes;
 97     }
 98 
 99     @Override
100     public void writeTo(BufWriterImpl buf) {
101         if (buf.canWriteDirect(reader)) {
102             reader.copyBytesTo(buf, startPos, endPos - startPos);
103         }
104         else {
105             buf.writeU2U2U2(flags().flagsMask(),
106                     buf.cpIndex(methodName()),
107                     buf.cpIndex(methodType()));
108             Util.writeAttributes(buf, attributes());
109         }
110     }
111 
112     // MethodModel
113 
114     @Override
115     public Optional<CodeModel> code() {
116         return findAttribute(Attributes.code()).map(a -> (CodeModel) a);
117     }
118 
119     @Override
120     public void forEach(Consumer<? super MethodElement> consumer) {
121         consumer.accept(flags());

  1 /*
  2  * Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.  Oracle designates this
  8  * particular file as subject to the "Classpath" exception as provided
  9  * by Oracle in the LICENSE file that accompanied this code.
 10  *
 11  * This code is distributed in the hope that it will be useful, but WITHOUT
 12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 14  * version 2 for more details (a copy is included in the LICENSE file that
 15  * accompanied this code).
 16  *
 17  * You should have received a copy of the GNU General Public License version
 18  * 2 along with this work; if not, write to the Free Software Foundation,
 19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 20  *
 21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 22  * or visit www.oracle.com if you need additional information or have any

 81         return reader.readU2(startPos);
 82     }
 83 
 84     @Override
 85     public int parameterSlot(int paramNo) {
 86         if (parameterSlots == null)
 87             parameterSlots = Util.parseParameterSlots(methodFlags(), methodTypeSymbol());
 88         return parameterSlots[paramNo];
 89     }
 90 
 91     @Override
 92     public List<Attribute<?>> attributes() {
 93         if (attributes == null) {
 94             attributes = BoundAttribute.readAttributes(this, reader, attributesPos, reader.customAttributes());
 95         }
 96         return attributes;
 97     }
 98 
 99     @Override
100     public void writeTo(BufWriterImpl buf) {
101         if (Util.canSkipMethodInflation(reader, this, buf)) {
102             reader.copyBytesTo(buf, startPos, endPos - startPos);
103         }
104         else {
105             buf.writeU2U2U2(flags().flagsMask(),
106                     buf.cpIndex(methodName()),
107                     buf.cpIndex(methodType()));
108             Util.writeAttributes(buf, attributes());
109         }
110     }
111 
112     // MethodModel
113 
114     @Override
115     public Optional<CodeModel> code() {
116         return findAttribute(Attributes.code()).map(a -> (CodeModel) a);
117     }
118 
119     @Override
120     public void forEach(Consumer<? super MethodElement> consumer) {
121         consumer.accept(flags());
< prev index next >