Exemplo n.º 1
0
        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++;
                }
            }
        }
Exemplo n.º 2
0
        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));
                }
            }
        }
Exemplo n.º 3
0
        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();
                }
            }
        }
Exemplo n.º 4
0
        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());
                }
            }
        }