private void fieldToJava(ClassWrapper wrapper, StructClass cl, StructField fd, TextBuffer buffer, int indent, BytecodeMappingTracer tracer) { int start = buffer.length(); boolean isInterface = cl.hasModifier(CodeConstants.ACC_INTERFACE); boolean isDeprecated = fd.hasAttribute(StructGeneralAttribute.ATTRIBUTE_DEPRECATED); boolean isEnum = fd.hasModifier(CodeConstants.ACC_ENUM) && DecompilerContext.getOption(IFernflowerPreferences.DECOMPILE_ENUM); String oldName = interceptor.getOldName(cl.qualifiedName + " " + fd.getName() + " " + fd.getDescriptor()); appendRenameComment(buffer, oldName, MType.FIELD, indent); if (fd.isSynthetic()) { appendComment(buffer, "synthetic field", indent); appendModifiers(buffer, fd.getAccessFlags(), FIELD_ALLOWED, isInterface, FIELD_EXCLUDED); VarType fieldType = new VarType(fd.getDescriptor(), false); StructGenericSignatureAttribute attr = fd.getAttribute(StructGeneralAttribute.ATTRIBUTE_SIGNATURE); if (attr != null) { descriptor = GenericMain.parseFieldSignature(attr.getSignature()); buffer.append(fd.getName()); if (fd.hasModifier(CodeConstants.ACC_STATIC)) { initializer = wrapper.getStaticFieldInitializers().getWithKey(InterpreterUtil.makeUniqueKey(fd.getName(), fd.getDescriptor())); initializer = wrapper.getDynamicFieldInitializers().getWithKey(InterpreterUtil.makeUniqueKey(fd.getName(), fd.getDescriptor())); else if (fd.hasModifier(CodeConstants.ACC_FINAL) && fd.hasModifier(CodeConstants.ACC_STATIC)) { StructConstantValueAttribute attr = fd.getAttribute(StructGeneralAttribute.ATTRIBUTE_CONSTANT_VALUE); if (attr != null) {
public StructField(DataInputFullStream in, StructClass clStruct) throws IOException { accessFlags = in.readUnsignedShort(); int nameIndex = in.readUnsignedShort(); int descriptorIndex = in.readUnsignedShort(); ConstantPool pool = clStruct.getPool(); String[] values = pool.getClassElement(ConstantPool.FIELD, clStruct.qualifiedName, nameIndex, descriptorIndex); name = values[0]; descriptor = values[1]; attributes = readAttributes(in, pool); }
private static boolean possiblySyntheticField(StructField fd) { return fd.getName().contains("$") && fd.hasModifier(CodeConstants.ACC_FINAL) && fd.hasModifier(CodeConstants.ACC_PRIVATE); }
public static void buildAssertions(ClassNode node) { ClassWrapper wrapper = node.getWrapper(); StructField field = findAssertionField(node); if (field != null) { String key = InterpreterUtil.makeUniqueKey(field.getName(), field.getDescriptor()); boolean res = false; for (MethodWrapper meth : wrapper.getMethods()) { RootStatement root = meth.root; if (root != null) { res |= replaceAssertions(root, wrapper.getClassStruct().qualifiedName, key); } } if (res) { // hide the helper field wrapper.getHiddenMembers().add(key); } } }
String descriptor = fd.getDescriptor(); if (fd.isSynthetic() && descriptor.equals("[L" + cl.qualifiedName + ";")) { wrapper.getHiddenMembers().add(InterpreterUtil.makeUniqueKey(fd.getName(), descriptor));
String keyField = InterpreterUtil.makeUniqueKey(fd.getName(), fd.getDescriptor()); if (fd.hasModifier(CodeConstants.ACC_STATIC) && fd.hasModifier(CodeConstants.ACC_FINAL) && (noSynthFlag || fd.isSynthetic())) { FieldDescriptor fdescr = FieldDescriptor.parseDescriptor(fd.getDescriptor()); if (VarType.VARTYPE_BOOLEAN.equals(fdescr.type)) {
fields = new VBStyleCollection<>(length); for (int i = 0; i < length; i++) { StructField field = new StructField(in, this); fields.addWithKey(field, InterpreterUtil.makeUniqueKey(field.getName(), field.getDescriptor()));
StructField fd = node.classStruct.getField(field.getName(), field.getDescriptor().descriptorString); if (fd != null) { if (field.isStatic() && fd.hasModifier(CodeConstants.ACC_FINAL)) { fieldInClassInit = true; if (node.getWrapper() != null && node.getWrapper().getHiddenMembers().contains(InterpreterUtil.makeUniqueKey(fd.getName(), fd.getDescriptor()))) { hiddenField = true;
setFieldNames.add(f.getName());
fd.hasModifier(CodeConstants.ACC_FINAL) && (fd.isSynthetic() || (noSynthFlag && fd.hasModifier(CodeConstants.ACC_PRIVATE)))) {
if (fExpr.getClassname().equals(wrapper.getClassStruct().qualifiedName)) { StructField structField = wrapper.getClassStruct().getField(fExpr.getName(), fExpr.getDescriptor().descriptorString); if (structField != null && structField.hasModifier(CodeConstants.ACC_FINAL)) { action = 1;
if (fd != null && cl.qualifiedName.equals(left.getClassname()) && (fd.isSynthetic() || noSynthFlag && possiblySyntheticField(fd))) {
if (fd != null && fd.hasModifier(CodeConstants.ACC_STATIC) && (fd.isSynthetic() || DecompilerContext.getOption(IFernflowerPreferences.SYNTHETIC_NOT_SET))) { .add(InterpreterUtil.makeUniqueKey(fd.getName(), fd.getDescriptor())); // hide synthetic field return ((ConstExprent)invexpr.getLstParameters().get(0)).getValue().toString();
setFieldNames.add(fd.getName()); if (helper.toBeRenamed(IIdentifierRenamer.Type.ELEMENT_FIELD, classOldFullName, fd.getName(), fd.getDescriptor())) { String newName; do { newName = helper.getNextFieldName(classOldFullName, fd.getName(), fd.getDescriptor()); interceptor.addName(classOldFullName + " " + fd.getName() + " " + fd.getDescriptor(), classNewFullName + " " + newName + " " + buildNewDescriptor(true, fd.getDescriptor()));
fields = new VBStyleCollection<>(length); for (int i = 0; i < length; i++) { StructField field = new StructField(in, this); fields.addWithKey(field, InterpreterUtil.makeUniqueKey(field.getName(), field.getDescriptor()));
String descriptor = fd.getDescriptor(); if (fd.isSynthetic() && descriptor.equals("[L" + cl.qualifiedName + ";")) { wrapper.getHiddenMembers().add(InterpreterUtil.makeUniqueKey(fd.getName(), descriptor));
StructField fd = node.classStruct.getField(field.getName(), field.getDescriptor().descriptorString); if (fd != null) { if (field.isStatic() && fd.hasModifier(CodeConstants.ACC_FINAL)) { fieldInClassInit = true; if (node.getWrapper() != null && node.getWrapper().getHiddenMembers().contains(InterpreterUtil.makeUniqueKey(fd.getName(), fd.getDescriptor()))) { hiddenField = true;
classStruct.getFields().forEach(f -> namesCollector.addName(f.getName())); varProc.refreshVarNames(namesCollector);
if (fExpr.getClassname().equals(wrapper.getClassStruct().qualifiedName)) { StructField structField = wrapper.getClassStruct().getField(fExpr.getName(), fExpr.getDescriptor().descriptorString); if (structField != null && structField.hasModifier(CodeConstants.ACC_FINAL)) { action = 1;
private void fieldToJava(ClassWrapper wrapper, StructClass cl, StructField fd, TextBuffer buffer, int indent, BytecodeMappingTracer tracer) { int start = buffer.length(); boolean isInterface = cl.hasModifier(CodeConstants.ACC_INTERFACE); boolean isDeprecated = fd.hasAttribute("Deprecated"); boolean isEnum = fd.hasModifier(CodeConstants.ACC_ENUM) && DecompilerContext.getOption(IFernflowerPreferences.DECOMPILE_ENUM); String oldName = interceptor.getOldName(cl.qualifiedName + " " + fd.getName() + " " + fd.getDescriptor()); appendRenameComment(buffer, oldName, MType.FIELD, indent); if (fd.isSynthetic()) { appendComment(buffer, "synthetic field", indent); appendModifiers(buffer, fd.getAccessFlags(), FIELD_ALLOWED, isInterface, FIELD_EXCLUDED); VarType fieldType = new VarType(fd.getDescriptor(), false); StructGenericSignatureAttribute attr = (StructGenericSignatureAttribute)fd.getAttribute("Signature"); if (attr != null) { descriptor = GenericMain.parseFieldSignature(attr.getSignature()); buffer.append(fd.getName()); if (fd.hasModifier(CodeConstants.ACC_STATIC)) { initializer = wrapper.getStaticFieldInitializers().getWithKey(InterpreterUtil.makeUniqueKey(fd.getName(), fd.getDescriptor())); initializer = wrapper.getDynamicFieldInitializers().getWithKey(InterpreterUtil.makeUniqueKey(fd.getName(), fd.getDescriptor())); else if (fd.hasModifier(CodeConstants.ACC_FINAL) && fd.hasModifier(CodeConstants.ACC_STATIC)) { StructConstantValueAttribute attr = (StructConstantValueAttribute)fd.getAttribute(StructGeneralAttribute.ATTRIBUTE_CONSTANT_VALUE);