TestCases(String src, BSMSpecifier bsmSpecifier) { this.srcCode = src; // By default, all test cases will have bootstrap method specifier as Lambda.MetaFactory // For serializable lambda test cases, bootstrap method specifier changed to altMetaFactory this.bsmSpecifier = bsmSpecifier;
}
staticclass ConstantPoolVisitor implements ConstantPool.Visitor<String, Integer> { final List<String> slist; final ClassFile cf; final ConstantPool cfpool; final Map<Integer, String> bsmMap;
public ConstantPoolVisitor(ClassFile cf, int size) {
slist = new ArrayList<>(size); for (int i = 0 ; i < size; i++) {
slist.add(null);
} this.cf = cf; this.cfpool = cf.constant_pool;
bsmMap = readBSM();
}
public Map<Integer, String> getBSMMap() { return Collections.unmodifiableMap(bsmMap);
}
public String visit(CPInfo c, int index) { return c.accept(this, index);
}
private Map<Integer, String> readBSM() {
BootstrapMethods_attribute bsmAttr =
(BootstrapMethods_attribute) cf.getAttribute(Attribute.BootstrapMethods); if (bsmAttr != null) {
Map<Integer, String> out = new HashMap<>(bsmAttr.bootstrap_method_specifiers.length); for (BootstrapMethods_attribute.BootstrapMethodSpecifier bsms :
bsmAttr.bootstrap_method_specifiers) { int index = bsms.bootstrap_method_ref; try {
String value = slist.get(index); if (value == null) {
value = visit(cfpool.get(index), index);
debugln("[SG]: index " + index);
debugln("[SG]: value " + value);
slist.set(index, value);
out.put(index, value);
} for (int idx : bsms.bootstrap_arguments) {
value = slist.get(idx); if (value == null) {
value = visit(cfpool.get(idx), idx);
debugln("[SG]: idx " + idx);
debugln("[SG]: value " + value);
slist.set(idx, value);
out.put(idx, value);
}
}
} catch (InvalidIndex ex) {
ex.printStackTrace();
}
} return out;
} returnnew HashMap<>(0);
}
@Override public String visitClass(CONSTANT_Class_info c, Integer p) {
String value = slist.get(p); if (value == null) { try {
value = visit(cfpool.get(c.name_index), c.name_index);
slist.set(p, value);
} catch (ConstantPoolException ex) {
ex.printStackTrace();
}
} return value;
}
@Override public String visitDouble(CONSTANT_Double_info c, Integer p) {
String value = slist.get(p); if (value == null) {
value = Double.toString(c.value);
slist.set(p, value);
} return value;
}
@Override public String visitFieldref(CONSTANT_Fieldref_info c, Integer p) {
String value = slist.get(p); if (value == null) { try {
value = visit(cfpool.get(c.class_index), c.class_index);
value = value.concat(" " + visit(cfpool.get(c.name_and_type_index),
c.name_and_type_index));
slist.set(p, value);
} catch (ConstantPoolException ex) {
ex.printStackTrace();
}
} return value;
}
@Override public String visitFloat(CONSTANT_Float_info c, Integer p) {
String value = slist.get(p); if (value == null) {
value = Float.toString(c.value);
slist.set(p, value);
} return value;
}
@Override public String visitInteger(CONSTANT_Integer_info cnstnt, Integer p) {
String value = slist.get(p); if (value == null) {
value = Integer.toString(cnstnt.value);
slist.set(p, value);
} return value;
}
@Override public String visitInterfaceMethodref(CONSTANT_InterfaceMethodref_info c,
Integer p) {
String value = slist.get(p); if (value == null) { try {
value = visit(cfpool.get(c.class_index), c.class_index);
value = value.concat(" " +
visit(cfpool.get(c.name_and_type_index),
c.name_and_type_index));
slist.set(p, value);
} catch (ConstantPoolException ex) {
ex.printStackTrace();
}
} return value;
}
@Override public String visitInvokeDynamic(CONSTANT_InvokeDynamic_info c, Integer p) {
@Override public String visitLong(CONSTANT_Long_info c, Integer p) {
String value = slist.get(p); if (value == null) {
value = Long.toString(c.value);
slist.set(p, value);
} return value;
}
@Override public String visitNameAndType(CONSTANT_NameAndType_info c, Integer p) {
String value = slist.get(p); if (value == null) { try {
value = visit(cfpool.get(c.name_index), c.name_index);
value = value.concat(" " +
visit(cfpool.get(c.type_index), c.type_index));
slist.set(p, value);
} catch (InvalidIndex ex) {
ex.printStackTrace();
}
} return value;
}
@Override public String visitMethodref(CONSTANT_Methodref_info c, Integer p) {
String value = slist.get(p); if (value == null) { try {
value = visit(cfpool.get(c.class_index), c.class_index);
value = value.concat(" " +
visit(cfpool.get(c.name_and_type_index),
c.name_and_type_index));
slist.set(p, value);
} catch (ConstantPoolException ex) {
ex.printStackTrace();
}
} return value;
}
@Override public String visitMethodHandle(CONSTANT_MethodHandle_info c, Integer p) {
String value = slist.get(p); if (value == null) { try {
value = c.reference_kind.name();
value = value.concat(" "
+ visit(cfpool.get(c.reference_index), c.reference_index));
slist.set(p, value);
} catch (ConstantPoolException ex) {
ex.printStackTrace();
}
} return value;
}
@Override public String visitMethodType(CONSTANT_MethodType_info c, Integer p) {
String value = slist.get(p); if (value == null) { try {
value = visit(cfpool.get(c.descriptor_index), c.descriptor_index);
slist.set(p, value);
} catch (ConstantPoolException ex) {
ex.printStackTrace();
}
} return value;
}
@Override public String visitModule(CONSTANT_Module_info c, Integer p) {
String value = slist.get(p); if (value == null) { try {
value = visit(cfpool.get(c.name_index), c.name_index);
slist.set(p, value);
} catch (ConstantPoolException ex) {
ex.printStackTrace();
}
} return value;
}
@Override public String visitPackage(CONSTANT_Package_info c, Integer p) {
String value = slist.get(p); if (value == null) { try {
value = visit(cfpool.get(c.name_index), c.name_index);
slist.set(p, value);
} catch (ConstantPoolException ex) {
ex.printStackTrace();
}
} return value;
}
@Override public String visitString(CONSTANT_String_info c, Integer p) {
try {
String value = slist.get(p); if (value == null) {
value = c.getString();
slist.set(p, value);
} return value;
} catch (ConstantPoolException ex) { thrownew RuntimeException("Fatal error", ex);
}
}
@Override public String visitUtf8(CONSTANT_Utf8_info cnstnt, Integer p) {
String value = slist.get(p); if (value == null) {
value = cnstnt.value;
slist.set(p, value);
} return value;
}
}
}
Messung V0.5 in Prozent
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.17Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-06-10)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.