Exemple #1
0
        protected static void AssertXmlDeclaration(string classResource, string xmlResource, string documentationPath = null, JavaDocletType?javaDocletType = null)
        {
            var classPathBuilder = new ClassPath()
            {
                ApiSource          = "class-parse",
                DocumentationPaths = new string[] {
                    documentationPath,
                },
            };

            if (javaDocletType.HasValue)
            {
                classPathBuilder.DocletType = javaDocletType.Value;
            }
            classPathBuilder.Add(LoadClassFile(classResource));

            var actual = new StringWriter();

            classPathBuilder.ApiSource = "class-parse";
            if (javaDocletType.HasValue)
            {
                classPathBuilder.DocletType = javaDocletType.Value;
            }
            classPathBuilder.SaveXmlDescription(actual);

            var expected = LoadString(xmlResource);

            Assert.AreEqual(expected, actual.ToString());
        }
Exemple #2
0
        protected static void AssertXmlDeclaration(string[] classResources, string xmlResource, string documentationPath = null)
        {
            var classPathBuilder = new ClassPath()
            {
                ApiSource          = "class-parse",
                DocumentationPaths = new string[] {
                    documentationPath,
                },
                AutoRename = true
            };

            foreach (var classFile in classResources.Select(s => LoadClassFile(s)))
            {
                classPathBuilder.Add(classFile);
            }

            var actual = new StringWriter();

            classPathBuilder.SaveXmlDescription(actual);

            var expected = LoadString(xmlResource);

            Assert.AreEqual(expected, actual.ToString());
        }
Exemple #3
0
        public static void Main(string[] args)
        {
            bool   dump       = false;
            bool   help       = false;
            bool   docsType   = false;
            int    verbosity  = 0;
            bool   autorename = false;
            bool   no_streams = false;
            var    outputFile = (string)null;
            string platform   = null;
            var    docsPaths  = new List <string> ();
            var    p          = new OptionSet()
            {
                "usage: class-dump [-dump] FILES",
                "",
                "View the metadata contents of a Java .class or .jar file.",
                "",
                "Options:",
                { "dump",
                  "Dump out .class metadata, including constant pool.\nDefault is XML output.",
                  v => dump = v != null },
                { "o=",
                  "Write output to {PATH}.",
                  v => outputFile = v },
                { "docspath=",
                  "Documentation {PATH} for parameter fixup",
                  doc => docsPaths.Add(doc) },
                { "parameter-names=",
                  "{PATH} for Java method parameter name information",
                  doc => docsPaths.Add(doc) },
                { "docstype=",
                  "OBSOLETE: Previously used to specify a doc type (now auto detected).",
                  t => docsType = t != null },
                { "v|verbose:",
                  "See stack traces on error.",
                  (int?v) => verbosity = v.HasValue ? v.Value : verbosity + 1 },
                { "autorename",
                  "Renames parameter names in the interfaces by derived classes.",
                  v => autorename = v != null },
                { "ignore-stream-api",
                  "Ignore all apis from stream api.",
                  v => no_streams = v != null },
                { "platform=",
                  "(Internal use only) specify Android framework platform ID",
                  v => platform = v },
                { "h|?|help",
                  "Show this message and exit.",
                  v => help = v != null },
            };
            var files = p.Parse(args);

            if (help)
            {
                p.WriteOptionDescriptions(Console.Out);
                return;
            }
            if (docsType)
            {
                Console.WriteLine("class-parse: --docstype is obsolete and no longer a valid option.");
            }
            var output = outputFile == null
                                ? Console.Out
                                : (TextWriter) new StreamWriter(outputFile, append: false, encoding: new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));

            Log.OnLog = (t, v, m, a) => {
                Console.Error.WriteLine(m, a);
            };
            var classPath = new ClassPath()
            {
                ApiSource = "class-parse",
                AndroidFrameworkPlatform = platform,
                DocumentationPaths       = docsPaths.Count == 0 ? null : docsPaths,
                AutoRename = autorename
            };

            foreach (var file in files)
            {
                try {
                    if (dump)
                    {
                        DumpClassFile(file, output);
                        continue;
                    }
                    DumpFileToXml(classPath, file);
                } catch (Exception e) {
                    Console.Error.WriteLine("class-parse: Unable to read file '{0}': {1}",
                                            file, verbosity == 0 ? e.Message : e.ToString());
                    Environment.ExitCode = 1;
                }
            }

            if (no_streams)
            {
                bool IsStreamApi(TypeInfo m)
                {
                    return(m.BinaryName.StartsWith("Ljava/util/stream/") ||
                           m.BinaryName.StartsWith("Ljava/util/function/"));
                }

                foreach (var klass in classPath.GetPackages().Values.SelectMany(a => a))
                {
                    var streamApis = klass.Methods.Where(m
                                                         => IsStreamApi(m.ReturnType) ||
                                                         m.GetParameters().Any(a => IsStreamApi(a.Type))).ToList();
                    foreach (var item in streamApis)
                    {
                        klass.Methods.Remove(item);
                    }
                }
            }

            if (!dump)
            {
                classPath.SaveXmlDescription(output);
            }
            if (outputFile != null)
            {
                output.Close();
            }
        }
Exemple #4
0
        public static void Main(string[] args)
        {
            JavaDocletType docsType = 0;

            bool dump       = false;
            bool help       = false;
            int  verbosity  = 0;
            bool autorename = false;
            var  outputFile = (string)null;
            var  docsPaths  = new List <string> ();
            var  p          = new OptionSet()
            {
                "usage: class-dump [-dump] FILES",
                "",
                "View the metadata contents of a Java .class or .jar file.",
                "",
                "Options:",
                { "dump",
                  "Dump out .class metadata, including constant pool.\nDefault is XML output.",
                  v => dump = v != null },
                { "o=",
                  "Write output to {PATH}.",
                  v => outputFile = v },
                { "docspath=",
                  "Documentation {PATH} for parameter fixup",
                  doc => docsPaths.Add(doc) },
                { "docstype=",
                  "{TYPE} of the docs within --docspath. Values:\n  " +
                  string.Join("\n  ", JavaDocletTypeMapping.Keys.OrderBy(s => s)),
                  t => docsType = GetJavaDocletType(t) },
                { "v|verbose:",
                  "See stack traces on error.",
                  (int?v) => verbosity = v.HasValue ? v.Value : verbosity + 1 },
                { "autorename",
                  "Renames parameter names in the interfaces by derived classes.",
                  v => autorename = v != null },
                { "h|?|help",
                  "Show this message and exit.",
                  v => help = v != null },
            };
            var files = p.Parse(args);

            if (help)
            {
                p.WriteOptionDescriptions(Console.Out);
                return;
            }
            var output = outputFile == null
                                ? Console.Out
                                : (TextWriter) new StreamWriter(outputFile, append: false, encoding: new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));

            Log.OnLog = (t, v, m, a) => {
                Console.Error.WriteLine(m, a);
            };
            var classPath = new ClassPath()
            {
                ApiSource          = "class-parse",
                DocumentationPaths = docsPaths.Count == 0 ? null : docsPaths,
                DocletType         = docsType,
                AutoRename         = autorename
            };

            foreach (var file in files)
            {
                try {
                    if (dump)
                    {
                        DumpClassFile(file, output);
                        continue;
                    }
                    DumpFileToXml(classPath, file);
                } catch (Exception e) {
                    Console.Error.WriteLine("class-parse: Unable to read file '{0}': {1}",
                                            file, verbosity == 0 ? e.Message : e.ToString());
                    Environment.ExitCode = 1;
                }
            }
            if (!dump)
            {
                classPath.SaveXmlDescription(output);
            }
            if (outputFile != null)
            {
                output.Close();
            }
        }