1 /* 2 * Copyright (c) 2017, 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. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 package jdk.experimental.bytecode; 25 26 import java.util.function.Consumer; 27 import java.util.function.ToIntBiFunction; 28 29 /** 30 * An interface for building and tracking constant pools. 31 * 32 * @param <S> the type of the symbol representation 33 * @param <T> the type of type descriptors representation 34 * @param <E> the type of pool entries 35 */ 36 public interface PoolHelper<S, T, E> { 37 int putClass(S symbol); 38 39 int putInlineClass(S symbol); 40 41 int putFieldRef(S owner, CharSequence name, T type); 42 43 int putMethodRef(S owner, CharSequence name, T type, boolean isInterface); 44 45 int putUtf8(CharSequence s); 46 47 int putInt(int i); 48 49 int putFloat(float f); 50 51 int putLong(long l); 52 53 int putDouble(double d); 54 55 int putString(String s); 56 57 int putType(T t); 58 59 int putMethodType(T t); 60 61 int putHandle(int refKind, S owner, CharSequence name, T type); 62 63 int putHandle(int refKind, S owner, CharSequence name, T type, boolean isInterface); 64 65 int putInvokeDynamic(CharSequence invokedName, T invokedType, S bsmClass, CharSequence bsmName, T bsmType, Consumer<StaticArgListBuilder<S, T, E>> staticArgs); 66 67 int putDynamicConstant(CharSequence constName, T constType, S bsmClass, CharSequence bsmName, T bsmType, Consumer<StaticArgListBuilder<S, T, E>> staticArgs); 68 69 int size(); 70 71 E entries(); 72 73 interface StaticArgListBuilder<S, T, E> { 74 StaticArgListBuilder<S, T, E> add(int i); 75 StaticArgListBuilder<S, T, E> add(float f); 76 StaticArgListBuilder<S, T, E> add(long l); 77 StaticArgListBuilder<S, T, E> add(double d); 78 StaticArgListBuilder<S, T, E> add(String s); 79 StaticArgListBuilder<S, T, E> add(int refKind, S owner, CharSequence name, T type); 80 <Z> StaticArgListBuilder<S, T, E> add(Z z, ToIntBiFunction<PoolHelper<S, T, E>, Z> poolFunc); 81 StaticArgListBuilder<S, T, E> add(CharSequence constName, T constType, S bsmClass, CharSequence bsmName, T bsmType, Consumer<StaticArgListBuilder<S, T, E>> staticArgList); 82 } 83 }