diff --git a/build-tools/automation/azure-pipelines.yaml b/build-tools/automation/azure-pipelines.yaml
index ccbe7dbe7..f57f77556 100644
--- a/build-tools/automation/azure-pipelines.yaml
+++ b/build-tools/automation/azure-pipelines.yaml
@@ -97,7 +97,7 @@ jobs:
- script: |
r=0
make run-all-tests CONFIGURATION=$(Build.Configuration) || r=$?
- jar cf xatb.jar -C src/Xamarin.Android.Tools.Bytecode/Tests/obj/*/classes .
+ jar cf xatb.jar -C tests/Xamarin.Android.Tools.Bytecode-Tests/obj/*/classes .
zip -r bin.zip bin
exit $r
displayName: Run Tests
diff --git a/samples/Hello/Hello.csproj b/samples/Hello/Hello.csproj
index d1f23a305..6c3466b8c 100644
--- a/samples/Hello/Hello.csproj
+++ b/samples/Hello/Hello.csproj
@@ -1,52 +1,16 @@
-
-
+
+
- Debug
- AnyCPU
- 8.0.30703
- 2.0
- {F3ECB73D-9263-4E42-A5B4-3FC0D1D829F9}
+ net472
Exe
- Hello
- Hello
- v4.6.1
-
-
- true
- full
- false
- ..\..\bin\TestDebug
- DEBUG;
- prompt
- 4
- true
- true
-
-
- full
- true
- ..\..\bin\TestRelease
- prompt
- 4
- true
+ ..\..\bin\Test$(Configuration)
+ false
true
+
-
-
-
-
-
-
-
-
-
- {94BD81F7-B06F-4295-9636-F8A3B6BDC762}
- Java.Interop
-
-
- {5887B410-D448-4257-A46B-EAC03C80BE93}
- Java.Runtime.Environment
-
+
+
-
\ No newline at end of file
+
+
diff --git a/samples/Hello/Properties/AssemblyInfo.cs b/samples/Hello/Properties/AssemblyInfo.cs
deleted file mode 100644
index 96e0e8f12..000000000
--- a/samples/Hello/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-// Information about this assembly is defined by the following attributes.
-// Change them to the values specific to your project.
-[assembly: AssemblyTitle ("Hello")]
-[assembly: AssemblyDescription ("")]
-[assembly: AssemblyConfiguration ("")]
-[assembly: AssemblyCompany ("")]
-[assembly: AssemblyProduct ("")]
-[assembly: AssemblyCopyright ("jon")]
-[assembly: AssemblyTrademark ("")]
-[assembly: AssemblyCulture ("")]
-// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
-// The form "{Major}.{Minor}.*" will automatically update the build and revision,
-// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-[assembly: AssemblyVersion ("1.0.*")]
-// The following attributes are used to specify the signing key for the assembly,
-// if desired. See the Mono documentation for more information about signing.
-//[assembly: AssemblyDelaySign(false)]
-//[assembly: AssemblyKeyFile("")]
-
diff --git a/src/Java.Interop.Dynamic/Java.Interop.Dynamic.csproj b/src/Java.Interop.Dynamic/Java.Interop.Dynamic.csproj
index f0c557f43..2cf775231 100644
--- a/src/Java.Interop.Dynamic/Java.Interop.Dynamic.csproj
+++ b/src/Java.Interop.Dynamic/Java.Interop.Dynamic.csproj
@@ -10,6 +10,7 @@
Microsoft Corporation
Microsoft Corporation
0.1.0.0
+ false
..\..\bin\Debug
diff --git a/src/Java.Interop.Export/Java.Interop.Export.csproj b/src/Java.Interop.Export/Java.Interop.Export.csproj
index c60f6387e..f2fe47325 100644
--- a/src/Java.Interop.Export/Java.Interop.Export.csproj
+++ b/src/Java.Interop.Export/Java.Interop.Export.csproj
@@ -9,6 +9,7 @@
Microsoft Corporation
Microsoft Corporation
0.1.0.0
+ false
..\..\bin\Debug
diff --git a/src/Java.Interop.GenericMarshaler/Java.Interop.GenericMarshaler.csproj b/src/Java.Interop.GenericMarshaler/Java.Interop.GenericMarshaler.csproj
index 138b6ec0c..75c52e2f9 100644
--- a/src/Java.Interop.GenericMarshaler/Java.Interop.GenericMarshaler.csproj
+++ b/src/Java.Interop.GenericMarshaler/Java.Interop.GenericMarshaler.csproj
@@ -10,6 +10,7 @@
Microsoft Corporation
Microsoft Corporation
0.1.0.0
+ false
..\..\bin\Debug
diff --git a/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil.csproj b/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil.csproj
index 0b6132ab8..9f7b71bef 100644
--- a/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil.csproj
+++ b/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil.csproj
@@ -2,6 +2,7 @@
netstandard2.0
+ false
diff --git a/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers.csproj b/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers.csproj
index 54105d9e4..2db2da771 100644
--- a/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers.csproj
+++ b/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers.csproj
@@ -2,6 +2,7 @@
netstandard2.0
+ false
diff --git a/src/Java.Interop/Java.Interop.csproj b/src/Java.Interop/Java.Interop.csproj
index 625c8a782..211f11c8e 100644
--- a/src/Java.Interop/Java.Interop.csproj
+++ b/src/Java.Interop/Java.Interop.csproj
@@ -8,6 +8,7 @@
INTEROP;FEATURE_JNIENVIRONMENT_JI_PINVOKES;FEATURE_JNIOBJECTREFERENCE_INTPTRS;INTERNAL_NULLABLE_ATTRIBUTES
true
false
+ false
..\..\bin\Debug
diff --git a/src/Xamarin.Android.Tools.AnnotationSupport.Cecil/Xamarin.Android.Tools.AnnotationSupport.Cecil.csproj b/src/Xamarin.Android.Tools.AnnotationSupport.Cecil/Xamarin.Android.Tools.AnnotationSupport.Cecil.csproj
index 8527c2bc8..12d7e7090 100644
--- a/src/Xamarin.Android.Tools.AnnotationSupport.Cecil/Xamarin.Android.Tools.AnnotationSupport.Cecil.csproj
+++ b/src/Xamarin.Android.Tools.AnnotationSupport.Cecil/Xamarin.Android.Tools.AnnotationSupport.Cecil.csproj
@@ -2,6 +2,7 @@
netstandard2.0
+ false
diff --git a/src/Xamarin.Android.Tools.AnnotationSupport/Xamarin.Android.Tools.AnnotationSupport.csproj b/src/Xamarin.Android.Tools.AnnotationSupport/Xamarin.Android.Tools.AnnotationSupport.csproj
index 1ff8b445e..a4b4d8666 100644
--- a/src/Xamarin.Android.Tools.AnnotationSupport/Xamarin.Android.Tools.AnnotationSupport.csproj
+++ b/src/Xamarin.Android.Tools.AnnotationSupport/Xamarin.Android.Tools.AnnotationSupport.csproj
@@ -2,6 +2,7 @@
netstandard2.0
+ false
diff --git a/src/Xamarin.Android.Tools.Bytecode/Xamarin.Android.Tools.Bytecode.csproj b/src/Xamarin.Android.Tools.Bytecode/Xamarin.Android.Tools.Bytecode.csproj
index b521d79b5..0a371d797 100644
--- a/src/Xamarin.Android.Tools.Bytecode/Xamarin.Android.Tools.Bytecode.csproj
+++ b/src/Xamarin.Android.Tools.Bytecode/Xamarin.Android.Tools.Bytecode.csproj
@@ -2,6 +2,7 @@
netstandard2.0
+ false
diff --git a/src/java-interop/java-interop.csproj b/src/java-interop/java-interop.csproj
index 4f572aed6..aba7da7e0 100644
--- a/src/java-interop/java-interop.csproj
+++ b/src/java-interop/java-interop.csproj
@@ -26,7 +26,7 @@
JI_DLL_EXPORT MONODEVELOP MONO_DLL_EXPORT
.
-
+
diff --git a/tests/Java.Interop-PerformanceTests/Java.Interop-PerformanceTests.csproj b/tests/Java.Interop-PerformanceTests/Java.Interop-PerformanceTests.csproj
index 820ca6bc5..e5361843f 100644
--- a/tests/Java.Interop-PerformanceTests/Java.Interop-PerformanceTests.csproj
+++ b/tests/Java.Interop-PerformanceTests/Java.Interop-PerformanceTests.csproj
@@ -29,7 +29,7 @@
-
+
diff --git a/tests/Java.Interop-Tests/Java.Interop-Tests.csproj b/tests/Java.Interop-Tests/Java.Interop-Tests.csproj
index 321619116..5d896a9c5 100644
--- a/tests/Java.Interop-Tests/Java.Interop-Tests.csproj
+++ b/tests/Java.Interop-Tests/Java.Interop-Tests.csproj
@@ -34,7 +34,7 @@
-
+
diff --git a/tests/Java.Interop.Export-Tests/Java.Interop.Export-Tests.csproj b/tests/Java.Interop.Export-Tests/Java.Interop.Export-Tests.csproj
index 873b6c703..7abbf808d 100644
--- a/tests/Java.Interop.Export-Tests/Java.Interop.Export-Tests.csproj
+++ b/tests/Java.Interop.Export-Tests/Java.Interop.Export-Tests.csproj
@@ -30,7 +30,7 @@
-
+
diff --git a/tools/class-parse/Mono.Options-PCL.cs b/tools/class-parse/Mono.Options-PCL.cs
deleted file mode 100644
index 32e71a265..000000000
--- a/tools/class-parse/Mono.Options-PCL.cs
+++ /dev/null
@@ -1,1414 +0,0 @@
-//
-// Options.cs
-//
-// Authors:
-// Jonathan Pryor
-// Federico Di Gregorio
-// Rolf Bjarne Kvinge
-//
-// Copyright (C) 2008 Novell (http://www.novell.com)
-// Copyright (C) 2009 Federico Di Gregorio.
-// Copyright (C) 2012 Xamarin Inc (http://www.xamarin.com)
-// Copyright (C) 2015 Tobias Schulz (https://github.com/tobiasschulz)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-// Compile With:
-// gmcs -debug+ -r:System.Core Options.cs -o:NDesk.Options.dll
-// gmcs -debug+ -d:LINQ -r:System.Core Options.cs -o:NDesk.Options.dll
-//
-// The LINQ version just changes the implementation of
-// OptionSet.Parse(IEnumerable), and confers no semantic changes.
-
-//
-// A Getopt::Long-inspired option parsing library for C#.
-//
-// NDesk.Options.OptionSet is built upon a key/value table, where the
-// key is a option format string and the value is a delegate that is
-// invoked when the format string is matched.
-//
-// Option format strings:
-// Regex-like BNF Grammar:
-// name: .+
-// type: [=:]
-// sep: ( [^{}]+ | '{' .+ '}' )?
-// aliases: ( name type sep ) ( '|' name type sep )*
-//
-// Each '|'-delimited name is an alias for the associated action. If the
-// format string ends in a '=', it has a required value. If the format
-// string ends in a ':', it has an optional value. If neither '=' or ':'
-// is present, no value is supported. `=' or `:' need only be defined on one
-// alias, but if they are provided on more than one they must be consistent.
-//
-// Each alias portion may also end with a "key/value separator", which is used
-// to split option values if the option accepts > 1 value. If not specified,
-// it defaults to '=' and ':'. If specified, it can be any character except
-// '{' and '}' OR the *string* between '{' and '}'. If no separator should be
-// used (i.e. the separate values should be distinct arguments), then "{}"
-// should be used as the separator.
-//
-// Options are extracted either from the current option by looking for
-// the option name followed by an '=' or ':', or is taken from the
-// following option IFF:
-// - The current option does not contain a '=' or a ':'
-// - The current option requires a value (i.e. not a Option type of ':')
-//
-// The `name' used in the option format string does NOT include any leading
-// option indicator, such as '-', '--', or '/'. All three of these are
-// permitted/required on any named option.
-//
-// Option bundling is permitted so long as:
-// - '-' is used to start the option group
-// - all of the bundled options are a single character
-// - at most one of the bundled options accepts a value, and the value
-// provided starts from the next character to the end of the string.
-//
-// This allows specifying '-a -b -c' as '-abc', and specifying '-D name=value'
-// as '-Dname=value'.
-//
-// Option processing is disabled by specifying "--". All options after "--"
-// are returned by OptionSet.Parse() unchanged and unprocessed.
-//
-// Unprocessed options are returned from OptionSet.Parse().
-//
-// Examples:
-// int verbose = 0;
-// OptionSet p = new OptionSet ()
-// .Add ("v", v => ++verbose)
-// .Add ("name=|value=", v => Console.WriteLine (v));
-// p.Parse (new string[]{"-v", "--v", "/v", "-name=A", "/name", "B", "extra"});
-//
-// The above would parse the argument string array, and would invoke the
-// lambda expression three times, setting `verbose' to 3 when complete.
-// It would also print out "A" and "B" to standard output.
-// The returned array would contain the string "extra".
-//
-// C# 3.0 collection initializers are supported and encouraged:
-// var p = new OptionSet () {
-// { "h|?|help", v => ShowHelp () },
-// };
-//
-// System.ComponentModel.TypeConverter is also supported, allowing the use of
-// custom data types in the callback type; TypeConverter.ConvertFromString()
-// is used to convert the value option to an instance of the specified
-// type:
-//
-// var p = new OptionSet () {
-// { "foo=", (Foo f) => Console.WriteLine (f.ToString ()) },
-// };
-//
-// Random other tidbits:
-// - Boolean options (those w/o '=' or ':' in the option format string)
-// are explicitly enabled if they are followed with '+', and explicitly
-// disabled if they are followed with '-':
-// string a = null;
-// var p = new OptionSet () {
-// { "a", s => a = s },
-// };
-// p.Parse (new string[]{"-a"}); // sets v != null
-// p.Parse (new string[]{"-a+"}); // sets v != null
-// p.Parse (new string[]{"-a-"}); // sets v == null
-//
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.Globalization;
-using System.IO;
-using System.Runtime.Serialization;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Linq;
-using System.Reflection;
-
-namespace Mono.Options
-{
- static class StringCoda
- {
- public static IEnumerable WrappedLines (string self, params int[] widths)
- {
- IEnumerable w = widths;
- return WrappedLines (self, w);
- }
-
- public static IEnumerable WrappedLines (string self, IEnumerable widths)
- {
- if (widths == null)
- throw new ArgumentNullException ("widths");
- return CreateWrappedLinesIterator (self, widths);
- }
-
- private static IEnumerable CreateWrappedLinesIterator (string self, IEnumerable widths)
- {
- if (string.IsNullOrEmpty (self)) {
- yield return string.Empty;
- yield break;
- }
- using (IEnumerator ewidths = widths.GetEnumerator ()) {
- bool? hw = null;
- int width = GetNextWidth (ewidths, int.MaxValue, ref hw);
- int start = 0, end;
- do {
- end = GetLineEnd (start, width, self);
- char c = self [end - 1];
- if (char.IsWhiteSpace (c))
- --end;
- bool needContinuation = end != self.Length && !IsEolChar (c);
- string continuation = "";
- if (needContinuation) {
- --end;
- continuation = "-";
- }
- string line = self.Substring (start, end - start) + continuation;
- yield return line;
- start = end;
- if (char.IsWhiteSpace (c))
- ++start;
- width = GetNextWidth (ewidths, width, ref hw);
- } while (start < self.Length);
- }
- }
-
- private static int GetNextWidth (IEnumerator ewidths, int curWidth, ref bool? eValid)
- {
- if (!eValid.HasValue || (eValid.HasValue && eValid.Value)) {
- curWidth = (eValid = ewidths.MoveNext ()).Value ? ewidths.Current : curWidth;
- // '.' is any character, - is for a continuation
- const string minWidth = ".-";
- if (curWidth < minWidth.Length)
- throw new ArgumentOutOfRangeException ("widths",
- string.Format ("Element must be >= {0}, was {1}.", minWidth.Length, curWidth));
- return curWidth;
- }
- // no more elements, use the last element.
- return curWidth;
- }
-
- private static bool IsEolChar (char c)
- {
- return !char.IsLetterOrDigit (c);
- }
-
- private static int GetLineEnd (int start, int length, string description)
- {
- int end = System.Math.Min (start + length, description.Length);
- int sep = -1;
- for (int i = start; i < end; ++i) {
- if (description [i] == '\n')
- return i + 1;
- if (IsEolChar (description [i]))
- sep = i + 1;
- }
- if (sep == -1 || end == description.Length)
- return end;
- return sep;
- }
- }
-
- public class OptionValueCollection : IList, IList
- {
-
- List values = new List ();
- OptionContext c;
-
- internal OptionValueCollection (OptionContext c)
- {
- this.c = c;
- }
-
- #region ICollection
-
- void ICollection.CopyTo (Array array, int index)
- {
- (values as ICollection).CopyTo (array, index);
- }
-
- bool ICollection.IsSynchronized { get { return (values as ICollection).IsSynchronized; } }
-
- object ICollection.SyncRoot { get { return (values as ICollection).SyncRoot; } }
-
- #endregion
-
- #region ICollection
-
- public void Add (string item)
- {
- values.Add (item);
- }
-
- public void Clear ()
- {
- values.Clear ();
- }
-
- public bool Contains (string item)
- {
- return values.Contains (item);
- }
-
- public void CopyTo (string[] array, int arrayIndex)
- {
- values.CopyTo (array, arrayIndex);
- }
-
- public bool Remove (string item)
- {
- return values.Remove (item);
- }
-
- public int Count { get { return values.Count; } }
-
- public bool IsReadOnly { get { return false; } }
-
- #endregion
-
- #region IEnumerable
-
- IEnumerator IEnumerable.GetEnumerator ()
- {
- return values.GetEnumerator ();
- }
-
- #endregion
-
- #region IEnumerable
-
- public IEnumerator GetEnumerator ()
- {
- return values.GetEnumerator ();
- }
-
- #endregion
-
- #region IList
-
- int IList.Add (object value)
- {
- return (values as IList).Add (value);
- }
-
- bool IList.Contains (object value)
- {
- return (values as IList).Contains (value);
- }
-
- int IList.IndexOf (object value)
- {
- return (values as IList).IndexOf (value);
- }
-
- void IList.Insert (int index, object value)
- {
- (values as IList).Insert (index, value);
- }
-
- void IList.Remove (object value)
- {
- (values as IList).Remove (value);
- }
-
- void IList.RemoveAt (int index)
- {
- (values as IList).RemoveAt (index);
- }
-
- bool IList.IsFixedSize { get { return false; } }
-
- object IList.this [int index] { get { return this [index]; } set { (values as IList) [index] = value; } }
-
- #endregion
-
- #region IList
-
- public int IndexOf (string item)
- {
- return values.IndexOf (item);
- }
-
- public void Insert (int index, string item)
- {
- values.Insert (index, item);
- }
-
- public void RemoveAt (int index)
- {
- values.RemoveAt (index);
- }
-
- private void AssertValid (int index)
- {
- if (c.Option == null)
- throw new InvalidOperationException ("OptionContext.Option is null.");
- if (index >= c.Option.MaxValueCount)
- throw new ArgumentOutOfRangeException ("index");
- if (c.Option.OptionValueType == OptionValueType.Required &&
- index >= values.Count)
- throw new OptionException (string.Format (
- c.OptionSet.MessageLocalizer ("Missing required value for option '{0}'."), c.OptionName),
- c.OptionName);
- }
-
- public string this [int index] {
- get {
- AssertValid (index);
- return index >= values.Count ? null : values [index];
- }
- set {
- values [index] = value;
- }
- }
-
- #endregion
-
- public List ToList ()
- {
- return new List (values);
- }
-
- public string[] ToArray ()
- {
- return values.ToArray ();
- }
-
- public override string ToString ()
- {
- return string.Join (", ", values.ToArray ());
- }
- }
-
- public class OptionContext
- {
- private Option option;
- private string name;
- private int index;
- private OptionSet set;
- private OptionValueCollection c;
-
- public OptionContext (OptionSet set)
- {
- this.set = set;
- this.c = new OptionValueCollection (this);
- }
-
- public Option Option {
- get { return option; }
- set { option = value; }
- }
-
- public string OptionName {
- get { return name; }
- set { name = value; }
- }
-
- public int OptionIndex {
- get { return index; }
- set { index = value; }
- }
-
- public OptionSet OptionSet {
- get { return set; }
- }
-
- public OptionValueCollection OptionValues {
- get { return c; }
- }
- }
-
- public enum OptionValueType
- {
- None,
- Optional,
- Required,
- }
-
- public abstract class Option
- {
- string prototype, description;
- string[] names;
- OptionValueType type;
- int count;
- string[] separators;
- bool hidden;
-
- protected Option (string prototype, string description)
- : this (prototype, description, 1, false)
- {
- }
-
- protected Option (string prototype, string description, int maxValueCount)
- : this (prototype, description, maxValueCount, false)
- {
- }
-
- protected Option (string prototype, string description, int maxValueCount, bool hidden)
- {
- if (prototype == null)
- throw new ArgumentNullException ("prototype");
- if (prototype.Length == 0)
- throw new ArgumentException ("Cannot be the empty string.", "prototype");
- if (maxValueCount < 0)
- throw new ArgumentOutOfRangeException ("maxValueCount");
-
- this.prototype = prototype;
- this.description = description;
- this.count = maxValueCount;
- this.names = (this is OptionSet.Category)
- // append GetHashCode() so that "duplicate" categories have distinct
- // names, e.g. adding multiple "" categories should be valid.
- ? new[]{ prototype + this.GetHashCode () }
- : prototype.Split ('|');
-
- if (this is OptionSet.Category)
- return;
-
- this.type = ParsePrototype ();
- this.hidden = hidden;
-
- if (this.count == 0 && type != OptionValueType.None)
- throw new ArgumentException (
- "Cannot provide maxValueCount of 0 for OptionValueType.Required or " +
- "OptionValueType.Optional.",
- "maxValueCount");
- if (this.type == OptionValueType.None && maxValueCount > 1)
- throw new ArgumentException (
- string.Format ("Cannot provide maxValueCount of {0} for OptionValueType.None.", maxValueCount),
- "maxValueCount");
- if (Array.IndexOf (names, "<>") >= 0 &&
- ((names.Length == 1 && this.type != OptionValueType.None) ||
- (names.Length > 1 && this.MaxValueCount > 1)))
- throw new ArgumentException (
- "The default option handler '<>' cannot require values.",
- "prototype");
- }
-
- public string Prototype { get { return prototype; } }
-
- public string Description { get { return description; } }
-
- public OptionValueType OptionValueType { get { return type; } }
-
- public int MaxValueCount { get { return count; } }
-
- public bool Hidden { get { return hidden; } }
-
- public string[] GetNames ()
- {
- return (string[])names.Clone ();
- }
-
- public string[] GetValueSeparators ()
- {
- if (separators == null)
- return new string [0];
- return (string[])separators.Clone ();
- }
-
- protected static T Parse (string value, OptionContext c)
- {
- Type tt = typeof(T);
- TypeInfo ti = tt.GetTypeInfo ();
- bool nullable = ti.IsValueType && ti.IsGenericType &&
- !ti.IsGenericTypeDefinition &&
- tt.GetGenericTypeDefinition () == typeof(Nullable<>);
- Type targetType = nullable ? tt.GetTypeInfo ().GenericTypeArguments [0] : typeof(T);
- //TypeConverter conv = TypeDescriptor.GetConverter (targetType);
- T t = default (T);
- try {
- if (value != null) {
- throw new ArgumentException ();
- //t = (T)conv.ConvertFromString (value);
- }
- } catch (Exception e) {
- throw new OptionException (
- string.Format (
- c.OptionSet.MessageLocalizer ($"Could not convert string `{value}' to type {targetType.Name} for option `{c.OptionName}'.")),
- c.OptionName, e);
- }
- return t;
- }
-
- internal string[] Names { get { return names; } }
-
- internal string[] ValueSeparators { get { return separators; } }
-
- static readonly char[] NameTerminator = new char[]{ '=', ':' };
-
- private OptionValueType ParsePrototype ()
- {
- char type = '\0';
- List seps = new List ();
- for (int i = 0; i < names.Length; ++i) {
- string name = names [i];
- if (name.Length == 0)
- throw new ArgumentException ("Empty option names are not supported.", "prototype");
-
- int end = name.IndexOfAny (NameTerminator);
- if (end == -1)
- continue;
- names [i] = name.Substring (0, end);
- if (type == '\0' || type == name [end])
- type = name [end];
- else
- throw new ArgumentException (
- string.Format ("Conflicting option types: '{0}' vs. '{1}'.", type, name [end]),
- "prototype");
- AddSeparators (name, end, seps);
- }
-
- if (type == '\0')
- return OptionValueType.None;
-
- if (count <= 1 && seps.Count != 0)
- throw new ArgumentException (
- string.Format ("Cannot provide key/value separators for Options taking {0} value(s).", count),
- "prototype");
- if (count > 1) {
- if (seps.Count == 0)
- this.separators = new string[]{ ":", "=" };
- else if (seps.Count == 1 && seps [0].Length == 0)
- this.separators = null;
- else
- this.separators = seps.ToArray ();
- }
-
- return type == '=' ? OptionValueType.Required : OptionValueType.Optional;
- }
-
- private static void AddSeparators (string name, int end, ICollection seps)
- {
- int start = -1;
- for (int i = end + 1; i < name.Length; ++i) {
- switch (name [i]) {
- case '{':
- if (start != -1)
- throw new ArgumentException (
- string.Format ("Ill-formed name/value separator found in \"{0}\".", name),
- "prototype");
- start = i + 1;
- break;
- case '}':
- if (start == -1)
- throw new ArgumentException (
- string.Format ("Ill-formed name/value separator found in \"{0}\".", name),
- "prototype");
- seps.Add (name.Substring (start, i - start));
- start = -1;
- break;
- default:
- if (start == -1)
- seps.Add (name [i].ToString ());
- break;
- }
- }
- if (start != -1)
- throw new ArgumentException (
- string.Format ("Ill-formed name/value separator found in \"{0}\".", name),
- "prototype");
- }
-
- public void Invoke (OptionContext c)
- {
- OnParseComplete (c);
- c.OptionName = null;
- c.Option = null;
- c.OptionValues.Clear ();
- }
-
- protected abstract void OnParseComplete (OptionContext c);
-
- public override string ToString ()
- {
- return Prototype;
- }
- }
-
- public abstract class ArgumentSource
- {
-
- protected ArgumentSource ()
- {
- }
-
- public abstract string[] GetNames ();
-
- public abstract string Description { get; }
-
- public abstract bool GetArguments (string value, out IEnumerable replacement);
-
- public static IEnumerable GetArguments (TextReader reader)
- {
- return GetArguments (reader, false);
- }
-
- // Cribbed from mcs/driver.cs:LoadArgs(string)
- static IEnumerable GetArguments (TextReader reader, bool close)
- {
- try {
- StringBuilder arg = new StringBuilder ();
-
- string line;
- while ((line = reader.ReadLine ()) != null) {
- int t = line.Length;
-
- for (int i = 0; i < t; i++) {
- char c = line [i];
-
- if (c == '"' || c == '\'') {
- char end = c;
-
- for (i++; i < t; i++) {
- c = line [i];
-
- if (c == end)
- break;
- arg.Append (c);
- }
- } else if (c == ' ') {
- if (arg.Length > 0) {
- yield return arg.ToString ();
- arg.Length = 0;
- }
- } else
- arg.Append (c);
- }
- if (arg.Length > 0) {
- yield return arg.ToString ();
- arg.Length = 0;
- }
- }
- } finally {
- if (close)
- reader.Dispose ();
- }
- }
- }
-
- public class OptionException : Exception
- {
- private string option;
-
- public OptionException ()
- {
- }
-
- public OptionException (string message, string optionName)
- : base (message)
- {
- this.option = optionName;
- }
-
- public OptionException (string message, string optionName, Exception innerException)
- : base (message, innerException)
- {
- this.option = optionName;
- }
-
- public string OptionName {
- get { return this.option; }
- }
- }
-
- public delegate void OptionAction (TKey key, TValue value);
-
- public class OptionSet : KeyedCollection
- {
- public OptionSet ()
- : this ((string f) => f)
- {
- }
-
- public OptionSet (Func localizer)
- {
- this.localizer = localizer;
- this.roSources = new ReadOnlyCollection (sources);
- }
-
- Func localizer;
-
- public Func MessageLocalizer {
- get { return localizer; }
- }
-
- List sources = new List ();
- ReadOnlyCollection roSources;
-
- public ReadOnlyCollection ArgumentSources {
- get { return roSources; }
- }
-
-
- protected override string GetKeyForItem (Option item)
- {
- if (item == null)
- throw new ArgumentNullException ("option");
- if (item.Names != null && item.Names.Length > 0)
- return item.Names [0];
- // This should never happen, as it's invalid for Option to be
- // constructed w/o any names.
- throw new InvalidOperationException ("Option has no names!");
- }
-
- [Obsolete ("Use KeyedCollection.this[string]")]
- protected Option GetOptionForName (string option)
- {
- if (option == null)
- throw new ArgumentNullException ("option");
- try {
- return base [option];
- } catch (KeyNotFoundException) {
- return null;
- }
- }
-
- protected override void InsertItem (int index, Option item)
- {
- base.InsertItem (index, item);
- AddImpl (item);
- }
-
- protected override void RemoveItem (int index)
- {
- Option p = Items [index];
- base.RemoveItem (index);
- // KeyedCollection.RemoveItem() handles the 0th item
- for (int i = 1; i < p.Names.Length; ++i) {
- Dictionary.Remove (p.Names [i]);
- }
- }
-
- protected override void SetItem (int index, Option item)
- {
- base.SetItem (index, item);
- AddImpl (item);
- }
-
- private void AddImpl (Option option)
- {
- if (option == null)
- throw new ArgumentNullException ("option");
- List added = new List (option.Names.Length);
- try {
- // KeyedCollection.InsertItem/SetItem handle the 0th name.
- for (int i = 1; i < option.Names.Length; ++i) {
- Dictionary.Add (option.Names [i], option);
- added.Add (option.Names [i]);
- }
- } catch (Exception) {
- foreach (string name in added)
- Dictionary.Remove (name);
- throw;
- }
- }
-
- public OptionSet Add (string header)
- {
- if (header == null)
- throw new ArgumentNullException ("header");
- Add (new Category (header));
- return this;
- }
-
- internal sealed class Category : Option
- {
-
- // Prototype starts with '=' because this is an invalid prototype
- // (see Option.ParsePrototype(), and thus it'll prevent Category
- // instances from being accidentally used as normal options.
- public Category (string description)
- : base ("=:Category:= " + description, description)
- {
- }
-
- protected override void OnParseComplete (OptionContext c)
- {
- throw new NotSupportedException ("Category.OnParseComplete should not be invoked.");
- }
- }
-
-
- public new OptionSet Add (Option option)
- {
- base.Add (option);
- return this;
- }
-
- sealed class ActionOption : Option
- {
- Action action;
-
- public ActionOption (string prototype, string description, int count, Action action)
- : this (prototype, description, count, action, false)
- {
- }
-
- public ActionOption (string prototype, string description, int count, Action action, bool hidden)
- : base (prototype, description, count, hidden)
- {
- if (action == null)
- throw new ArgumentNullException ("action");
- this.action = action;
- }
-
- protected override void OnParseComplete (OptionContext c)
- {
- action (c.OptionValues);
- }
- }
-
- public OptionSet Add (string prototype, Action action)
- {
- return Add (prototype, null, action);
- }
-
- public OptionSet Add (string prototype, string description, Action action)
- {
- return Add (prototype, description, action, false);
- }
-
- public OptionSet Add (string prototype, string description, Action action, bool hidden)
- {
- if (action == null)
- throw new ArgumentNullException ("action");
- Option p = new ActionOption (prototype, description, 1,
- delegate (OptionValueCollection v) {
- action (v [0]);
- }, hidden);
- base.Add (p);
- return this;
- }
-
- public OptionSet Add (string prototype, OptionAction action)
- {
- return Add (prototype, null, action);
- }
-
- public OptionSet Add (string prototype, string description, OptionAction action)
- {
- return Add (prototype, description, action, false);
- }
-
- public OptionSet Add (string prototype, string description, OptionAction action, bool hidden)
- {
- if (action == null)
- throw new ArgumentNullException ("action");
- Option p = new ActionOption (prototype, description, 2,
- delegate (OptionValueCollection v) {
- action (v [0], v [1]);
- }, hidden);
- base.Add (p);
- return this;
- }
-
- sealed class ActionOption : Option
- {
- Action action;
-
- public ActionOption (string prototype, string description, Action action)
- : base (prototype, description, 1)
- {
- if (action == null)
- throw new ArgumentNullException ("action");
- this.action = action;
- }
-
- protected override void OnParseComplete (OptionContext c)
- {
- action (Parse (c.OptionValues [0], c));
- }
- }
-
- sealed class ActionOption : Option
- {
- OptionAction action;
-
- public ActionOption (string prototype, string description, OptionAction action)
- : base (prototype, description, 2)
- {
- if (action == null)
- throw new ArgumentNullException ("action");
- this.action = action;
- }
-
- protected override void OnParseComplete (OptionContext c)
- {
- action (
- Parse (c.OptionValues [0], c),
- Parse (c.OptionValues [1], c));
- }
- }
-
- public OptionSet Add (string prototype, Action action)
- {
- return Add (prototype, null, action);
- }
-
- public OptionSet Add (string prototype, string description, Action action)
- {
- return Add (new ActionOption (prototype, description, action));
- }
-
- public OptionSet Add (string prototype, OptionAction action)
- {
- return Add (prototype, null, action);
- }
-
- public OptionSet Add (string prototype, string description, OptionAction action)
- {
- return Add (new ActionOption (prototype, description, action));
- }
-
- public OptionSet Add (ArgumentSource source)
- {
- if (source == null)
- throw new ArgumentNullException ("source");
- sources.Add (source);
- return this;
- }
-
- protected virtual OptionContext CreateOptionContext ()
- {
- return new OptionContext (this);
- }
-
- public List Parse (IEnumerable arguments)
- {
- if (arguments == null)
- throw new ArgumentNullException ("arguments");
- OptionContext c = CreateOptionContext ();
- c.OptionIndex = -1;
- bool process = true;
- List unprocessed = new List ();
- Option def = Contains ("<>") ? this ["<>"] : null;
- ArgumentEnumerator ae = new ArgumentEnumerator (arguments);
- foreach (string argument in ae) {
- ++c.OptionIndex;
- if (argument == "--") {
- process = false;
- continue;
- }
- if (!process) {
- Unprocessed (unprocessed, def, c, argument);
- continue;
- }
- if (AddSource (ae, argument))
- continue;
- if (!Parse (argument, c))
- Unprocessed (unprocessed, def, c, argument);
- }
- if (c.Option != null)
- c.Option.Invoke (c);
- return unprocessed;
- }
-
- class ArgumentEnumerator : IEnumerable
- {
- List> sources = new List> ();
-
- public ArgumentEnumerator (IEnumerable arguments)
- {
- sources.Add (arguments.GetEnumerator ());
- }
-
- public void Add (IEnumerable arguments)
- {
- sources.Add (arguments.GetEnumerator ());
- }
-
- public IEnumerator GetEnumerator ()
- {
- do {
- IEnumerator c = sources [sources.Count - 1];
- if (c.MoveNext ())
- yield return c.Current;
- else {
- c.Dispose ();
- sources.RemoveAt (sources.Count - 1);
- }
- } while (sources.Count > 0);
- }
-
- IEnumerator IEnumerable.GetEnumerator ()
- {
- return GetEnumerator ();
- }
- }
-
- bool AddSource (ArgumentEnumerator ae, string argument)
- {
- foreach (ArgumentSource source in sources) {
- IEnumerable replacement;
- if (!source.GetArguments (argument, out replacement))
- continue;
- ae.Add (replacement);
- return true;
- }
- return false;
- }
-
- private static bool Unprocessed (ICollection extra, Option def, OptionContext c, string argument)
- {
- if (def == null) {
- extra.Add (argument);
- return false;
- }
- c.OptionValues.Add (argument);
- c.Option = def;
- c.Option.Invoke (c);
- return false;
- }
-
- private readonly Regex ValueOption = new Regex (
- @"^(?--|-|/)(?[^:=]+)((?[:=])(?.*))?$");
-
- protected bool GetOptionParts (string argument, out string flag, out string name, out string sep, out string value)
- {
- if (argument == null)
- throw new ArgumentNullException ("argument");
-
- flag = name = sep = value = null;
- Match m = ValueOption.Match (argument);
- if (!m.Success) {
- return false;
- }
- flag = m.Groups ["flag"].Value;
- name = m.Groups ["name"].Value;
- if (m.Groups ["sep"].Success && m.Groups ["value"].Success) {
- sep = m.Groups ["sep"].Value;
- value = m.Groups ["value"].Value;
- }
- return true;
- }
-
- protected virtual bool Parse (string argument, OptionContext c)
- {
- if (c.Option != null) {
- ParseValue (argument, c);
- return true;
- }
-
- string f, n, s, v;
- if (!GetOptionParts (argument, out f, out n, out s, out v))
- return false;
-
- Option p;
- if (Contains (n)) {
- p = this [n];
- c.OptionName = f + n;
- c.Option = p;
- switch (p.OptionValueType) {
- case OptionValueType.None:
- c.OptionValues.Add (n);
- c.Option.Invoke (c);
- break;
- case OptionValueType.Optional:
- case OptionValueType.Required:
- ParseValue (v, c);
- break;
- }
- return true;
- }
- // no match; is it a bool option?
- if (ParseBool (argument, n, c))
- return true;
- // is it a bundled option?
- if (ParseBundledValue (f, string.Concat (n + s + v), c))
- return true;
-
- return false;
- }
-
- private void ParseValue (string option, OptionContext c)
- {
- if (option != null)
- foreach (string o in c.Option.ValueSeparators != null
- ? option.Split (c.Option.ValueSeparators, c.Option.MaxValueCount - c.OptionValues.Count, StringSplitOptions.None)
- : new string[]{option}) {
- c.OptionValues.Add (o);
- }
- if (c.OptionValues.Count == c.Option.MaxValueCount ||
- c.Option.OptionValueType == OptionValueType.Optional)
- c.Option.Invoke (c);
- else if (c.OptionValues.Count > c.Option.MaxValueCount) {
- throw new OptionException (localizer (string.Format (
- "Error: Found {0} option values when expecting {1}.",
- c.OptionValues.Count, c.Option.MaxValueCount)),
- c.OptionName);
- }
- }
-
- private bool ParseBool (string option, string n, OptionContext c)
- {
- Option p;
- string rn;
- if (n.Length >= 1 && (n [n.Length - 1] == '+' || n [n.Length - 1] == '-') &&
- Contains ((rn = n.Substring (0, n.Length - 1)))) {
- p = this [rn];
- string v = n [n.Length - 1] == '+' ? option : null;
- c.OptionName = option;
- c.Option = p;
- c.OptionValues.Add (v);
- p.Invoke (c);
- return true;
- }
- return false;
- }
-
- private bool ParseBundledValue (string f, string n, OptionContext c)
- {
- if (f != "-")
- return false;
- for (int i = 0; i < n.Length; ++i) {
- Option p;
- string opt = f + n [i].ToString ();
- string rn = n [i].ToString ();
- if (!Contains (rn)) {
- if (i == 0)
- return false;
- throw new OptionException (string.Format (localizer (
- "Cannot bundle unregistered option '{0}'."), opt), opt);
- }
- p = this [rn];
- switch (p.OptionValueType) {
- case OptionValueType.None:
- Invoke (c, opt, n, p);
- break;
- case OptionValueType.Optional:
- case OptionValueType.Required:
- {
- string v = n.Substring (i + 1);
- c.Option = p;
- c.OptionName = opt;
- ParseValue (v.Length != 0 ? v : null, c);
- return true;
- }
- default:
- throw new InvalidOperationException ("Unknown OptionValueType: " + p.OptionValueType);
- }
- }
- return true;
- }
-
- private static void Invoke (OptionContext c, string name, string value, Option option)
- {
- c.OptionName = name;
- c.Option = option;
- c.OptionValues.Add (value);
- option.Invoke (c);
- }
-
- private const int OptionWidth = 29;
- private const int Description_FirstWidth = 80 - OptionWidth;
- private const int Description_RemWidth = 80 - OptionWidth - 2;
-
- public void WriteOptionDescriptions (TextWriter o)
- {
- foreach (Option p in this) {
- int written = 0;
-
- if (p.Hidden)
- continue;
-
- Category c = p as Category;
- if (c != null) {
- WriteDescription (o, p.Description, "", 80, 80);
- continue;
- }
-
- if (!WriteOptionPrototype (o, p, ref written))
- continue;
-
- if (written < OptionWidth)
- o.Write (new string (' ', OptionWidth - written));
- else {
- o.WriteLine ();
- o.Write (new string (' ', OptionWidth));
- }
-
- WriteDescription (o, p.Description, new string (' ', OptionWidth + 2),
- Description_FirstWidth, Description_RemWidth);
- }
-
- foreach (ArgumentSource s in sources) {
- string[] names = s.GetNames ();
- if (names == null || names.Length == 0)
- continue;
-
- int written = 0;
-
- Write (o, ref written, " ");
- Write (o, ref written, names [0]);
- for (int i = 1; i < names.Length; ++i) {
- Write (o, ref written, ", ");
- Write (o, ref written, names [i]);
- }
-
- if (written < OptionWidth)
- o.Write (new string (' ', OptionWidth - written));
- else {
- o.WriteLine ();
- o.Write (new string (' ', OptionWidth));
- }
-
- WriteDescription (o, s.Description, new string (' ', OptionWidth + 2),
- Description_FirstWidth, Description_RemWidth);
- }
- }
-
- void WriteDescription (TextWriter o, string value, string prefix, int firstWidth, int remWidth)
- {
- bool indent = false;
- foreach (string line in GetLines (localizer (GetDescription (value)), firstWidth, remWidth)) {
- if (indent)
- o.Write (prefix);
- o.WriteLine (line);
- indent = true;
- }
- }
-
- bool WriteOptionPrototype (TextWriter o, Option p, ref int written)
- {
- string[] names = p.Names;
-
- int i = GetNextOptionIndex (names, 0);
- if (i == names.Length)
- return false;
-
- if (names [i].Length == 1) {
- Write (o, ref written, " -");
- Write (o, ref written, names [0]);
- } else {
- Write (o, ref written, " --");
- Write (o, ref written, names [0]);
- }
-
- for (i = GetNextOptionIndex (names, i + 1);
- i < names.Length; i = GetNextOptionIndex (names, i + 1)) {
- Write (o, ref written, ", ");
- Write (o, ref written, names [i].Length == 1 ? "-" : "--");
- Write (o, ref written, names [i]);
- }
-
- if (p.OptionValueType == OptionValueType.Optional ||
- p.OptionValueType == OptionValueType.Required) {
- if (p.OptionValueType == OptionValueType.Optional) {
- Write (o, ref written, localizer ("["));
- }
- Write (o, ref written, localizer ("=" + GetArgumentName (0, p.MaxValueCount, p.Description)));
- string sep = p.ValueSeparators != null && p.ValueSeparators.Length > 0
- ? p.ValueSeparators [0]
- : " ";
- for (int c = 1; c < p.MaxValueCount; ++c) {
- Write (o, ref written, localizer (sep + GetArgumentName (c, p.MaxValueCount, p.Description)));
- }
- if (p.OptionValueType == OptionValueType.Optional) {
- Write (o, ref written, localizer ("]"));
- }
- }
- return true;
- }
-
- static int GetNextOptionIndex (string[] names, int i)
- {
- while (i < names.Length && names [i] == "<>") {
- ++i;
- }
- return i;
- }
-
- static void Write (TextWriter o, ref int n, string s)
- {
- n += s.Length;
- o.Write (s);
- }
-
- private static string GetArgumentName (int index, int maxIndex, string description)
- {
- if (description == null)
- return maxIndex == 1 ? "VALUE" : "VALUE" + (index + 1);
- string[] nameStart;
- if (maxIndex == 1)
- nameStart = new string[]{ "{0:", "{" };
- else
- nameStart = new string[]{ "{" + index + ":" };
- for (int i = 0; i < nameStart.Length; ++i) {
- int start, j = 0;
- do {
- start = description.IndexOf (nameStart [i], j);
- } while (start >= 0 && j != 0 ? description [j++ - 1] == '{' : false);
- if (start == -1)
- continue;
- int end = description.IndexOf ("}", start);
- if (end == -1)
- continue;
- return description.Substring (start + nameStart [i].Length, end - start - nameStart [i].Length);
- }
- return maxIndex == 1 ? "VALUE" : "VALUE" + (index + 1);
- }
-
- private static string GetDescription (string description)
- {
- if (description == null)
- return string.Empty;
- StringBuilder sb = new StringBuilder (description.Length);
- int start = -1;
- for (int i = 0; i < description.Length; ++i) {
- switch (description [i]) {
- case '{':
- if (i == start) {
- sb.Append ('{');
- start = -1;
- } else if (start < 0)
- start = i + 1;
- break;
- case '}':
- if (start < 0) {
- if ((i + 1) == description.Length || description [i + 1] != '}')
- throw new InvalidOperationException ("Invalid option description: " + description);
- ++i;
- sb.Append ("}");
- } else {
- sb.Append (description.Substring (start, i - start));
- start = -1;
- }
- break;
- case ':':
- if (start < 0)
- goto default;
- start = i + 1;
- break;
- default:
- if (start < 0)
- sb.Append (description [i]);
- break;
- }
- }
- return sb.ToString ();
- }
-
- private static IEnumerable GetLines (string description, int firstWidth, int remWidth)
- {
- return StringCoda.WrappedLines (description, firstWidth, remWidth);
- }
- }
-}
-
diff --git a/tools/class-parse/Properties/AssemblyInfo.cs b/tools/class-parse/Properties/AssemblyInfo.cs
deleted file mode 100644
index 97bf93156..000000000
--- a/tools/class-parse/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-// Information about this assembly is defined by the following attributes.
-// Change them to the values specific to your project.
-
-[assembly: AssemblyTitle ("JavaClassParser")]
-[assembly: AssemblyDescription ("")]
-[assembly: AssemblyConfiguration ("")]
-[assembly: AssemblyCompany ("Xamarin Inc.")]
-[assembly: AssemblyProduct ("")]
-[assembly: AssemblyCopyright ("Xamarin Inc.")]
-[assembly: AssemblyTrademark ("Xamarin")]
-[assembly: AssemblyCulture ("")]
-
-// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
-// The form "{Major}.{Minor}.*" will automatically update the build and revision,
-// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-
-[assembly: AssemblyVersion ("1.0.*")]
-
-// The following attributes are used to specify the signing key for the assembly,
-// if desired. See the Mono documentation for more information about signing.
-
-//[assembly: AssemblyDelaySign(false)]
-//[assembly: AssemblyKeyFile("")]
-
diff --git a/tools/class-parse/class-parse.csproj b/tools/class-parse/class-parse.csproj
index acb17e959..5d6b06c2b 100644
--- a/tools/class-parse/class-parse.csproj
+++ b/tools/class-parse/class-parse.csproj
@@ -1,57 +1,23 @@
-
-
+
+
- Debug
- AnyCPU
- {38C762AB-8FD1-44DE-9855-26AAE7129DC3}
+ net472
Exe
- Xamarin.Android.Tools
- class-parse
- v4.6.1
- False
- 8.0.30703
- 2.0
+ false
+
-
- true
- full
- false
- $(UtilityOutputFullPath)
- DEBUG;
- prompt
- 4
- true
- false
-
-
- full
- true
+
+
$(UtilityOutputFullPath)
- prompt
- 4
- true
- true
+
-
-
-
-
-
-
-
-
-
-
-
-
-
- {B17475BC-45A2-47A3-B8FC-62F3A0959EE0}
- Xamarin.Android.Tools.Bytecode
-
+
+
-
+
+
diff --git a/tools/class-parse/packages.config b/tools/class-parse/packages.config
deleted file mode 100644
index f862aa233..000000000
--- a/tools/class-parse/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/tools/generator/generator.csproj b/tools/generator/generator.csproj
index 9c5f6f426..a16eba503 100644
--- a/tools/generator/generator.csproj
+++ b/tools/generator/generator.csproj
@@ -1,55 +1,18 @@
-
-
+
+
- Debug
- AnyCPU
- 8.0.30703
- 2.0
- {D14A1B5C-2060-4930-92BE-F7190256C735}
+ net472
Exe
- MonoDroid.Generation
- generator
- AnyCPU
-
-
-
-
-
- v4.6.1
+ $(DefineConstants);GENERATOR;HAVE_CECIL;JCW_ONLY_TYPE_NAMES
+ false
+
-
- True
- full
- False
- $(UtilityOutputFullPath)
- DEBUG;GENERATOR;HAVE_CECIL;JCW_ONLY_TYPE_NAMES
- prompt
- 4
- false
- anycpu
-
-
- full
- False
+
+
$(UtilityOutputFullPath)
- prompt
- 4
- True
- GENERATOR;HAVE_CECIL;JCW_ONLY_TYPE_NAMES
-
-
- ..\..\packages\HtmlAgilityPack.1.8.14\lib\Net45\HtmlAgilityPack.dll
-
-
-
-
-
-
- ..\..\packages\Mono.Options.4.4.0.0\lib\net4-client\Mono.Options.dll
-
-
+
utils\StringRocks.cs
@@ -60,103 +23,25 @@
utils\XmlExtensions.cs
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
- {07BC4495-1267-4B78-9EA6-B76FEEA2A64A}
- Xamarin.Android.Tools.AnnotationSupport
-
-
- {1268EADF-8344-431C-81F6-FCB7CBC99F49}
- Xamarin.Android.Tools.ApiXmlAdjuster
-
-
- {64CC4E44-CE3A-4319-BF3F-6CF8BD513870}
- Java.Interop.Tools.Diagnostics
-
-
- {D48EE8D0-0A0A-4493-AEF5-DAF5F8CF86AD}
- Java.Interop.Tools.Cecil
-
-
- {15945D4B-FF56-4BCC-B598-2718D199DD08}
- Xamarin.Android.Cecil
-
-
- {D18FCF91-8876-48A0-A693-2DC1E7D3D80A}
- Java.Interop.Tools.JavaCallableWrappers
-
+
+
+
+
+ $(PkgHtmlAgilityPack)\lib\netstandard2.0\HtmlAgilityPack.dll
+
+
-
+
+
+
+
+
+
-
\ No newline at end of file
+
+
diff --git a/tools/generator/packages.config b/tools/generator/packages.config
deleted file mode 100644
index 805b9ae6d..000000000
--- a/tools/generator/packages.config
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/tools/jcw-gen/Properties/AssemblyInfo.cs b/tools/jcw-gen/Properties/AssemblyInfo.cs
deleted file mode 100644
index d55e5c765..000000000
--- a/tools/jcw-gen/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-// Information about this assembly is defined by the following attributes.
-// Change them to the values specific to your project.
-
-[assembly: AssemblyTitle ("jcwgen")]
-[assembly: AssemblyDescription ("")]
-[assembly: AssemblyConfiguration ("")]
-[assembly: AssemblyCompany ("Xamarin Inc.")]
-[assembly: AssemblyProduct ("")]
-[assembly: AssemblyCopyright ("Xamarin Inc.")]
-[assembly: AssemblyTrademark ("Xamarin")]
-[assembly: AssemblyCulture ("")]
-
-// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
-// The form "{Major}.{Minor}.*" will automatically update the build and revision,
-// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-
-[assembly: AssemblyVersion ("1.0.*")]
-
-// The following attributes are used to specify the signing key for the assembly,
-// if desired. See the Mono documentation for more information about signing.
-
-//[assembly: AssemblyDelaySign(false)]
-//[assembly: AssemblyKeyFile("")]
-
diff --git a/tools/jcw-gen/jcw-gen.csproj b/tools/jcw-gen/jcw-gen.csproj
index 2cce1d077..49f64e523 100644
--- a/tools/jcw-gen/jcw-gen.csproj
+++ b/tools/jcw-gen/jcw-gen.csproj
@@ -1,65 +1,26 @@
-
-
+
+
- Debug
- AnyCPU
- 8.0.30703
- 2.0
- {52C7D9B6-E8C8-47D0-9471-652D278D7D77}
+ net472
Exe
- Java.interop.Tools
- jcw-gen
- v4.6.1
+ false
+
-
- true
- full
- false
- $(UtilityOutputFullPath)
- DEBUG;
- prompt
- 4
- true
-
-
- full
- true
+
+
$(UtilityOutputFullPath)
- prompt
- 4
- true
+
-
-
- ..\..\packages\Mono.Options.4.4.0.0\lib\net4-client\Mono.Options.dll
-
-
-
-
-
-
-
-
- {D18FCF91-8876-48A0-A693-2DC1E7D3D80A}
- Java.Interop.Tools.JavaCallableWrappers
-
-
- {D48EE8D0-0A0A-4493-AEF5-DAF5F8CF86AD}
- Java.Interop.Tools.Cecil
-
-
- {64CC4E44-CE3A-4319-BF3F-6CF8BD513870}
- Java.Interop.Tools.Diagnostics
-
-
- {15945D4B-FF56-4BCC-B598-2718D199DD08}
- Xamarin.Android.Cecil
-
+
+
-
+
+
+
+
-
-
\ No newline at end of file
+
+
diff --git a/tools/jcw-gen/packages.config b/tools/jcw-gen/packages.config
deleted file mode 100644
index 8a52a6801..000000000
--- a/tools/jcw-gen/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/tools/jnimarshalmethod-gen/Properties/AssemblyInfo.cs b/tools/jnimarshalmethod-gen/Properties/AssemblyInfo.cs
deleted file mode 100644
index 7f5576a1d..000000000
--- a/tools/jnimarshalmethod-gen/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-// Information about this assembly is defined by the following attributes.
-// Change them to the values specific to your project.
-
-[assembly: AssemblyTitle ("jnimarshalmethod-gen")]
-[assembly: AssemblyDescription ("")]
-[assembly: AssemblyConfiguration ("")]
-[assembly: AssemblyCompany ("Xamarin Inc.")]
-[assembly: AssemblyProduct ("")]
-[assembly: AssemblyCopyright ("Xamarin Inc.")]
-[assembly: AssemblyTrademark ("Xamarin")]
-[assembly: AssemblyCulture ("")]
-
-// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
-// The form "{Major}.{Minor}.*" will automatically update the build and revision,
-// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-
-[assembly: AssemblyVersion ("1.0.*")]
-
-// The following attributes are used to specify the signing key for the assembly,
-// if desired. See the Mono documentation for more information about signing.
-
-//[assembly: AssemblyDelaySign(false)]
-//[assembly: AssemblyKeyFile("")]
-
diff --git a/tools/jnimarshalmethod-gen/Xamarin.Android.Tools.JniMarshalMethodGenerator.csproj b/tools/jnimarshalmethod-gen/Xamarin.Android.Tools.JniMarshalMethodGenerator.csproj
index a8186e180..b6f539410 100644
--- a/tools/jnimarshalmethod-gen/Xamarin.Android.Tools.JniMarshalMethodGenerator.csproj
+++ b/tools/jnimarshalmethod-gen/Xamarin.Android.Tools.JniMarshalMethodGenerator.csproj
@@ -1,71 +1,29 @@
-
-
+
+
- Debug
- AnyCPU
- 8.0.30703
- 2.0
- {D1295A8F-4F42-461D-A046-564476C10002}
+ net472
Exe
- Xamarin.Android.Tools.JniMarshalMethodGenerator
jnimarshalmethod-gen
- v4.6.1
+ false
+
-
- true
- full
- false
- $(UtilityOutputFullPath)
- DEBUG;
- prompt
- 4
- true
-
-
- full
- true
+
+
+
$(UtilityOutputFullPath)
- prompt
- 4
- true
+
-
-
- ..\..\packages\Mono.Options.5.3.0.1\lib\net4-client\Mono.Options.dll
-
-
-
-
-
-
-
-
-
-
-
- {B501D075-6183-4E1D-92C9-F7B5002475B1}
- Java.Interop.Export
-
-
- {94BD81F7-B06F-4295-9636-F8A3B6BDC762}
- Java.Interop
-
-
- {5887B410-D448-4257-A46B-EAC03C80BE93}
- Java.Runtime.Environment
-
-
- {15945D4B-FF56-4BCC-B598-2718D199DD08}
- Xamarin.Android.Cecil
-
-
- {D48EE8D0-0A0A-4493-AEF5-DAF5F8CF86AD}
- Java.Interop.Tools.Cecil
-
+
+
-
+
+
+
+
+
-
\ No newline at end of file
+
+
diff --git a/tools/jnimarshalmethod-gen/packages.config b/tools/jnimarshalmethod-gen/packages.config
deleted file mode 100644
index 81edb81c6..000000000
--- a/tools/jnimarshalmethod-gen/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/tools/logcat-parse/Mono.Options-PCL.cs b/tools/logcat-parse/Mono.Options-PCL.cs
deleted file mode 100644
index 33c1588cf..000000000
--- a/tools/logcat-parse/Mono.Options-PCL.cs
+++ /dev/null
@@ -1,1414 +0,0 @@
-//
-// Options.cs
-//
-// Authors:
-// Jonathan Pryor
-// Federico Di Gregorio
-// Rolf Bjarne Kvinge
-//
-// Copyright (C) 2008 Novell (http://www.novell.com)
-// Copyright (C) 2009 Federico Di Gregorio.
-// Copyright (C) 2012 Xamarin Inc (http://www.xamarin.com)
-// Copyright (C) 2015 Tobias Schulz (https://github.com/tobiasschulz)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-// Compile With:
-// gmcs -debug+ -r:System.Core Options.cs -o:NDesk.Options.dll
-// gmcs -debug+ -d:LINQ -r:System.Core Options.cs -o:NDesk.Options.dll
-//
-// The LINQ version just changes the implementation of
-// OptionSet.Parse(IEnumerable), and confers no semantic changes.
-
-//
-// A Getopt::Long-inspired option parsing library for C#.
-//
-// NDesk.Options.OptionSet is built upon a key/value table, where the
-// key is a option format string and the value is a delegate that is
-// invoked when the format string is matched.
-//
-// Option format strings:
-// Regex-like BNF Grammar:
-// name: .+
-// type: [=:]
-// sep: ( [^{}]+ | '{' .+ '}' )?
-// aliases: ( name type sep ) ( '|' name type sep )*
-//
-// Each '|'-delimited name is an alias for the associated action. If the
-// format string ends in a '=', it has a required value. If the format
-// string ends in a ':', it has an optional value. If neither '=' or ':'
-// is present, no value is supported. `=' or `:' need only be defined on one
-// alias, but if they are provided on more than one they must be consistent.
-//
-// Each alias portion may also end with a "key/value separator", which is used
-// to split option values if the option accepts > 1 value. If not specified,
-// it defaults to '=' and ':'. If specified, it can be any character except
-// '{' and '}' OR the *string* between '{' and '}'. If no separator should be
-// used (i.e. the separate values should be distinct arguments), then "{}"
-// should be used as the separator.
-//
-// Options are extracted either from the current option by looking for
-// the option name followed by an '=' or ':', or is taken from the
-// following option IFF:
-// - The current option does not contain a '=' or a ':'
-// - The current option requires a value (i.e. not a Option type of ':')
-//
-// The `name' used in the option format string does NOT include any leading
-// option indicator, such as '-', '--', or '/'. All three of these are
-// permitted/required on any named option.
-//
-// Option bundling is permitted so long as:
-// - '-' is used to start the option group
-// - all of the bundled options are a single character
-// - at most one of the bundled options accepts a value, and the value
-// provided starts from the next character to the end of the string.
-//
-// This allows specifying '-a -b -c' as '-abc', and specifying '-D name=value'
-// as '-Dname=value'.
-//
-// Option processing is disabled by specifying "--". All options after "--"
-// are returned by OptionSet.Parse() unchanged and unprocessed.
-//
-// Unprocessed options are returned from OptionSet.Parse().
-//
-// Examples:
-// int verbose = 0;
-// OptionSet p = new OptionSet ()
-// .Add ("v", v => ++verbose)
-// .Add ("name=|value=", v => Console.WriteLine (v));
-// p.Parse (new string[]{"-v", "--v", "/v", "-name=A", "/name", "B", "extra"});
-//
-// The above would parse the argument string array, and would invoke the
-// lambda expression three times, setting `verbose' to 3 when complete.
-// It would also print out "A" and "B" to standard output.
-// The returned array would contain the string "extra".
-//
-// C# 3.0 collection initializers are supported and encouraged:
-// var p = new OptionSet () {
-// { "h|?|help", v => ShowHelp () },
-// };
-//
-// System.ComponentModel.TypeConverter is also supported, allowing the use of
-// custom data types in the callback type; TypeConverter.ConvertFromString()
-// is used to convert the value option to an instance of the specified
-// type:
-//
-// var p = new OptionSet () {
-// { "foo=", (Foo f) => Console.WriteLine (f.ToString ()) },
-// };
-//
-// Random other tidbits:
-// - Boolean options (those w/o '=' or ':' in the option format string)
-// are explicitly enabled if they are followed with '+', and explicitly
-// disabled if they are followed with '-':
-// string a = null;
-// var p = new OptionSet () {
-// { "a", s => a = s },
-// };
-// p.Parse (new string[]{"-a"}); // sets v != null
-// p.Parse (new string[]{"-a+"}); // sets v != null
-// p.Parse (new string[]{"-a-"}); // sets v == null
-//
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.Globalization;
-using System.IO;
-using System.Runtime.Serialization;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Linq;
-using System.Reflection;
-
-namespace Mono.Options
-{
- static class StringCoda
- {
- public static IEnumerable WrappedLines (string self, params int[] widths)
- {
- IEnumerable w = widths;
- return WrappedLines (self, w);
- }
-
- public static IEnumerable WrappedLines (string self, IEnumerable widths)
- {
- if (widths == null)
- throw new ArgumentNullException ("widths");
- return CreateWrappedLinesIterator (self, widths);
- }
-
- private static IEnumerable CreateWrappedLinesIterator (string self, IEnumerable widths)
- {
- if (string.IsNullOrEmpty (self)) {
- yield return string.Empty;
- yield break;
- }
- using (IEnumerator ewidths = widths.GetEnumerator ()) {
- bool? hw = null;
- int width = GetNextWidth (ewidths, int.MaxValue, ref hw);
- int start = 0, end;
- do {
- end = GetLineEnd (start, width, self);
- char c = self [end - 1];
- if (char.IsWhiteSpace (c))
- --end;
- bool needContinuation = end != self.Length && !IsEolChar (c);
- string continuation = "";
- if (needContinuation) {
- --end;
- continuation = "-";
- }
- string line = self.Substring (start, end - start) + continuation;
- yield return line;
- start = end;
- if (char.IsWhiteSpace (c))
- ++start;
- width = GetNextWidth (ewidths, width, ref hw);
- } while (start < self.Length);
- }
- }
-
- private static int GetNextWidth (IEnumerator ewidths, int curWidth, ref bool? eValid)
- {
- if (!eValid.HasValue || (eValid.HasValue && eValid.Value)) {
- curWidth = (eValid = ewidths.MoveNext ()).Value ? ewidths.Current : curWidth;
- // '.' is any character, - is for a continuation
- const string minWidth = ".-";
- if (curWidth < minWidth.Length)
- throw new ArgumentOutOfRangeException ("widths",
- string.Format ("Element must be >= {0}, was {1}.", minWidth.Length, curWidth));
- return curWidth;
- }
- // no more elements, use the last element.
- return curWidth;
- }
-
- private static bool IsEolChar (char c)
- {
- return !char.IsLetterOrDigit (c);
- }
-
- private static int GetLineEnd (int start, int length, string description)
- {
- int end = System.Math.Min (start + length, description.Length);
- int sep = -1;
- for (int i = start; i < end; ++i) {
- if (description [i] == '\n')
- return i + 1;
- if (IsEolChar (description [i]))
- sep = i + 1;
- }
- if (sep == -1 || end == description.Length)
- return end;
- return sep;
- }
- }
-
- public class OptionValueCollection : IList, IList
- {
-
- List values = new List ();
- OptionContext c;
-
- internal OptionValueCollection (OptionContext c)
- {
- this.c = c;
- }
-
- #region ICollection
-
- void ICollection.CopyTo (Array array, int index)
- {
- (values as ICollection).CopyTo (array, index);
- }
-
- bool ICollection.IsSynchronized { get { return (values as ICollection).IsSynchronized; } }
-
- object ICollection.SyncRoot { get { return (values as ICollection).SyncRoot; } }
-
- #endregion
-
- #region ICollection
-
- public void Add (string item)
- {
- values.Add (item);
- }
-
- public void Clear ()
- {
- values.Clear ();
- }
-
- public bool Contains (string item)
- {
- return values.Contains (item);
- }
-
- public void CopyTo (string[] array, int arrayIndex)
- {
- values.CopyTo (array, arrayIndex);
- }
-
- public bool Remove (string item)
- {
- return values.Remove (item);
- }
-
- public int Count { get { return values.Count; } }
-
- public bool IsReadOnly { get { return false; } }
-
- #endregion
-
- #region IEnumerable
-
- IEnumerator IEnumerable.GetEnumerator ()
- {
- return values.GetEnumerator ();
- }
-
- #endregion
-
- #region IEnumerable
-
- public IEnumerator GetEnumerator ()
- {
- return values.GetEnumerator ();
- }
-
- #endregion
-
- #region IList
-
- int IList.Add (object value)
- {
- return (values as IList).Add (value);
- }
-
- bool IList.Contains (object value)
- {
- return (values as IList).Contains (value);
- }
-
- int IList.IndexOf (object value)
- {
- return (values as IList).IndexOf (value);
- }
-
- void IList.Insert (int index, object value)
- {
- (values as IList).Insert (index, value);
- }
-
- void IList.Remove (object value)
- {
- (values as IList).Remove (value);
- }
-
- void IList.RemoveAt (int index)
- {
- (values as IList).RemoveAt (index);
- }
-
- bool IList.IsFixedSize { get { return false; } }
-
- object IList.this [int index] { get { return this [index]; } set { (values as IList) [index] = value; } }
-
- #endregion
-
- #region IList
-
- public int IndexOf (string item)
- {
- return values.IndexOf (item);
- }
-
- public void Insert (int index, string item)
- {
- values.Insert (index, item);
- }
-
- public void RemoveAt (int index)
- {
- values.RemoveAt (index);
- }
-
- private void AssertValid (int index)
- {
- if (c.Option == null)
- throw new InvalidOperationException ("OptionContext.Option is null.");
- if (index >= c.Option.MaxValueCount)
- throw new ArgumentOutOfRangeException ("index");
- if (c.Option.OptionValueType == OptionValueType.Required &&
- index >= values.Count)
- throw new OptionException (string.Format (
- c.OptionSet.MessageLocalizer ("Missing required value for option '{0}'."), c.OptionName),
- c.OptionName);
- }
-
- public string this [int index] {
- get {
- AssertValid (index);
- return index >= values.Count ? null : values [index];
- }
- set {
- values [index] = value;
- }
- }
-
- #endregion
-
- public List ToList ()
- {
- return new List (values);
- }
-
- public string[] ToArray ()
- {
- return values.ToArray ();
- }
-
- public override string ToString ()
- {
- return string.Join (", ", values.ToArray ());
- }
- }
-
- public class OptionContext
- {
- private Option option;
- private string name;
- private int index;
- private OptionSet set;
- private OptionValueCollection c;
-
- public OptionContext (OptionSet set)
- {
- this.set = set;
- this.c = new OptionValueCollection (this);
- }
-
- public Option Option {
- get { return option; }
- set { option = value; }
- }
-
- public string OptionName {
- get { return name; }
- set { name = value; }
- }
-
- public int OptionIndex {
- get { return index; }
- set { index = value; }
- }
-
- public OptionSet OptionSet {
- get { return set; }
- }
-
- public OptionValueCollection OptionValues {
- get { return c; }
- }
- }
-
- public enum OptionValueType
- {
- None,
- Optional,
- Required,
- }
-
- public abstract class Option
- {
- string prototype, description;
- string[] names;
- OptionValueType type;
- int count;
- string[] separators;
- bool hidden;
-
- protected Option (string prototype, string description)
- : this (prototype, description, 1, false)
- {
- }
-
- protected Option (string prototype, string description, int maxValueCount)
- : this (prototype, description, maxValueCount, false)
- {
- }
-
- protected Option (string prototype, string description, int maxValueCount, bool hidden)
- {
- if (prototype == null)
- throw new ArgumentNullException ("prototype");
- if (prototype.Length == 0)
- throw new ArgumentException ("Cannot be the empty string.", "prototype");
- if (maxValueCount < 0)
- throw new ArgumentOutOfRangeException ("maxValueCount");
-
- this.prototype = prototype;
- this.description = description;
- this.count = maxValueCount;
- this.names = (this is OptionSet.Category)
- // append GetHashCode() so that "duplicate" categories have distinct
- // names, e.g. adding multiple "" categories should be valid.
- ? new[]{ prototype + this.GetHashCode () }
- : prototype.Split ('|');
-
- if (this is OptionSet.Category)
- return;
-
- this.type = ParsePrototype ();
- this.hidden = hidden;
-
- if (this.count == 0 && type != OptionValueType.None)
- throw new ArgumentException (
- "Cannot provide maxValueCount of 0 for OptionValueType.Required or " +
- "OptionValueType.Optional.",
- "maxValueCount");
- if (this.type == OptionValueType.None && maxValueCount > 1)
- throw new ArgumentException (
- string.Format ("Cannot provide maxValueCount of {0} for OptionValueType.None.", maxValueCount),
- "maxValueCount");
- if (Array.IndexOf (names, "<>") >= 0 &&
- ((names.Length == 1 && this.type != OptionValueType.None) ||
- (names.Length > 1 && this.MaxValueCount > 1)))
- throw new ArgumentException (
- "The default option handler '<>' cannot require values.",
- "prototype");
- }
-
- public string Prototype { get { return prototype; } }
-
- public string Description { get { return description; } }
-
- public OptionValueType OptionValueType { get { return type; } }
-
- public int MaxValueCount { get { return count; } }
-
- public bool Hidden { get { return hidden; } }
-
- public string[] GetNames ()
- {
- return (string[])names.Clone ();
- }
-
- public string[] GetValueSeparators ()
- {
- if (separators == null)
- return new string [0];
- return (string[])separators.Clone ();
- }
-
- protected static T Parse (string value, OptionContext c)
- {
- Type tt = typeof(T);
- TypeInfo ti = tt.GetTypeInfo ();
- bool nullable = ti.IsValueType && ti.IsGenericType &&
- !ti.IsGenericTypeDefinition &&
- tt.GetGenericTypeDefinition () == typeof(Nullable<>);
- Type targetType = nullable ? tt.GetTypeInfo ().GenericTypeParameters [0] : typeof(T);
- //TypeConverter conv = TypeDescriptor.GetConverter (targetType);
- T t = default (T);
- try {
- if (value != null) {
- throw new ArgumentException ();
- //t = (T)conv.ConvertFromString (value);
- }
- } catch (Exception e) {
- throw new OptionException (
- string.Format (
- c.OptionSet.MessageLocalizer ($"Could not convert string `{value}' to type {targetType.Name} for option `{c.OptionName}'.")),
- c.OptionName, e);
- }
- return t;
- }
-
- internal string[] Names { get { return names; } }
-
- internal string[] ValueSeparators { get { return separators; } }
-
- static readonly char[] NameTerminator = new char[]{ '=', ':' };
-
- private OptionValueType ParsePrototype ()
- {
- char type = '\0';
- List seps = new List ();
- for (int i = 0; i < names.Length; ++i) {
- string name = names [i];
- if (name.Length == 0)
- throw new ArgumentException ("Empty option names are not supported.", "prototype");
-
- int end = name.IndexOfAny (NameTerminator);
- if (end == -1)
- continue;
- names [i] = name.Substring (0, end);
- if (type == '\0' || type == name [end])
- type = name [end];
- else
- throw new ArgumentException (
- string.Format ("Conflicting option types: '{0}' vs. '{1}'.", type, name [end]),
- "prototype");
- AddSeparators (name, end, seps);
- }
-
- if (type == '\0')
- return OptionValueType.None;
-
- if (count <= 1 && seps.Count != 0)
- throw new ArgumentException (
- string.Format ("Cannot provide key/value separators for Options taking {0} value(s).", count),
- "prototype");
- if (count > 1) {
- if (seps.Count == 0)
- this.separators = new string[]{ ":", "=" };
- else if (seps.Count == 1 && seps [0].Length == 0)
- this.separators = null;
- else
- this.separators = seps.ToArray ();
- }
-
- return type == '=' ? OptionValueType.Required : OptionValueType.Optional;
- }
-
- private static void AddSeparators (string name, int end, ICollection seps)
- {
- int start = -1;
- for (int i = end + 1; i < name.Length; ++i) {
- switch (name [i]) {
- case '{':
- if (start != -1)
- throw new ArgumentException (
- string.Format ("Ill-formed name/value separator found in \"{0}\".", name),
- "prototype");
- start = i + 1;
- break;
- case '}':
- if (start == -1)
- throw new ArgumentException (
- string.Format ("Ill-formed name/value separator found in \"{0}\".", name),
- "prototype");
- seps.Add (name.Substring (start, i - start));
- start = -1;
- break;
- default:
- if (start == -1)
- seps.Add (name [i].ToString ());
- break;
- }
- }
- if (start != -1)
- throw new ArgumentException (
- string.Format ("Ill-formed name/value separator found in \"{0}\".", name),
- "prototype");
- }
-
- public void Invoke (OptionContext c)
- {
- OnParseComplete (c);
- c.OptionName = null;
- c.Option = null;
- c.OptionValues.Clear ();
- }
-
- protected abstract void OnParseComplete (OptionContext c);
-
- public override string ToString ()
- {
- return Prototype;
- }
- }
-
- public abstract class ArgumentSource
- {
-
- protected ArgumentSource ()
- {
- }
-
- public abstract string[] GetNames ();
-
- public abstract string Description { get; }
-
- public abstract bool GetArguments (string value, out IEnumerable replacement);
-
- public static IEnumerable GetArguments (TextReader reader)
- {
- return GetArguments (reader, false);
- }
-
- // Cribbed from mcs/driver.cs:LoadArgs(string)
- static IEnumerable GetArguments (TextReader reader, bool close)
- {
- try {
- StringBuilder arg = new StringBuilder ();
-
- string line;
- while ((line = reader.ReadLine ()) != null) {
- int t = line.Length;
-
- for (int i = 0; i < t; i++) {
- char c = line [i];
-
- if (c == '"' || c == '\'') {
- char end = c;
-
- for (i++; i < t; i++) {
- c = line [i];
-
- if (c == end)
- break;
- arg.Append (c);
- }
- } else if (c == ' ') {
- if (arg.Length > 0) {
- yield return arg.ToString ();
- arg.Length = 0;
- }
- } else
- arg.Append (c);
- }
- if (arg.Length > 0) {
- yield return arg.ToString ();
- arg.Length = 0;
- }
- }
- } finally {
- if (close)
- reader.Dispose ();
- }
- }
- }
-
- public class OptionException : Exception
- {
- private string option;
-
- public OptionException ()
- {
- }
-
- public OptionException (string message, string optionName)
- : base (message)
- {
- this.option = optionName;
- }
-
- public OptionException (string message, string optionName, Exception innerException)
- : base (message, innerException)
- {
- this.option = optionName;
- }
-
- public string OptionName {
- get { return this.option; }
- }
- }
-
- public delegate void OptionAction (TKey key, TValue value);
-
- public class OptionSet : KeyedCollection
- {
- public OptionSet ()
- : this ((string f) => f)
- {
- }
-
- public OptionSet (Func localizer)
- {
- this.localizer = localizer;
- this.roSources = new ReadOnlyCollection (sources);
- }
-
- Func localizer;
-
- public Func MessageLocalizer {
- get { return localizer; }
- }
-
- List sources = new List ();
- ReadOnlyCollection roSources;
-
- public ReadOnlyCollection ArgumentSources {
- get { return roSources; }
- }
-
-
- protected override string GetKeyForItem (Option item)
- {
- if (item == null)
- throw new ArgumentNullException ("option");
- if (item.Names != null && item.Names.Length > 0)
- return item.Names [0];
- // This should never happen, as it's invalid for Option to be
- // constructed w/o any names.
- throw new InvalidOperationException ("Option has no names!");
- }
-
- [Obsolete ("Use KeyedCollection.this[string]")]
- protected Option GetOptionForName (string option)
- {
- if (option == null)
- throw new ArgumentNullException ("option");
- try {
- return base [option];
- } catch (KeyNotFoundException) {
- return null;
- }
- }
-
- protected override void InsertItem (int index, Option item)
- {
- base.InsertItem (index, item);
- AddImpl (item);
- }
-
- protected override void RemoveItem (int index)
- {
- Option p = Items [index];
- base.RemoveItem (index);
- // KeyedCollection.RemoveItem() handles the 0th item
- for (int i = 1; i < p.Names.Length; ++i) {
- Dictionary.Remove (p.Names [i]);
- }
- }
-
- protected override void SetItem (int index, Option item)
- {
- base.SetItem (index, item);
- AddImpl (item);
- }
-
- private void AddImpl (Option option)
- {
- if (option == null)
- throw new ArgumentNullException ("option");
- List added = new List (option.Names.Length);
- try {
- // KeyedCollection.InsertItem/SetItem handle the 0th name.
- for (int i = 1; i < option.Names.Length; ++i) {
- Dictionary.Add (option.Names [i], option);
- added.Add (option.Names [i]);
- }
- } catch (Exception) {
- foreach (string name in added)
- Dictionary.Remove (name);
- throw;
- }
- }
-
- public OptionSet Add (string header)
- {
- if (header == null)
- throw new ArgumentNullException ("header");
- Add (new Category (header));
- return this;
- }
-
- internal sealed class Category : Option
- {
-
- // Prototype starts with '=' because this is an invalid prototype
- // (see Option.ParsePrototype(), and thus it'll prevent Category
- // instances from being accidentally used as normal options.
- public Category (string description)
- : base ("=:Category:= " + description, description)
- {
- }
-
- protected override void OnParseComplete (OptionContext c)
- {
- throw new NotSupportedException ("Category.OnParseComplete should not be invoked.");
- }
- }
-
-
- public new OptionSet Add (Option option)
- {
- base.Add (option);
- return this;
- }
-
- sealed class ActionOption : Option
- {
- Action action;
-
- public ActionOption (string prototype, string description, int count, Action action)
- : this (prototype, description, count, action, false)
- {
- }
-
- public ActionOption (string prototype, string description, int count, Action action, bool hidden)
- : base (prototype, description, count, hidden)
- {
- if (action == null)
- throw new ArgumentNullException ("action");
- this.action = action;
- }
-
- protected override void OnParseComplete (OptionContext c)
- {
- action (c.OptionValues);
- }
- }
-
- public OptionSet Add (string prototype, Action action)
- {
- return Add (prototype, null, action);
- }
-
- public OptionSet Add (string prototype, string description, Action action)
- {
- return Add (prototype, description, action, false);
- }
-
- public OptionSet Add (string prototype, string description, Action action, bool hidden)
- {
- if (action == null)
- throw new ArgumentNullException ("action");
- Option p = new ActionOption (prototype, description, 1,
- delegate (OptionValueCollection v) {
- action (v [0]);
- }, hidden);
- base.Add (p);
- return this;
- }
-
- public OptionSet Add (string prototype, OptionAction action)
- {
- return Add (prototype, null, action);
- }
-
- public OptionSet Add (string prototype, string description, OptionAction action)
- {
- return Add (prototype, description, action, false);
- }
-
- public OptionSet Add (string prototype, string description, OptionAction action, bool hidden)
- {
- if (action == null)
- throw new ArgumentNullException ("action");
- Option p = new ActionOption (prototype, description, 2,
- delegate (OptionValueCollection v) {
- action (v [0], v [1]);
- }, hidden);
- base.Add (p);
- return this;
- }
-
- sealed class ActionOption : Option
- {
- Action action;
-
- public ActionOption (string prototype, string description, Action action)
- : base (prototype, description, 1)
- {
- if (action == null)
- throw new ArgumentNullException ("action");
- this.action = action;
- }
-
- protected override void OnParseComplete (OptionContext c)
- {
- action (Parse (c.OptionValues [0], c));
- }
- }
-
- sealed class ActionOption : Option
- {
- OptionAction action;
-
- public ActionOption (string prototype, string description, OptionAction action)
- : base (prototype, description, 2)
- {
- if (action == null)
- throw new ArgumentNullException ("action");
- this.action = action;
- }
-
- protected override void OnParseComplete (OptionContext c)
- {
- action (
- Parse (c.OptionValues [0], c),
- Parse (c.OptionValues [1], c));
- }
- }
-
- public OptionSet Add (string prototype, Action action)
- {
- return Add (prototype, null, action);
- }
-
- public OptionSet Add (string prototype, string description, Action action)
- {
- return Add (new ActionOption (prototype, description, action));
- }
-
- public OptionSet Add (string prototype, OptionAction action)
- {
- return Add (prototype, null, action);
- }
-
- public OptionSet Add (string prototype, string description, OptionAction action)
- {
- return Add (new ActionOption (prototype, description, action));
- }
-
- public OptionSet Add (ArgumentSource source)
- {
- if (source == null)
- throw new ArgumentNullException ("source");
- sources.Add (source);
- return this;
- }
-
- protected virtual OptionContext CreateOptionContext ()
- {
- return new OptionContext (this);
- }
-
- public List Parse (IEnumerable arguments)
- {
- if (arguments == null)
- throw new ArgumentNullException ("arguments");
- OptionContext c = CreateOptionContext ();
- c.OptionIndex = -1;
- bool process = true;
- List unprocessed = new List ();
- Option def = Contains ("<>") ? this ["<>"] : null;
- ArgumentEnumerator ae = new ArgumentEnumerator (arguments);
- foreach (string argument in ae) {
- ++c.OptionIndex;
- if (argument == "--") {
- process = false;
- continue;
- }
- if (!process) {
- Unprocessed (unprocessed, def, c, argument);
- continue;
- }
- if (AddSource (ae, argument))
- continue;
- if (!Parse (argument, c))
- Unprocessed (unprocessed, def, c, argument);
- }
- if (c.Option != null)
- c.Option.Invoke (c);
- return unprocessed;
- }
-
- class ArgumentEnumerator : IEnumerable
- {
- List> sources = new List> ();
-
- public ArgumentEnumerator (IEnumerable arguments)
- {
- sources.Add (arguments.GetEnumerator ());
- }
-
- public void Add (IEnumerable arguments)
- {
- sources.Add (arguments.GetEnumerator ());
- }
-
- public IEnumerator GetEnumerator ()
- {
- do {
- IEnumerator c = sources [sources.Count - 1];
- if (c.MoveNext ())
- yield return c.Current;
- else {
- c.Dispose ();
- sources.RemoveAt (sources.Count - 1);
- }
- } while (sources.Count > 0);
- }
-
- IEnumerator IEnumerable.GetEnumerator ()
- {
- return GetEnumerator ();
- }
- }
-
- bool AddSource (ArgumentEnumerator ae, string argument)
- {
- foreach (ArgumentSource source in sources) {
- IEnumerable replacement;
- if (!source.GetArguments (argument, out replacement))
- continue;
- ae.Add (replacement);
- return true;
- }
- return false;
- }
-
- private static bool Unprocessed (ICollection extra, Option def, OptionContext c, string argument)
- {
- if (def == null) {
- extra.Add (argument);
- return false;
- }
- c.OptionValues.Add (argument);
- c.Option = def;
- c.Option.Invoke (c);
- return false;
- }
-
- private readonly Regex ValueOption = new Regex (
- @"^(?--|-|/)(?[^:=]+)((?[:=])(?.*))?$");
-
- protected bool GetOptionParts (string argument, out string flag, out string name, out string sep, out string value)
- {
- if (argument == null)
- throw new ArgumentNullException ("argument");
-
- flag = name = sep = value = null;
- Match m = ValueOption.Match (argument);
- if (!m.Success) {
- return false;
- }
- flag = m.Groups ["flag"].Value;
- name = m.Groups ["name"].Value;
- if (m.Groups ["sep"].Success && m.Groups ["value"].Success) {
- sep = m.Groups ["sep"].Value;
- value = m.Groups ["value"].Value;
- }
- return true;
- }
-
- protected virtual bool Parse (string argument, OptionContext c)
- {
- if (c.Option != null) {
- ParseValue (argument, c);
- return true;
- }
-
- string f, n, s, v;
- if (!GetOptionParts (argument, out f, out n, out s, out v))
- return false;
-
- Option p;
- if (Contains (n)) {
- p = this [n];
- c.OptionName = f + n;
- c.Option = p;
- switch (p.OptionValueType) {
- case OptionValueType.None:
- c.OptionValues.Add (n);
- c.Option.Invoke (c);
- break;
- case OptionValueType.Optional:
- case OptionValueType.Required:
- ParseValue (v, c);
- break;
- }
- return true;
- }
- // no match; is it a bool option?
- if (ParseBool (argument, n, c))
- return true;
- // is it a bundled option?
- if (ParseBundledValue (f, string.Concat (n + s + v), c))
- return true;
-
- return false;
- }
-
- private void ParseValue (string option, OptionContext c)
- {
- if (option != null)
- foreach (string o in c.Option.ValueSeparators != null
- ? option.Split (c.Option.ValueSeparators, c.Option.MaxValueCount - c.OptionValues.Count, StringSplitOptions.None)
- : new string[]{option}) {
- c.OptionValues.Add (o);
- }
- if (c.OptionValues.Count == c.Option.MaxValueCount ||
- c.Option.OptionValueType == OptionValueType.Optional)
- c.Option.Invoke (c);
- else if (c.OptionValues.Count > c.Option.MaxValueCount) {
- throw new OptionException (localizer (string.Format (
- "Error: Found {0} option values when expecting {1}.",
- c.OptionValues.Count, c.Option.MaxValueCount)),
- c.OptionName);
- }
- }
-
- private bool ParseBool (string option, string n, OptionContext c)
- {
- Option p;
- string rn;
- if (n.Length >= 1 && (n [n.Length - 1] == '+' || n [n.Length - 1] == '-') &&
- Contains ((rn = n.Substring (0, n.Length - 1)))) {
- p = this [rn];
- string v = n [n.Length - 1] == '+' ? option : null;
- c.OptionName = option;
- c.Option = p;
- c.OptionValues.Add (v);
- p.Invoke (c);
- return true;
- }
- return false;
- }
-
- private bool ParseBundledValue (string f, string n, OptionContext c)
- {
- if (f != "-")
- return false;
- for (int i = 0; i < n.Length; ++i) {
- Option p;
- string opt = f + n [i].ToString ();
- string rn = n [i].ToString ();
- if (!Contains (rn)) {
- if (i == 0)
- return false;
- throw new OptionException (string.Format (localizer (
- "Cannot bundle unregistered option '{0}'."), opt), opt);
- }
- p = this [rn];
- switch (p.OptionValueType) {
- case OptionValueType.None:
- Invoke (c, opt, n, p);
- break;
- case OptionValueType.Optional:
- case OptionValueType.Required:
- {
- string v = n.Substring (i + 1);
- c.Option = p;
- c.OptionName = opt;
- ParseValue (v.Length != 0 ? v : null, c);
- return true;
- }
- default:
- throw new InvalidOperationException ("Unknown OptionValueType: " + p.OptionValueType);
- }
- }
- return true;
- }
-
- private static void Invoke (OptionContext c, string name, string value, Option option)
- {
- c.OptionName = name;
- c.Option = option;
- c.OptionValues.Add (value);
- option.Invoke (c);
- }
-
- private const int OptionWidth = 29;
- private const int Description_FirstWidth = 80 - OptionWidth;
- private const int Description_RemWidth = 80 - OptionWidth - 2;
-
- public void WriteOptionDescriptions (TextWriter o)
- {
- foreach (Option p in this) {
- int written = 0;
-
- if (p.Hidden)
- continue;
-
- Category c = p as Category;
- if (c != null) {
- WriteDescription (o, p.Description, "", 80, 80);
- continue;
- }
-
- if (!WriteOptionPrototype (o, p, ref written))
- continue;
-
- if (written < OptionWidth)
- o.Write (new string (' ', OptionWidth - written));
- else {
- o.WriteLine ();
- o.Write (new string (' ', OptionWidth));
- }
-
- WriteDescription (o, p.Description, new string (' ', OptionWidth + 2),
- Description_FirstWidth, Description_RemWidth);
- }
-
- foreach (ArgumentSource s in sources) {
- string[] names = s.GetNames ();
- if (names == null || names.Length == 0)
- continue;
-
- int written = 0;
-
- Write (o, ref written, " ");
- Write (o, ref written, names [0]);
- for (int i = 1; i < names.Length; ++i) {
- Write (o, ref written, ", ");
- Write (o, ref written, names [i]);
- }
-
- if (written < OptionWidth)
- o.Write (new string (' ', OptionWidth - written));
- else {
- o.WriteLine ();
- o.Write (new string (' ', OptionWidth));
- }
-
- WriteDescription (o, s.Description, new string (' ', OptionWidth + 2),
- Description_FirstWidth, Description_RemWidth);
- }
- }
-
- void WriteDescription (TextWriter o, string value, string prefix, int firstWidth, int remWidth)
- {
- bool indent = false;
- foreach (string line in GetLines (localizer (GetDescription (value)), firstWidth, remWidth)) {
- if (indent)
- o.Write (prefix);
- o.WriteLine (line);
- indent = true;
- }
- }
-
- bool WriteOptionPrototype (TextWriter o, Option p, ref int written)
- {
- string[] names = p.Names;
-
- int i = GetNextOptionIndex (names, 0);
- if (i == names.Length)
- return false;
-
- if (names [i].Length == 1) {
- Write (o, ref written, " -");
- Write (o, ref written, names [0]);
- } else {
- Write (o, ref written, " --");
- Write (o, ref written, names [0]);
- }
-
- for (i = GetNextOptionIndex (names, i + 1);
- i < names.Length; i = GetNextOptionIndex (names, i + 1)) {
- Write (o, ref written, ", ");
- Write (o, ref written, names [i].Length == 1 ? "-" : "--");
- Write (o, ref written, names [i]);
- }
-
- if (p.OptionValueType == OptionValueType.Optional ||
- p.OptionValueType == OptionValueType.Required) {
- if (p.OptionValueType == OptionValueType.Optional) {
- Write (o, ref written, localizer ("["));
- }
- Write (o, ref written, localizer ("=" + GetArgumentName (0, p.MaxValueCount, p.Description)));
- string sep = p.ValueSeparators != null && p.ValueSeparators.Length > 0
- ? p.ValueSeparators [0]
- : " ";
- for (int c = 1; c < p.MaxValueCount; ++c) {
- Write (o, ref written, localizer (sep + GetArgumentName (c, p.MaxValueCount, p.Description)));
- }
- if (p.OptionValueType == OptionValueType.Optional) {
- Write (o, ref written, localizer ("]"));
- }
- }
- return true;
- }
-
- static int GetNextOptionIndex (string[] names, int i)
- {
- while (i < names.Length && names [i] == "<>") {
- ++i;
- }
- return i;
- }
-
- static void Write (TextWriter o, ref int n, string s)
- {
- n += s.Length;
- o.Write (s);
- }
-
- private static string GetArgumentName (int index, int maxIndex, string description)
- {
- if (description == null)
- return maxIndex == 1 ? "VALUE" : "VALUE" + (index + 1);
- string[] nameStart;
- if (maxIndex == 1)
- nameStart = new string[]{ "{0:", "{" };
- else
- nameStart = new string[]{ "{" + index + ":" };
- for (int i = 0; i < nameStart.Length; ++i) {
- int start, j = 0;
- do {
- start = description.IndexOf (nameStart [i], j);
- } while (start >= 0 && j != 0 ? description [j++ - 1] == '{' : false);
- if (start == -1)
- continue;
- int end = description.IndexOf ("}", start);
- if (end == -1)
- continue;
- return description.Substring (start + nameStart [i].Length, end - start - nameStart [i].Length);
- }
- return maxIndex == 1 ? "VALUE" : "VALUE" + (index + 1);
- }
-
- private static string GetDescription (string description)
- {
- if (description == null)
- return string.Empty;
- StringBuilder sb = new StringBuilder (description.Length);
- int start = -1;
- for (int i = 0; i < description.Length; ++i) {
- switch (description [i]) {
- case '{':
- if (i == start) {
- sb.Append ('{');
- start = -1;
- } else if (start < 0)
- start = i + 1;
- break;
- case '}':
- if (start < 0) {
- if ((i + 1) == description.Length || description [i + 1] != '}')
- throw new InvalidOperationException ("Invalid option description: " + description);
- ++i;
- sb.Append ("}");
- } else {
- sb.Append (description.Substring (start, i - start));
- start = -1;
- }
- break;
- case ':':
- if (start < 0)
- goto default;
- start = i + 1;
- break;
- default:
- if (start < 0)
- sb.Append (description [i]);
- break;
- }
- }
- return sb.ToString ();
- }
-
- private static IEnumerable GetLines (string description, int firstWidth, int remWidth)
- {
- return StringCoda.WrappedLines (description, firstWidth, remWidth);
- }
- }
-}
-
diff --git a/tools/logcat-parse/Properties/AssemblyInfo.cs b/tools/logcat-parse/Properties/AssemblyInfo.cs
deleted file mode 100644
index 42f73e5ac..000000000
--- a/tools/logcat-parse/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-// Information about this assembly is defined by the following attributes.
-// Change them to the values specific to your project.
-[assembly: AssemblyTitle ("logcat-parse")]
-[assembly: AssemblyDescription ("")]
-[assembly: AssemblyConfiguration ("")]
-[assembly: AssemblyCompany ("Xamarin Inc.")]
-[assembly: AssemblyProduct ("")]
-[assembly: AssemblyCopyright ("Xamarin Inc.")]
-[assembly: AssemblyTrademark ("Xamarin")]
-[assembly: AssemblyCulture ("")]
-// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
-// The form "{Major}.{Minor}.*" will automatically update the build and revision,
-// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-[assembly: AssemblyVersion ("1.0.*")]
-// The following attributes are used to specify the signing key for the assembly,
-// if desired. See the Mono documentation for more information about signing.
-//[assembly: AssemblyDelaySign(false)]
-//[assembly: AssemblyKeyFile("")]
-
diff --git a/tools/logcat-parse/logcat-parse.csproj b/tools/logcat-parse/logcat-parse.csproj
index 708a4d88b..191e862cc 100644
--- a/tools/logcat-parse/logcat-parse.csproj
+++ b/tools/logcat-parse/logcat-parse.csproj
@@ -1,60 +1,28 @@
-
-
+
+
- Debug
- AnyCPU
- 8.0.30703
- 2.0
- {7387E151-48E3-4885-B2CA-A74434A34045}
+ net472
Exe
- Xamarin.Android.Tools.LogcatParse
- logcat-parse
- v4.6.1
- Xamarin.Android.Tools.LogcatParse.Program
+ false
+
-
- true
- full
- false
- $(UtilityOutputFullPath)
- DEBUG;TRACE
- prompt
- 4
- true
- true
-
-
- full
- true
+
+
$(UtilityOutputFullPath)
- TRACE
- prompt
- 4
- true
- true
+
-
-
-
- ..\..\packages\Mono.CSharp.4.0.0.143\lib\4.5\Mono.CSharp.dll
-
-
- ..\..\packages\Mono.Terminal.4.2.2.0\lib\net4\Mono.Terminal.dll
-
-
-
-
-
-
-
-
-
-
+
+
+
-
+
-
+
+
+
+
+
diff --git a/tools/logcat-parse/packages.config b/tools/logcat-parse/packages.config
deleted file mode 100644
index 4d7504489..000000000
--- a/tools/logcat-parse/packages.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file