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()); }
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()); }
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(); } }
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(); } }