void WriteOutFields(TextWriter output, Class dexClass, ClassDisplayOptions options, Indentation indent, bool renderAnnotations = true) { if ((options & ClassDisplayOptions.Fields) != 0 && dexClass.HasFields()) { output.WriteLine(); int i = 0; foreach (var field in dexClass.GetFields()) { // Field modifiers, type and name if (i < dexClass.StaticFieldsValues.Length) { output.WriteLine(string.Format(".FIELD {0} {1} {2} = {3}", _helper.AccessFlagsToString(field.AccessFlags), _dex.GetTypeName(field.TypeIndex), field.Name, _helper.EncodedValueToString(dexClass.StaticFieldsValues[i], dexClass))); } else { output.WriteLine(string.Format(".FIELD {0} {1} {2}", _helper.AccessFlagsToString(field.AccessFlags), _dex.GetTypeName(field.TypeIndex), field.Name)); } // Field Annotations if (renderAnnotations) { indent++; foreach (var annotation in field.Annotations) { WriteOutAnnotation(output, annotation.Values, dexClass, indent); } indent--; } i++; } } }
void WriteOutClassDefinition(TextWriter output, Class dexClass, ClassDisplayOptions options) { if ((options & ClassDisplayOptions.ClassAnnotations) != 0) { var indent = new Indentation(); foreach (var annotation in dexClass.Annotations) { AnnotationToString(output, annotation.Values, dexClass, indent); } } if ((options & ClassDisplayOptions.ClassDetails) != 0) { output.Write(_helper.AccessAndType(dexClass)); } if ((options & ClassDisplayOptions.ClassName) != 0) { output.Write(_dex.GetTypeName(dexClass.ClassIndex)); } if ((options & ClassDisplayOptions.ClassDetails) != 0) { if (dexClass.SuperClassIndex != Class.NO_INDEX) { output.Write(" extends "); output.Write(_dex.GetTypeName(dexClass.SuperClassIndex)); } if (dexClass.ImplementsInterfaces()) { output.Write(" implements"); var ifaces = new List <string> (); foreach (var iface in dexClass.ImplementedInterfaces()) { ifaces.Add(_dex.GetTypeName(iface)); } output.Write(string.Join(", ", ifaces)); } } }
public void WriteOutClass(Class dexClass, ClassDisplayOptions options, TextWriter output) { WriteOutClassDefinition(output, dexClass, options); // Display fields var indent = new Indentation(1); if ((options & ClassDisplayOptions.Fields) != 0) { WriteOutFields(output, dexClass, options, indent); } if ((options & ClassDisplayOptions.Methods) != 0 && dexClass.HasMethods()) { foreach (var method in dexClass.GetMethods()) { WriteOutMethod(dexClass, method, output, indent, (options & ClassDisplayOptions.OpCodes) != 0); output.WriteLine(); } } }
void WriteOutClassDefinition(TextWriter output, Class dexClass, ClassDisplayOptions options) { output.WriteLine(string.Format(".TYPE {0}", _dex.GetTypeName(dexClass.ClassIndex))); if ((options & ClassDisplayOptions.ClassDetails) != 0) { output.WriteLine(string.Format(".MODIFIERS {0}", _helper.AccessAndType(dexClass))); } if ((options & ClassDisplayOptions.ClassDetails) != 0) { if (dexClass.SuperClassIndex != Class.NO_INDEX) { output.WriteLine(string.Format(".SUPER {0}", _dex.GetTypeName(dexClass.SuperClassIndex))); } if (dexClass.ImplementsInterfaces()) { output.Write(".INTERFACES"); foreach (var iface in dexClass.ImplementedInterfaces()) { output.Write(" "); output.Write(_dex.GetTypeName(iface)); } output.WriteLine(); } } if ((options & ClassDisplayOptions.ClassAnnotations) != 0) { foreach (var annotation in dexClass.Annotations) { WriteOutAnnotation(output, annotation.Values, dexClass, new Indentation()); } } }